空想犬猫記

※当日記では、犬も猫も空想も扱っておりません。(旧・エト記)

Graphviz

私が仕事で扱っている問題領域は,とにかく数多くのオブジェクトがプログラム中に存在して,それらが複雑に関係しあっていることが多い。そんな場合,デバッガと睨めっこするよりも,オブジェクトを直接絵に書き出して可視化した方が,あっさりとバグを発見することができる。このときに役に立つのが Graphviz という software suite の dot というソフトだ。これを使うと有向グラフを簡単に書くことができる。たとえば,

digraph G {
  node1 -> node2;
  node2 -> node3;
  node1 -> node3 [style=dashed];
  node4 -> node2;
  node1 [label="Node1",color=red];
  node2 [label="Node2",color=blue,peripheries=2];
  node3 [label="Node3",color=green,shape=box];
  node4 [label="Node4",shape=polygon,sides=8,peripheries=4];
}

というテキストファイル(sample.dot)を

% dot sample.dot -Tpng -o sample.png

てな感じで実行すると,下のような画像を作成してくれる*1
http://static.flickr.com/95/228019170_079b4af66c.jpg
通常は,オブジェクトのポインタ値を node name に使って一意性を保つようにしている。
んで,先日ミーティングで,問題部分を可視化して「ここがこーならないかんところがこーなっちゃってるんですよ,分かりやすくて便利でしょー?」と自慢げに見せたところ,先輩から「それって,Windows でも使えるの?」と質問された。さらにマネージャから畳み掛けるように「Yeah, I'm also concerning about it because mac guys are usually doing something wired.」とのお言葉を頂戴した。わなわな…。

*1:この他にも多彩な表現が可能。詳しくはマニュアルを参照下さい