コードからの依存関係図の作成

ソフトウェア システムの高レベルな論理アーキテクチャを視覚化するには、Visual Studio で依存関係図を作成します。 コードがこの設計と一致していることを確認するには、依存関係図を使用してコードを検証します。 Visual C# プロジェクトと Visual Basic プロジェクトの依存関係図を作成できます。 この機能をサポートする Visual Studio のバージョンを確認するには、「アーキテクチャとモデリング ツールのエディション サポート」を参照してください。

依存関係図を作成する

依存関係図を使用すると、Visual Studio のソリューション項目を整理して、"レイヤー" と呼ばれる論理的、抽象的なグループにまとめることができます。 レイヤーを使用して、これらの成果物が実行する主要タスク、またはシステムの主要コンポーネントを示すことができます。

各レイヤーには、より詳細なタスクを示す別のレイヤーを含めることができます。 また、レイヤー間の目的のまたは既存の "依存関係" も指定できます。 矢印で表されるこれらの依存関係は、他のレイヤーが表す機能を使用する、または使用できるレイヤーを示します。 コードのアーキテクチャ コントロールを保持するには、目的の依存関係を図で示し、図と照らし合わせてコードを検証します。

ビデオ: アーキテクチャの依存関係をリアルタイムで検証する

依存関係図を作成する

依存関係図を作成する前に、ソリューションにモデリング プロジェクトがあることを確認します。

重要

既存の依存関係図を、あるモデリング プロジェクトから別のモデリング プロジェクト、またはソリューション内の別の場所に追加、ドラッグ、またはコピーしないでください。 これで、図を変更しても、元の図からの参照が保持されます。 また、これによってレイヤー検証が正しく機能しないため、要素が欠落したり、図を開こうとすると他のエラーが発生するなど、別の問題が生じる可能性があります。

代わりに、新しい依存関係図をモデリング プロジェクトに追加してください。 元の図から新しい図へ要素をコピーします。 モデリング プロジェクトと新しい依存関係図の両方を保存します。

新しい依存関係図をモデリング プロジェクトに追加する

Note

.NET Core プロジェクトの依存関係図は、Visual Studio 2019 バージョン 16.2 以降でサポートされています。

  1. [アーキテクチャ] メニューの [新しい依存関係図] をクリックします。

  2. [テンプレート][依存関係図] を選択します。

  3. 図に名前を付けます。

  4. [モデリング プロジェクトへの追加] で、ソリューション内の既存のモデリング プロジェクトを参照して選択します。

    または

    [新しいモデリング プロジェクトを作成します] をクリックして、新しいモデリング プロジェクトをソリューションに追加します。

    注意

    依存関係図はモデリング プロジェクト内に存在している必要があります。 ただし、ソリューション内のどの場所にある項目にもリンクできます。

  5. 必ず、モデリング プロジェクトと依存関係図の両方を保存してください。

コード マップからのドラッグ アンド ドロップ (コピーと貼り付け)

  1. [アーキテクチャ] メニューを使用して、ソリューションのコード マップを生成します。

  2. 製品コードに依存関係を適用するだけの場合は、ソリューション フォルダーと "テスト アセット" を削除するコード マップ フィルターを適用することを検討してください。

  3. 生成されたコード マップで、名前空間の依存関係を適用するかどうかに応じて、"外部" ノードを削除するか、外部アセンブリを表示するように展開します。 コード マップから不要なアセンブリを削除します。

  4. [アーキテクチャ] メニューを使用して、ソリューションの新しい依存関係図を作成します。

  5. コード マップ上のすべてのノードを選択します (Ctrl + A を使用するか、Shift キーを押しながらクリックし、ドラッグして離します)。

  6. 選択した要素を新しい依存関係検証ダイアグラムにドラッグ アンド ドロップするか、コピーして貼り付けます。

  7. これは、現在のアプリのアーキテクチャを示しています。 アーキテクチャをどのようにするかを決定し、それに応じて依存関係図を変更します。

コード マップから生成された依存関係図

成果物からレイヤーを作成する

レイヤーは、プロジェクト、コード ファイル、名前空間、クラス、メソッドなど、Visual Studio ソリューションの項目から生成できます。 これにより、レイヤーと項目の間のリンクが自動的に作成され、レイヤー検証プロセスに含まれます。

