draw.io XML文書作成ガイド (フロー図)
LLMにdrawioファイルをXML形式で書かせるためのガイド。
単純な指示だとレイアウトに難があったので、作成。
draw.io XML文書作成ガイド (フロー図)
この文書では、draw.ioでフロー図をXML文書として作成する方法を解説します。GUI操作に頼らず、テキストベースでダイアグラムを定義し、draw.ioにインポートする手順をステップごとに説明します。
draw.io XML形式の基本
draw.ioのXML文書は、mxCell要素を基本として構成されます。mxCell要素は、ノード(図形)やエッジ(線)などのダイアグラムの要素を表します。
-
mxCell (ノード):
-
id
: ノードの一意なID (省略可能、draw.ioが自動生成) -
value
: ノード内に表示するテキスト -
style
: ノードのスタイル (図形の種類、色、フォントなど) -
vertex
: ノードが頂点であることを示す属性 (常にvertex="1"
) -
parent
: 親となるmxCellのID (通常は1
)
-
-
mxCell (エッジ):
-
id
: エッジの一意なID (省略可能、draw.ioが自動生成) -
style
: エッジのスタイル (線の種類、色、矢印など) -
edge
: エッジであることを示す属性 (常にedge="1"
) -
parent
: 親となるmxCellのID (通常は1
) -
source
: 接続元のmxCellのID -
target
: 接続先のmxCellのID -
mxGeometry
: エッジの形状を定義する要素
-
XML文書作成手順
1. draw.io XMLの基本構造
draw.io XML文書は、以下の基本構造を持ちます。
<mxfile host="app.diagrams.net" modified="日時" agent="エージェント情報" etag="ETag">
<diagram id="ダイアグラムID" name="ダイアグラム名">
<mxGraphModel dx="配置X" dy="配置Y" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- ここにmxCell要素を追加 -->
</root>
</mxGraphModel>
</diagram>
</mxfile>
<!-- ここにmxCell要素を追加 -->
の部分に、フロー図の要素を記述していきます。
2. サブグラフ (mxCell - group)
サブグラフは、mxCell要素で group
スタイルを指定することで表現します。
例:
<mxCell id="subgraph1" value="1. プロセスグループ名" style="group" vertex="1" parent="1">
<mxGeometry x="20" y="20" width="200" height="150" as="geometry"/>
</mxCell>
-
style="group"
: サブグラフであることを指定 -
mxGeometry
: サブグラフの位置とサイズを指定
3. ノード (mxCell - rectangle)
フロー図の各ステップは、mxCell要素で rectangle
スタイルを指定することで表現します。
例:
<mxCell id="A1" value="プロセスステップ名" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f9f;strokeColor=#333;strokeWidth=2;" vertex="1" parent="subgraph1">
<mxGeometry x="30" y="30" width="180" height="40" as="geometry"/>
</mxCell>
-
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f9f;strokeColor=#333;strokeWidth=2;"
: ノードのスタイル (角丸、テキスト折り返し、HTML描画、塗りつぶし色、線色、線幅) -
parent="subgraph1"
: ノードがサブグラフsubgraph1
に属することを指定
4. エッジ (mxCell - connector)
プロセスの流れは、mxCell要素で connector
スタイルを指定することで表現します。
例:
<mxCell id="edge_A1_A2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="A1" target="A2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
-
style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;"
: エッジのスタイル (直角線、角丸なし、直角ループ、自動調整、HTML描画) -
edge="1"
: エッジであることを指定 -
source="A1"
: 接続元ノードのID -
target="A2"
: 接続先ノードのID
5. XML文書の作成
上記の手順を参考に、フロー図の各要素をmxCell要素としてXML文書に記述していきます。サブグラフ、ノード、エッジの順に記述すると、XML文書が構造化されて分かりやすくなります。
draw.ioへのインポート
draw.ioでXML文書からフロー図を作成するには、以下の手順に従います。
- draw.ioを開く: Webブラウザで https://app.diagrams.net/ にアクセスし、draw.ioエディタを開きます。
- XMLコードを貼り付け: 作成した文書のコード全体をコピーしてエディタ上に貼り付けます。
「ファイル」メニューを開く: draw.ioエディタのメニューバーから「ファイル」をクリックします。「開く」 > 「XMLをインポート」を選択: 「ファイル」メニューから「開く」を選択し、さらに「XMLをインポート」をクリックします。XMLコードを貼り付け: 作成した文書のコード全体をコピーしてエディタ上に貼り付けます。-
「インポート」をクリック: XMLコードの貼り付け後、「インポート」ボタンをクリックします。
draw.ioがXML文書を解析し、フロー図がエディタ上に表示されます。
XML文書の構造
XML文書は、フロー図の要素をmxCell要素で記述します。主要な要素は以下の通りです。
-
<mxfile>
: draw.io XMLファイルのルート要素です。-
host
: ホスト名 (通常はapp.diagrams.net
) -
modified
: 最終更新日時 -
agent
: エージェント情報 (作成者など) -
etag
: ETag (バージョン管理用)
-
-
<diagram>
: ダイアグラムを定義する要素です。-
id
: ダイアグラムID -
name
: ダイアグラム名
-
-
<mxGraphModel>
: ダイアグラムのモデルを定義する要素です。-
dx
,dy
: ダイアグラムの配置位置 -
grid
,gridSize
,guides
,tooltips
,connect
,arrows
,fold
,page
,pageScale
,pageWidth
,pageHeight
,math
,shadow
: 描画設定
-
-
<root>
: mxCell要素のルート要素です。-
<mxCell id="0"/>
: ルートmxCell (固定) -
<mxCell id="1" parent="0"/>
: ドキュメントmxCell (固定) -
<mxCell>
(サブグラフ): サブグラフ (グループ) を定義します。-
id
: サブグラフID (例:subgraph1
) -
value
: サブグラフ名 (例:1. プロセスグループ名
) -
style="group"
: サブグラフスタイル -
vertex="1"
: 頂点属性 -
parent="1"
: 親mxCell (ドキュメントmxCell) -
<mxGeometry>
: 位置とサイズ
-
-
<mxCell>
(ノード): フロー図のノード (ステップ) を定義します。-
id
: ノードID (例:A1
) -
value
: ノードテキスト (例:プロセスステップ名
) -
style
: ノードスタイル (形状、色など) -
vertex="1"
: 頂点属性 -
parent
: 親mxCell (サブグラフまたはドキュメントmxCell) -
<mxGeometry>
: 位置とサイズ
-
-
<mxCell>
(エッジ): フロー図のエッジ (矢印) を定義します。-
id
: エッジID (例:edge_A1_A2
) -
style
: エッジスタイル (線の種類、矢印の種類など) -
edge="1"
: エッジ属性 -
parent="1"
: 親mxCell (ドキュメントmxCell) -
source
: 接続元ノードID -
target
: 接続先ノードID -
<mxGeometry>
: 形状
-
-
XML文書の編集とレイアウト調整
XML文書を編集することで、フロー図をカスタマイズできます。特に、図形の配置に関する問題 (線の重なり、図形の貫通など) を解決するためには、以下の点に注意してXML文書を編集してください。
ノードの配置
- ノード同士が重ならないように、
<mxGeometry>
要素のx
属性とy
属性を調整し、適切な間隔を確保してください。 - サブグラフ (
<mxCell style="group">
) を活用して、関連するノードをグループ化し、レイアウトを整理すると効果的です。サブグラフの<mxGeometry>
要素を調整することで、グループ全体の配置を制御できます。 - フロー図全体のバランスを考え、各サブグラフ、ノードの
<mxGeometry>
のx
,y
属性を調整してください。特に、階層的なフロー図の場合は、上位階層のサブグラフの配置を先に決定し、その内部のノード配置を調整すると、レイアウトがまとまりやすくなります。
エッジのルーティング
- エッジがノードを貫通したり、不必要に交差したりしないように、エッジのスタイル (
<mxCell style="...">
) を調整してください。-
edgeStyle=orthogonalEdgeStyle
: 直角線を使用するスタイルで、線の重なりを減らし、フロー図を明確にします。 -
rounded=0
: 角を丸めない設定は、直角的なフロー図に適しています。 -
orthogonalLoop=1
: ループ状エッジを直角に描画。自己ループノードに有効です。 -
jettySize=auto
: ノードとエッジ接続点のサイズを自動調整。
-
- エッジ同士が重ならないように、可能であればエッジの
mxGeometry
のmxPoint
要素を調整し、経路を変更してみてください。
mxGeometryの微調整
- 各mxCell要素の
<mxGeometry>
要素を細かく調整し、ノードの位置、サイズ、エッジの形状などを精密に制御します。 - 特に、ノードの
<mxGeometry>
要素のx
,y
,width
,height
属性をフロー図全体のバランスを見て調整。 - エッジの
<mxGeometry>
要素内のmxPoint
要素で、エッジの形状を細かく調整可能です。必要に応じて追加・編集してください。
レイアウトアルゴリズムの検討 (インポート後)
- XMLインポート後、draw.ioの自動レイアウト機能も活用できます。「レイアウト」メニューから、各種アルゴリズム (例: 「階層型レイアウト」) を試し、自動調整を検討してください。
- XML文書でレイアウトを完全に制御したい場合は、自動レイアウトに頼らず、
<mxGeometry>
要素を手動調整します。
グリッドとガイドの意識
- draw.ioエディタのグリッド線とガイド線 ([表示] > [グリッド]、[表示] > [ガイド]) を利用すると、ノードやエッジを整列しやすくなります。
- XML文書作成時もグリッドとガイドを意識し、座標を揃えると、整ったレイアウトのフロー図になります。
エッジスタイルの調整例
エッジのスタイル調整で、線の重なりを軽減できます。直角線スタイル (orthogonalEdgeStyle
) を適用するには、エッジの <mxCell>
要素の style
属性に edgeStyle=orthogonalEdgeStyle
を追加します。
<mxCell id="edge_A1_A2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="A1" target="A2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
上記の例では、rounded=0
(角を丸めない)、orthogonalLoop=1
(直角ループ)、jettySize=auto
(接続点サイズ自動調整) も追加。これらのスタイル組み合わせで、より明確なフロー図作成が可能です。
編集後のインポート
XML文書編集後、再度draw.ioへインポートし、変更を反映します。「ファイル」 > 「開く」 > 「XMLをインポート」から、編集後のXMLコードをインポートしてください。
高度なスタイリング
より高度なスタイリングを行いたい場合は、以下のような属性を活用できます:
ノードのスタイル属性
-
fillColor
: 塗りつぶし色(例:#f9f7ed
,#ff0000
) -
strokeColor
: 線の色 -
strokeWidth
: 線の太さ -
fontColor
: テキストの色 -
fontSize
: フォントサイズ -
fontStyle
: フォントスタイル(例:0
=通常,1
=太字,2
=斜体,3
=太字+斜体) -
align
: テキスト水平位置(例:left
,center
,right
) -
verticalAlign
: テキスト垂直位置(例:top
,middle
,bottom
) -
dashed
: 破線(例:1
=有効) -
dashPattern
: 破線パターン(例:3 3
) -
shadow
: 影(例:1
=有効)
エッジのスタイル属性
-
strokeColor
: 線の色 -
strokeWidth
: 線の太さ -
dashed
: 破線(例:1
=有効) -
dashPattern
: 破線パターン(例:3 3
) -
startArrow
: 始点の矢印(例:none
,classic
,open
,diamond
) -
endArrow
: 終点の矢印(例:none
,classic
,open
,diamond
) -
startSize
: 始点矢印のサイズ -
endSize
: 終点矢印のサイズ -
curved
: 曲線(例:1
=有効)
これらの属性を組み合わせることで、より表現力豊かなフロー図を作成できます。
まとめ
draw.ioのXML文書を使用すると、GUI操作なしでフロー図を定義できます。この方法は、特に複雑なフロー図や、同様のパターンを持つ複数のフロー図を効率的に作成する場合に役立ちます。また、バージョン管理システムとの統合も容易になります。
このガイドを参考に、XML文書を編集し、draw.ioで独自のフロー図を作成してみてください。
Discussion
このような機能はdraw.ioにはなかったです🤔
XMLをコピーしてdraw.io上でペーストすると、図がdraw.io上に描画されます👍
ご指摘ありがとうございます!
たしかに、XMLコピーしてそのままペーストでいけますね。記事修正しました🙇