3.1. blockdiag#
blockdiagはSphinx ドキュメントに組織図や流れ図などを作成するためのExtensionです。 blockdiagはSphinxのみならず、iPython, Track, moinmoin, mediawiki, Pukiwikiなどにも ブロック図を埋め込む事ができます. blockdiagは日本人によって開発され、ホームページも日本語で提供されています。 (http://blockdiag.com/ja/index.html)
blockdiagのシリーズには、数種類の図に対応した、
などの兄弟姉妹パッケージがあります。
ブロック図、シーケンス図、アクテビティ図、論理ネットワーク図は、 ほぼ同等 の図をPlantUMLを用いて作成できます。
ラック配置図、パケット構成図についてはは同等の機能がPlantUMLには用意されていません。 nwdiagと同じ様に、移植することも不可能ではないように思われますが、いまのところは工夫して使って行くしかない様です。
以下では、blockdiagの入力データとそれに対応するPlatUMLの出力結果を示します。
3.1.1. blockdiag examples#
blockdiag admin {
top_page -> config -> config_edit -> config_confirm -> top_page;
}
blockdiag {
A -> B -> C -> D;
A -> E -> F -> D;
}
blockdiag admin {
orientation = portrait
A -> B -> C;
B -> D;
A[label = 1st];
B[label = 2nd];
C[label = 3rd];
D[label = 4th];
}
blockdiag admin {
index [label = "List of FOOs"];
add [label = "Add FOO"];
add_confirm [label = "Add FOO (confirm)"];
edit [label = "Edit FOO"];
edit_confirm [label = "Edit FOO (confirm)"];
show [label = "Show FOO"];
delete_confirm [label = "Delete FOO (confirm)"];
index -> add -> add_confirm -> index;
index -> edit -> edit_confirm -> index;
index -> show -> index;
index -> delete_confirm -> index;
}
3.1.2. nwdiag example#
nwdiag {
network dmz {
address = "210.x.x.x/24"
web01 [address = "210.x.x.1"];
web02 [address = "210.x.x.2"];
}
network internal {
address = "172.x.x.x/24";
web01 [address = "172.x.x.1"];
web02 [address = "172.x.x.2"];
db01;
db02;
}
}
3.1.3. rackdiag example#
rackdiag {
// define height of rack
16U;
// define rack items
1: UPS [2U];
3: DB Server
4: Web Server
5: Web Server
6: Web Server
7: Load Balancer
8: L3 Switch
}
3.1.4. packetdiag example#
packetdiag{
colwidth = 32
node_height = 72
0-15: Source Port
16-31: Destination Port
32-63: Sequence Number
64-95: Acknowledgment Number
96-99: Data Offset
100-105: Reserved
106: URG [rotate = 270]
107: ACK [rotate = 270]
108: PSH [rotate = 270]
109: RST [rotate = 270]
110: SYN [rotate = 270]
111: FIN [rotate = 270]
112-127: Window
128-143: Checksum
144-159: Urgent Pointer
160-191: (Options and Padding)
192-223: data [colheight = 3]
}
3.1.5. actdiag example#
actdiag {
write -> convert -> image
lane user {
label = "User"
write [label = "Writing reST"];
image [label = "Get diagram IMAGE"];
}
lane actdiag {
convert [label = "Convert reST to Image"];
}
}
3.1.6. seqdiag example#
seqdiag {
browser -> webserver [label = "GET /index.html"];
browser <-- webserver;
browser -> webserver [label = "POST /blog/comment"];
webserver -> database [label = "INSERT comment"];
webserver <-- database;
browser <-- webserver;
}
seqdiag {
// auto return edge
A => B [label = "call", return = "return"];
// nested auto return edge
A => B => C [label = "call", return = "return"];
// nested sequence
A => B [label = "nested call"]{
B => C [label = "call 1"];
B => D [label = "call 2"];
B => E [label = "call 3"];
}
}
3.1.7. actdiag#
actdiag をPlantUMLのアクティビティ図でおきかえられるかを試して見ます。
http://blockdiag.com/ja/actdiag/examples.html#simple-diagram の例を試してみましょう。
actdiag {
write -> convert -> image
lane user {
label = "User"
write [label = "Writing reST"];
image [label = "Get diagram IMAGE"];
}
lane actdiag {
convert [label = "Convert reST to Image"];
}
}
デスクリプションをPlantUMLで追加します。
3.1.8. シークエンス図#
seqdiag {
// Use note (put note on rightside)
browser -> webserver [note = "request\nGET /"];
browser <- webserver;
// Use leftnote and rightnote
browser -> webserver [leftnote = "send request"];
browser <- webserver [rightnote = "send response"];
}