nw-diag でネットワーク図を書く

はずかしながら blockdiagcontrib-cisco というものをつい先日知ったので、導入してみた。

インストール

*diag シリーズはまえださんが頑張って Debian のアーカイブに入れて下さったのですが、blockdiagcontrib-* シリーズは入ってません。blockdiagcontrib-cisco は Python Software Foundation License になってるんで main リポジトリに入れられるはずですが、シスコアイコンの扱いってどうなってるんでしょうか?

閑話休題

apt がありながら pip や gem や cabal といったパッケージ管理システムを利用するのは負けた気がするのでなんか嫌。ということで負けた気分になりながら pip でインストールします(ぉ

$sudo pip install blockdiagcontrib-cisco

修正

簡単なダイアグラムを書いて図を生成しようとしたのですが、
instance has no attribute 'loadImage'
などと怒られるので、cisco.py をちょっといじってやります。

$sudo vim /usr/local/lib/python2.7/dist-packages/blockdiagcontrib/cisco.py

loadImage じゃなくて image を使います。

- drawer.loadImage(image_url, self.image_box)
---
+ drawer.image(self.image_box,image_url)

試してみる

あとは shpae に cisco という名前空間を指定するだけでシスコアイコンを使えるようになります。なにそれ便利。指定できるアイコンはblockdiagcontrib-ciscoのマニュアルにリストアップされてます。

とりあえず簡単なネットワーク図を描いてみます。

diagram {
  shape_namespace = "cisco";

  Internet [shape = cloud]
  Router [shape = router];
  Web1 [shape = www_server];
  Web2 [shape = www_server];

  Internet -- Router;

  network {
    Router;
    Web1;
    Web2;
  }
}

$nwdiag -T png sample.diag

こんな感じに出力されます。

フォントをきちっと設定してやらないと残念な感じになりますね。

C拡張使ってるから Windows だと vcvarsall.bat が必要なのがうざいけど、お仕事用PCにも導入してみようと思います。

余談

仕様書や構成図みたいなドキュメントの類はテキストで持っておいた方が diff の確認とかでレビューが楽になるし、gitなんかでも扱いやすくなるし、バイナリよりも扱い易いし、サイズも小さいし、Excelのブックみたいにある日突然壊れたりしないわけで、sphinx でも TeX でも md でもなんでもいいのでテキストがいいと思うわけです。

そんなに長くないエンジニアキャリアだけど、残念ながらどこの現場に行っても Excel 仕様書しか見たことないわけで、なんかつらい。

関西ドキュメンテーション勉強会やろーぜ!とか言ってから結構時間たってるので、そろそろ立ち上げたいっす。