(22日目) blockdiag 拡張の紹介(ノードレンダラ)
今日は blockdiag を便利にする blockdiag 拡張をご紹介します。
blockdiag では標準の機能に加え、あとから機能を追加するための拡張フレームワークを持っています。
blockdiag 拡張には 2つのタイプがあります。
- ハンドラプラグイン(handler plugin)
- ノードを定義する際の処理を追加する blockdiag 拡張です
- ノードが生成されたとき、値が設定されるときにノードの定義を書き換えることができます
- 現在は autoclass、attributes の二種類の拡張があります
- autoclass はノード生成時に、node_id を元にクラスを自動的に適用します
- attributes はノード生成時に、あらかじめ定義した属性を設定します
- ノードレンダラー(node renderer)
- ノードの shape を追加する blockdiag 拡張です
- drawer モジュールで画像を生成する際に呼び出され、ノードの描画を担当します
以前の記事で handler plugin の autoclass と attributes についてはご紹介していますので、
今日はもう一方のノードレンダラーについて説明していきます。
ノードレンダラーとは
ノードレンダラーは名前の通り、ノードを描画する際に利用される blockdiag 拡張です。
インストール直後の blockdiag では 20個のノードの形状(shape)が定義されています。
この 20個のノードの形状はそれぞれノードレンダラーになっているので、
blockdiag は図を生成する際にノードレンダラーを呼び出してノードを描画しています。
図を定義する際には「ノードレンダラー」モジュールを意識することはなく、
代わりにノードの形状である shape 名を意識します。
定義では shape 属性で指定して、ノードの形状を切り替えています。
blockdiag { A [shape = roundedbox]; B [shape = diamond]; C [shape = ellipse]; }
ノードレンダラーはプラグインの仕組みを持っているため、
あたらしいノードの形が必要になった場合は blockdiag の本体を修正するのではなく、
レンダラーモジュールを作るだけで新しい shape を追加することができます。
標準インストールされるノードレンダラー
blockdiag 本体に同梱されているノードレンダラーはよく使われそうなもの 14個と
フローチャートに使われるものが 6個収録されています。
マニュアルにも記載されていますが、どんなものがあるかおさらいしてみましょう。
よく使われそうなものは以下のものです。
- box (長方形)
- roundedbox (角丸の長方形)
- square (正方形)
- ellipse (楕円)
- circle (円)
- diamond (ひし形)
- minidiamond (小さいひし形)
- note (ノート型)
- mail (メール型)
- cloud (雲形)
- actor (人の形)
- dots (省略を表す点)
- beginpoint (開始点)
- endpoint (終了点)
それぞれを図示化すると次のようになります。
blockdiag { // standard node shapes box [shape = box]; square [shape = square]; roundedbox [shape = roundedbox]; dots [shape = dots]; circle [shape = circle]; ellipse [shape = ellipse]; diamond [shape = diamond]; minidiamond [shape = minidiamond]; note [shape = note]; mail [shape = mail]; cloud [shape = cloud]; actor [shape = actor]; beginpoint [shape = beginpoint]; endpoint [shape = endpoint]; box -> square -> roundedbox; circle -> ellipse -> diamond; minidiamond -> note -> mail; cloud -> actor -> dots; beginpoint -> endpoint; }
フローチャート用のものは flowchart. という名前で始まります。
- flowchart.condition (条件分岐)
- flowchart.database (データベース)
- input (入力)
- terminater (処理の開始/終了)
- loopin (ループ開始)
- loopout (ループ終了)
blockidag { // node shapes for flowcharts condition [shape = flowchart.condition]; database [shape = flowchart.database]; terminator [shape = flowchart.terminator]; input [shape = flowchart.input]; loopin [shape = flowchart.loopin]; loopout [shape = flowchart.loopout]; condition -> database -> input; terminator -> loopin -> loopout; }
blockdiagcontrib.cisco
blockidagcontrib.cisco は Cisco Systems 社が提供しているネットワーク用のアイコン画像をパッケージ化したものです。
Cisco Systems 社はネットワーク機器の開発/販売をしていることもあり、
ネットワーク屋さんではこの Cisco アイコンを利用してネットワーク図を書くことが多いようです。
blockdiagcontrib-cisco は blockdiag 本体には同梱されていないので、別途インストールが必要です。
$ sudo easy-install blockdiagcontrib-cisco
あとは普通に blockdiag から cisco. から始まるノードの形状を指定するだけで利用できます。
blockdiagcontrib-cisco には大量のアイコンが含まれているので、ここでは一部だけ抜粋します。
blockdiag { router [shape = cisco.router]; space_router [shape = cisco.Space_router]; workstation [shape = cisco.workstation]; ups [shape = cisco.ups]; www_server [shape = cisco.www_server]; storage_server [shape = cisco.storage_server]; sattelite [shape = cisco.sattelite]; firewall [shape = cisco.firewall]; pc [shape = cisco.pc]; router -- space_router -- workstation; ups -- www_server -- storage_server; sattelite -- firewall -- pc; }
その他に利用出来るアイコンは blockdiagcontrib-cisco のマニュアルを覗いてみてください。
blockdiagcontrib.nationalflags
blockidagcontrib.nationalflags は各国の国旗のアイコン画像をパッケージ化したものです。
自分でも用途がいまいち理解できていないのですが、国旗を含んだ図を書くことができます。
blockdiagcontrib-nationalflags も blockdiag 本体には同梱されていないので、別途インストールが必要です。
$ sudo easy-install blockdiagcontrib-nationalflags
あとは普通に blockdiag から nationalflag. から始まるノードの形状を指定するだけで利用できます。
blockdiagcontrib-nationalflag には大量のアイコンが含まれているので、ここでは一部だけ抜粋します。
blockdiag { Japan [shape = nationalflag.japan]; USA [shape = nationalflag.the_united_states]; UK [shape = nationalflag.the_united_kingdom]; Germany [shape = nationalflag.germany]; Italy [shape = nationalflag.italy]; Korea [shape = nationalflag.south_korea]; Japan -- USA -- UK; Germany -- Italy -- Korea }
その他のアイコンは blockdiag-nationalflags のマニュアルを覗いてみてください。