DGML ファイルを編集してコード マップをカスタマイズする
コード マップをカスタマイズするには、その Directed Graph Markup Language (.dgml) ファイルを編集できます。 たとえば、要素を編集してカスタム スタイルを指定したり、コード要素とリンクにプロパティおよびカテゴリを割り当てたり、コード要素やリンクにドキュメントや URL をリンクしたりすることができます。 DGML 要素の詳細については、「Directed Graph Markup Language (DGML) リファレンス」を参照してください。
テキスト エディターまたは XML エディターで、コード マップの .dgml ファイルを編集します。 マップが Visual Studio ソリューションの一部である場合は、 [ソリューション エクスプローラー] でそれを選択してショートカット メニューを開き、 [プログラムから開く] 、 [XML (テキスト) エディター] の順に選択します。
注意
コード マップを作成するには、Visual Studio Enterprise エディションが必要です。 Visual Studio でコード マップを編集する場合、.dgml ファイルを保存すると、未使用の DGML 要素および属性が削除されクリーンアップされます。 また、新しいリンクを手動で追加すると、コード要素が自動的に作成されます。 .dgml ファイルを保存すると、要素に追加した属性によって、自身がアルファベット順に並べ替えられる場合があります。
コード要素のグループ化
新しいグループを追加したり、既存のノードをグループに変換したりすることができます。
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
コード要素をグループに変換するには、そのコード要素の
<Node/>
要素を見つけます。- または -
新しいグループを追加するには、
<Nodes>
セクションを見つけます。 新しい<Node/>
要素を追加します。<Node/>
要素に、Group
属性を追加して、グループを展開した状態で表示するか、折りたたんだ状態で表示するかを指定します。 次に例を示します。<Nodes> <Node Id="MyFirstGroup" Group="Expanded" /> <Node Id="MySecondGroup" Group="Collapsed" /> </Nodes>
<Links>
セクションで、次の属性を持つ<Link/>
要素が、グループ コード要素とその子コード要素の間のリレーションシップごとに存在することを確認します。グループ コード要素を指定する
Source
属性子コード要素を指定する
Target
属性グループ コード要素とその子コード要素との間の
Category
リレーションシップを指定するContains
属性次に例を示します。
<Links> <Link Category="Contains" Source="MyFirstGroup" Target="FirstGroupChildOne" /> <Link Category ="Contains" Source="MyFirstGroup" Target="FirstGroupChildTwo" /> <Link Category ="Contains" Source="MySecondGroup" Target="SecondGroupChildOne" /> <Link Category="Contains" Source="MySecondGroup" Target="SecondGroupChildTwo" /> </Links>
Category
属性の詳細については、「コード要素とリンクにカテゴリを割り当てる」を参照してください。
マップのスタイルを変更する
マップの .dgml ファイルを編集することで、マップの背景色および境界線の色を変更できます。 コード要素とリンクのスタイルを変更するには、「コード要素とリンクのスタイルを変更する」を参照してください。
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
<DirectedGraph>
要素に次の任意の属性を追加して、グラフのスタイルを変更します。背景の色
Background="ColorNameOrHexadecimalValue"
罫線の色
Stroke="StrokeValue"
次に例を示します。
<DirectedGraph Background="Green" xmlns="http://schemas.microsoft.com/vs/2009/dgml" > ... ... </DirectedGraph>
コード要素およびリンクのスタイルを変更する
次のコード要素にカスタム スタイルを適用できます。
単一のコード要素およびリンク
コード要素およびリンクのグループ
特定の条件に基づくコード要素およびリンクのグループ
ヒント
多くのコード要素またはリンクで繰り返し使用するスタイルがある場合は、これらのコード要素またはリンクにカテゴリを適用し、そのカテゴリにスタイルを適用することも検討できます。 詳細については、「コード要素とリンクにカテゴリを割り当てる」と「コード要素とリンクにプロパティを割り当てる」を参照してください。
単一のコード要素にカスタム スタイルを適用するには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
コード要素の
<Node/>
要素を見つけます。 次の属性のいずれかを追加して、そのスタイルをカスタマイズします。背景の色
Background="ColorNameOrHexadecimalValue"
枠線
Stroke="ColorNameOrHexadecimalValue"
外枠の太さ
StrokeThickness="StrokeValue"
テキストの色
Foreground="ColorNameOrHexadecimalValue"
アイコン
Icon="IconFilePathLocation"
テキストのサイズ
FontSize="FontSizeValue"
テキスト型
FontFamily="FontFamilyName"
テキストの太さ
FontWeight="FontWeightValue"
テキストのスタイル
FontStyle="FontStyleName"
たとえば、テキストのスタイルとして
Italic
を指定できます。テクスチャ
Style="Glass"
または
Style="Plain"
図形
シェイプをアイコンに置き換えるには、
Shape
プロパティをNone
に設定し、Icon
プロパティをアイコン ファイルがあるパスに設定します。Shape="ShapeFilePathLocation"
次に例を示します。
<Nodes> <Node Id="MyNode" Background="#FF008000" Stroke="#FF000000" Foreground="#FFFFFFFF" Icon="...\Icons\Globe.png"/> </Nodes>
単一のリンクにカスタム スタイルを適用するには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
ソース コード要素とターゲット コード要素の両方の名前を含む
<Link/>
要素を探します。<Link/>
要素に次の属性を追加して、スタイルをカスタマイズします。外枠と矢じりの色
Stroke="ColorNameOrHexadecimalValue"
外枠の太さ
StrokeThickness="StrokeValue"
外枠のスタイル
StrokeDashArray="StrokeArrayValues"
次に例を示します。
<Links> <Link Source="MyFirstNode" Target="MySecondNode" Background="Green" Stroke="#FF000000" StrokeDashArray="2,2"/> </Links>
コード要素またはリンクのグループにカスタム スタイルを適用するには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
<Styles></Styles>
要素が存在しない場合、<DirectedGraph></DirectedGraph>
要素の後の<Links></Links>
要素の下位に、この要素を追加します。<Styles></Styles>
要素で、<Style/>
要素の下位に次の属性を指定します。TargetType="Node
|Link | Graph"
GroupLabel="
NameInLegendBox"
ValueLabel="
NameInStylePickerBox"
全種類の対象にカスタム スタイルを適用する場合、条件は使用しません。
コード要素またはリンクのグループに条件付きスタイルを適用するには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
<Style/>
要素に、<Condition/>
属性を含むExpression
要素を追加して、ブール値を返す式を指定します。次に例を示します。
<Condition Expression="MyCategory"/>
または
<Condition Expression="MyCategory > 100"/>
または
<Condition Expression="HasCategory('MyCategory')"/>
この式では、次のバッカス・ナウア記法 (BNF: Backus-Naur Form) 構文を使用します。
<Expression> ::= <BinaryExpression> | \<UnaryExpression> | "("<Expression>")" | <MemberBindings> | <Literal> | \<Number> <BinaryExpression> ::= <Expression> <Operator> <Expression> <UnaryExpression> ::= "!" <Expression> | "+" <Expression> | "-" <Expression> <Operator> ::= "<" | "<=" | "=" | ">=" | ">" | "!=" | "or" | "and" | "+" | "*" | "/" | "-" <MemberBindings> ::= <MemberBindings> | <MemberBinding> "." <MemberBinding> <MemberBinding> ::= <MethodCall> | <PropertyGet> <MethodCall> ::= <Identifier> "(" <MethodArgs> ")" <PropertyGet> ::= <Identifier> <MethodArgs> ::= <Expression> | <Expression> "," <MethodArgs> | <empty> <Identifier> ::= [^. ]* <Literal> ::= single or double-quoted string literal <Number> ::= string of digits with optional decimal point
複数の
<Condition/>
要素を指定できます。スタイルを適用するには、それらがすべて true である必要があります。<Condition/>
要素の次の行に、1 つ以上の<Setter/>
要素を追加して、条件を満たすマップ、コード要素、またはリンクに適用するProperty
属性と、固定のValue
属性または計算されるExpression
属性を指定します。次に例を示します。
<Setter Property="BackGround" Value="Green"/>
以下に簡単な完成例を示します。この例の条件では、コード要素の
Passed
カテゴリがTrue
とFalse
のどちらに設定されているかに基づいてコード要素が緑色または赤色で表示されるように指定しています。
<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph xmlns="http://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
<Node Id="MyFirstNode" Passed="True" />
<Node Id="MySecondNode" Passed="False" />
</Nodes>
<Links>
</Links>
<Styles>
<Style TargetType="Node" GroupLabel="Passed" ValueLabel="True">
<Condition Expression="Passed='True'"/>
<Setter Property="Background" Value="Green"/>
</Style>
<Style TargetType="Node" GroupLabel="Passed" ValueLabel="False">
<Condition Expression="Passed='False'"/>
<Setter Property="Background" Value="Red"/>
</Style>
</Styles>
</DirectedGraph>
次の表に、実際に使用できる条件例をいくつか示します。
フォント サイズをコードの行数の関数として設定する。それによってコード要素のサイズも変更されます。 この例では、単一の条件式を使用して、複数のプロパティ (FontSize
および FontFamily
) を設定しています。
<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph xmlns="http://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
<Node Id="Class1" LinesOfCode ="200" />
<Node Id="Class2" LinesOfCode ="1000" />
<Node Id="Class3" LinesOfCode ="20" />
</Nodes>
<Properties>
<Property Id="LinesOfCode" Label="LinesOfCode" Description="LinesOfCode" DataType="System.Int32" />
</Properties>
<Styles>
<Style TargetType="Node" GroupLabel="LinesOfCode" ValueLabel="Function">
<Condition Expression="LinesOfCode > 0" />
<Setter Property="FontSize" Expression="Math.Max(9,Math.Sqrt(LinesOfCode))" />
<Setter Property="FontFamily" Value="Papyrus" />
</Style>
</Styles>
</DirectedGraph>
Coverage
プロパティに基づいて、コード要素の背景色を設定する。 スタイルは、if-else
ステートメントと同様に、出現する順番で評価されます。
この例では:
Coverage
が > 80 の場合は、Background
プロパティを緑色に設定します。Coverage
が > 50 の場合は、Coverage
プロパティの値に基づいて、Background
プロパティをオレンジ色の網かけに設定します。それ以外の場合、
Background
プロパティの値に基づいて、Coverage
プロパティを赤色の網かけに設定します。
<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph xmlns="http://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
<Node Id="Class1" Coverage="58" />
<Node Id="Class2" Coverage="95" />
<Node Id="Class3" Coverage="32" />
</Nodes>
<Properties>
<Property Id="Coverage" Label="Coverage" Description="Code coverage as a percentage of blocks" DataType="Double" />
</Properties>
<Styles>
<Style TargetType="Node" GroupLabel="Coverage" ValueLabel="Good">
<Condition Expression="Coverage > 80" />
<Setter Property="Background" Value="Green" />
</Style>
<Style TargetType="Node" GroupLabel="Coverage" ValueLabel="OK">
<Condition Expression="Coverage > 50" />
<Setter Property="Background" Expression="Color.FromRgb(180 * Math.Max(1, (80 - Coverage) / 30), 180, 0)" />
</Style>
<Style TargetType="Node" GroupLabel="Coverage" ValueLabel="Bad">
<Setter Property="Background" Expression="Color.FromRgb(180, 180 * Coverage / 50, 0)" />
</Style>
</Styles>
</DirectedGraph>
Shape
プロパティを None
に設定して、図形をアイコンで置き換える。 Icon
プロパティを使用して、アイコンの場所を指定します。
<DirectedGraph xmlns="http://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
<Node Id="Automation" Category="Test" Label="Automation" />
<Node Id="C# Provider" Category="Provider" Label="C# Provider" />
</Nodes>
<Categories>
<Category Id="Provider" Icon="...\Icons\Module.png" Shape="None" />
<Category Id="Test" Icon="...\Icons\Page.png" Shape="None" />
</Categories>
<Properties>
<Property Id="Icon" DataType="System.String" />
<Property Id="Label" Label="Label" Description="Displayable label of an Annotatable object" DataType="System.String" />
<Property Id="Shape" DataType="System.String" />
</Properties>
<Styles>
<Style TargetType="Node" GroupLabel="Group" ValueLabel="Has category">
<Condition Expression="HasCategory('Group')" />
<Setter Property="Background" Value="#80008080" />
</Style>
<Style TargetType="Node">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</Styles>
</DirectedGraph>
コード要素およびリンクにプロパティを割り当てる
コード要素およびリンクにプロパティを割り当てることで、コード要素およびリンクを編成できます。 たとえば、特定のプロパティを持つコード要素を選択して、それらのグループ化、スタイルの変更、または非表示化を実行できます。
コード要素にプロパティを割り当てるには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
そのコード要素の
<Node/>
要素を見つけます。 プロパティの名前とその値を指定します。 次に例を示します。<Nodes> <Node Id="MyNode" MyPropertyName="PropertyValue" /> </Nodes>
<Property/>
要素を<Properties>
セクションに追加して、属性 (要素の表示名、データ型など) を指定します。<Properties> <Property Id="MyPropertyName" Label="My Property" DataType="System.DataType"/> </Properties>
リンクにプロパティを割り当てるには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
ソース コード要素とターゲット コード要素の両方の名前を含む
<Link/>
要素を探します。<Node/>
要素で、プロパティの名前とその値を指定します。 次に例を示します。<Links> <Link Source="MyFirstNode" Target="MySecondNode" MyPropertyName="PropertyValue" /> </Links>
<Property/>
要素を<Properties>
セクションに追加して、属性 (要素の表示名、データ型など) を指定します。<Properties> <Property Id="MyPropertyName" Label="My Property Name" DataType="System.DataType"/> </Properties>
コード要素およびリンクにカテゴリを割り当てる
次のセクションでは、コード要素にカテゴリを割り当てることでコード要素を整理する方法と、コード要素を編成したり子カテゴリに属性を追加したりするのに役立つ階層カテゴリを継承を使用して作成する方法について説明します。
コード要素にカテゴリを割り当てるには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
目的のコード要素の
<Node/>
要素を見つけます。<Node/>
要素にCategory
属性を追加して、カテゴリの名前を指定します。 次に例を示します。<Nodes> <Node Id="MyNode" Category="MyCategory" /> </Nodes>
<Category/>
セクションに<Categories>
要素を追加することで、Label
属性を使用してそのカテゴリの表示テキストを指定できます。<Categories> <Category Id="MyCategory" Label="My Category" /> </Categories>
リンクにカテゴリを割り当てるには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
ソース コード要素とターゲット コード要素の両方の名前を含む
<Link/>
要素を探します。<Link/>
要素にCategory
属性を追加して、カテゴリの名前を指定します。 次に例を示します。<Links> <Link Source="MyFirstNode" Target="MySecondNode" Category="MyCategory" </Links>
<Category/>
セクションに<Categories>
要素を追加することで、Label
属性を使用してそのカテゴリの表示テキストを指定できます。<Categories> <Category Id="MyCategory" Label="My Category" /> </Categories>
階層構造のカテゴリを作成するには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
親カテゴリを示す
<Category/>
要素を追加し、次に子カテゴリのBasedOn
要素に<Category/>
属性を追加します。次に例を示します。
<Nodes> <Node Id="MyFirstNode" Label="My First Node" Category= "MyCategory" /> <Node Id="MySecondNode" Label="My Second Node" /> </Nodes> <Links> <Link Source="MyFirstNode" Target="MySecondNode" /> </Links> <Categories> <Category Id="MyCategory" Label="My Category" BasedOn="MyParentCategory"/> <Category Id="MyParentCategory" Label="My Parent Category" Background="Green"/> </Categories>
この例では、
MyFirstNode
の背景は緑色になります。これは、そのCategory
属性がBackground
のMyParentCategory
属性を継承するためです。
コード要素やリンクへのドキュメントまたは URL のリンク
マップの .dgml ファイルを編集したり Reference
属性をコード要素の <Node/>
要素またはリンクの <Link/>
要素に追加することで、ドキュメントまたは URL をコード要素またはリンクに対してリンク付けできます。 これで、そのコンテンツをコード要素またはリンクから開いて参照できるようになります。 Reference
属性では、そのコンテンツのパスを指定します。 これには、.dgml ファイルの場所に対する相対パス、または絶対パスを使用できます。
注意事項
相対パスを使用し、.dgml ファイルが別の位置に移動された場合、それらのパスは解決しません。 リンクされたコンテンツを開いて参照しようとした場合、コンテンツを表示できないことを示すエラーが発生します。
たとえば、次のコード要素をリンクできます。
クラスに対する変更を示すために、クラスを示すコード要素に、作業コード要素、ドキュメント、または別の .dgml ファイルの URL をリンクすることができます。
ソフトウェアの論理アーキテクチャのレイヤーを表すグループ コード要素に依存関係図をリンクします。
インターフェイスを公開するコンポーネントに関する詳細情報を表示するために、そのインターフェイスを示すコード要素にコンポーネント図をリンクすることができます。
コード要素を、Team Foundation Server の作業項目やバグ、またはそのコード要素に関連するその他の情報にリンクします。
ドキュメントまたは URL をコード要素にリンクするには
テキスト エディターまたは XML エディターで、.dgml ファイルを開きます。
目的のコード要素の
<Node/>
要素を見つけます。次の表にあるタスクのいずれかを実行します。
単一のコード要素
<Node/>
要素または<Link/>
要素で、Reference
属性を追加してコード要素の場所を指定します。注意
1 つの要素に対して 1 つの
Reference
属性のみを使用できます。次に例を示します。
<Nodes> <Node Id="MyNode" Reference="MyDocument.txt" /> </Nodes> <Properties> <Property Id="Reference" Label="My Document" DataType="System.String" IsReference="True" /> </Properties>
複数のコード要素
<Node/>
要素または<Link/>
要素で、各参照の場所を指定する新しい属性を追加します。<Properties>
セクションで、次の操作を行います。新しい種類の参照ごとに
<Property/>
要素を追加します。新しい参照属性の名前に
Id
属性を設定します。IsReference
属性を追加し、それをTrue
に設定して、参照がコード要素の [参照へジャンプ] ショートカット メニューに表示されるようにします。Label
属性を使用して、コード要素の [参照へジャンプ] ショートカット メニューの表示テキストを指定します。
次に例を示します。
<Nodes> <Node Id="MyNode" SequenceDiagram="MySequenceDiagram.sequencediagram" ActiveBugs="MyActiveBugs.wiq"/> </Nodes> <Properties> <Property Id="SequenceDiagram" Label="My Sequence Diagram" DataType="System.String" IsReference="True" /> <Property Id="ActiveBugs" Label="Active Bugs" DataType="System.String" IsReference="True" /> </Properties>
マップでは、コード要素の名前は下線付きで表示されます。 コード要素またはリンクのショートカット メニューを開くと、リンクされているコード要素を示す [参照へジャンプ] ショートカット メニューが表示され、そこから選択できます。
参照で文字列を繰り返し使用する代わりに、
ReferenceTemplate
属性を使用して、複数の参照で使用する共通の文字列 (URL など) を指定します。ReferenceTemplate
属性では、参照の値のプレースホルダーを指定します。 次の例では、{0}
属性のReferenceTemplate
プレースホルダーは、MyFirstReference
要素のMySecondReference
属性と<Node/>
属性の値に置換され、完全なパスが生成されます。<Nodes> <Node Id="MyNode" MyFirstReference="MyFirstDocument" MySecondReference="MySecondDocument"/> <Node Id="MySecondNode" MyFirstReference="AnotherFirstDocument" MySecondReference="AnotherSecondDocument"/> </Nodes> <Properties> <Property Id="MyFirstReference" Label="My First Document" DataType="System.String" IsReference="True" ReferenceTemplate="http://www.Fabrikam.com/FirstDocuments/{0}.asp"/> <Property Id="MySecondReference" Label="My Second Document" DataType="System.String" IsReference="True" ReferenceTemplate=" http://www.Fabrikam.com/SecondDocuments/{0}.asp"/> </Properties>
マップから参照先のコード要素を表示するには、コード要素またはリンクのショートカット メニューを開きます。 [参照へジャンプ] を選択してからコード要素を選択します。