Word 文書や PowerPoint プレゼンテーションなど、検証をサポートしていない項目にレイヤーをリンクできます。 これにより、レイヤーを仕様またはプランに関連付けることができます。 複数のアプリが共有するプロジェクトのファイルにレイヤーをリンクすることもできます。ただし、これらのレイヤーは検証プロセスには含まれず、"レイヤー 1"、"レイヤー 2" などの汎用名で表示されます。

リンクされた項目が検証をサポートしているかどうかを確認するには、レイヤー エクスプローラーを開き、項目の [検証をサポート] プロパティを調べます。 「成果物へのリンクの管理」を参照してください。

To こちらの手順に従ってください
1 つの成果物を表すレイヤーを生成する
  1. 以下のソースから依存関係図上へ項目をドラッグします。
    レイヤーが図に表示され、成果物にリンクされます。
  2. レイヤーの名前を、関連するコードや成果物の役割を表す名前に変更します。

重要: バイナリ ファイルを依存関係図にドラッグしても、モデリング プロジェクトへの参照は自動的には追加されません。 検証するバイナリ ファイルを手動でモデリング プロジェクトに追加します。 バイナリ ファイルをモデリング プロジェクトに追加するには
  1. ソリューション エクスプローラーで、モデリング プロジェクトのショートカット メニューを開き、 [既存項目の追加] をクリックします。
  2. [既存項目の追加] ダイアログ ボックスで、バイナリ ファイルを参照し、それらを選択して [OK] をクリックします。 バイナリ ファイルがモデリング プロジェクトに表示されます。
  3. ソリューション エクスプローラーで、追加したバイナリ ファイルをクリックし、F4 キーを押して [プロパティ] ウィンドウを開きます。
  4. 各バイナリ ファイルで、 [ビルド アクション] プロパティを [検証] に設定します。
選択したすべての成果物を表す 1 つのレイヤーを生成する すべての成果物を同時に依存関係図へドラッグします。

レイヤーが図に表示され、すべての成果物にリンクされます。
選択した各成果物を表すレイヤーを生成する Shift キーを押しながら、すべての成果物を同時に依存関係図へドラッグします。
注:Shift キーを使用して項目の範囲を選択する場合は、成果物を選択した後でキーを離します。 成果物を図にドラッグするときは、キーを再び押して、押したままにします。

各成果物を表すレイヤーが図に表示され、各成果物にリンクされます。
成果物をレイヤーに追加する 成果物をレイヤーにドラッグします。
リンクされない新しいレイヤーを生成する ツールボックスで、 [依存関係ダイアグラム] セクションを展開し、レイヤーを依存関係図にドラッグします。

複数のレイヤーを追加するには、ツールをダブルクリックします。 完了したら、 [ポインター] ツールを選択するか、Esc キーを押します。

または

依存関係図のショートカット メニューを開き、 [追加] をクリックし、 [レイヤー] を選択します。
入れ子になったレイヤーを生成する 既存のレイヤーを別のレイヤー上へドラッグします。

または

レイヤーのショートカット メニューを開き、 [追加] を選択し、 [レイヤー] を選択します。
複数の既存レイヤーを含む新しいレイヤーを生成する レイヤーを選択し、選択用のショートカット メニューを開き、 [グループ] を選択します。
レイヤーの色を変更する レイヤーの [カラー] プロパティを任意の色に設定します。
レイヤーに関連付けられている成果物を、指定した名前空間に所属しないように指定する レイヤーの [禁止された名前空間] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。
レイヤーに関連付けられている成果物が、指定した名前空間に依存できないように指定する レイヤーの [禁止された名前空間の依存関係] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。
レイヤーに関連付けられている成果物を、指定した名前空間のいずれかに必ず所属させるように指定する レイヤーの [必要な名前空間] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。

レイヤーの数字は、レイヤーにリンクされている成果物の数を示します。 ただし、この数値を読み取るときには、次の点に注意してください。

  • 1 つのレイヤーが他の成果物を含む 1 つの成果物にリンクされているが、他の成果物に直接リンクされていない場合、その数字にはリンクされた成果物のみが含まれます。 ただし、レイヤー検証時の分析にはそれらの他の成果物も含まれます。

    たとえば、1 つのレイヤーが 1 つの名前空間にリンクされている場合、その名前空間に複数のクラスが含まれていても、リンクされた成果物の数は 1 です。 レイヤーに名前空間の各クラスへのリンクもある場合、その数字にはリンクされたクラスが含まれます。

  • 1 つのレイヤーに成果物にリンクされた他のレイヤーが含まれている場合は、そのコンテナー レイヤーの数字にそれらの成果物が含まれていなくても、コンテナー レイヤーはそれらの成果物にリンクされます。

レイヤーと成果物の間のリンクを管理する

  1. 依存関係図で、レイヤーのショートカット メニューを開き、 [リンクの表示] をクリックします。

    レイヤー エクスプローラーに、選択したレイヤーに関する成果物のリンクが表示されます。

  2. これらのリンクを管理するには、次の操作を行います。

To レイヤー エクスプローラーでの操作
レイヤーと成果物のリンクを削除する 成果物のリンクのショートカット メニューを開き、 [削除] をクリックします。
リンクを別のレイヤーに移動する 成果物のリンクを図上の既存のレイヤーにドラッグします。

または

1. 成果物のリンクのショートカット メニューを開き、[切り取り] を選択します。
2. 依存関係図で、レイヤーのショートカット メニューを開き、[貼り付け] を選択します。
リンクを別のレイヤーにコピーする 1. 成果物のリンクのショートカット メニューを開き、[コピー] を選択します。
2. 依存関係図で、レイヤーのショートカット メニューを開き、[貼り付け] を選択します。
既存の成果物のリンクから新しいレイヤーを生成する 成果物のリンクを図上の空白領域にドラッグします。
リンクされた成果物で依存関係図に対する検証がサポートされていることを確認する 成果物のリンクの [検証をサポート] 列を調べます。

既存の依存関係をリバース エンジニアリングする

依存関係が存在するのは、あるレイヤーに関連付けられている成果物が、別のレイヤーに関連付けられている成果物を参照している場合です。 たとえば、あるレイヤー内のクラスが、別のレイヤー内のクラスを保持する変数を宣言する場合などです。 図のレイヤーにリンクされている成果物の既存の依存関係はリバース エンジニアリングできます。

Note

成果物の種類によっては、依存関係をリバース エンジニアリングできないものもあります。 たとえば、テキスト ファイルにリンクされているレイヤーから、またはそのレイヤーに対して依存関係をリバース エンジニアリングすることはできません。 リバース エンジニアリングできる依存関係のある成果物を確認するには、1 つ以上のレイヤーのショートカット メニューを開き、 [リンクの表示] をクリックします。 レイヤー エクスプローラーで、 [検証をサポート] 列を調べます。 この列に [False] と表示されている成果物については、依存関係をリバース エンジニアリングすることはできません。

  • 1 つ以上のレイヤーを選択し、選択したレイヤーのショートカット メニューを開き、 [依存関係の生成] をクリックします。

    存在すべきでない依存関係がいくつか表示される場合は、それらの依存関係を編集し、意図した設計に合わせて調整できます。

レイヤーと依存関係を編集して目的の設計を表示する

システムに追加予定の変更または目的のアーキテクチャを示すには、依存関係図を編集します。

To 実行する手順
依存関係の方向を変更または制限する その [方向] プロパティを設定します。
新しい依存関係を生成する 依存関係ツールと双方向の依存関係ツールを使用します。

複数の依存関係を描画するには、ツールをダブルクリックします。 完了したら、 [ポインター] ツールを選択するか、Esc キーを押します。
レイヤーに関連付けられている成果物が、指定した名前空間に依存できないように指定する レイヤーの [禁止された名前空間の依存関係] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。
レイヤーに関連付けられている成果物を、指定した名前空間に所属させることができないように指定する レイヤーの [禁止された名前空間] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。
レイヤーに関連付けられている成果物を、指定した名前空間のいずれかに必ず所属させるように指定する レイヤーの [必要な名前空間] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。

図における要素の表示方法を変更する

プロパティを編集して、レイヤーのサイズ、形状、色、位置、または依存関係の色を変更できます。

コード マップ上のパターンと依存関係を見つけます。

依存関係図を作成するときに、コート マップも作成できます。 これらの図を利用することで、コードを検証するときに、パターンと依存関係を見つけやすくなります。 ソリューション エクスプローラー、クラス ビュー、またはオブジェクト ブラウザーを使用して、アセンブリ、名前空間、およびクラスを調べることができます。これらは、通常は既存のレイヤーに対応しています。 コード マップについての詳細は、次を参照してください。