Graphviz事始め

2017/11/12

最近Graphvizをちょこっと触っているので「Graphvizとはなんぞや」みたいなところをまとめてみます。

Graphvizとは

Graphvizはグラフと呼ばれるデータをビジュアル化できるオープンソースのツールです。

インプットは後述のDOT言語で書かれたテキストファイル、アウトプットはjpeg, png, gif, svg, pdfをはじめとした多種多様なフォーマットに対応しています。詳細はOutput Formats | Graphviz - Graph Visualization Softwareをどうぞ。

最新の安定版は2014年にリリースされた2.38。初版は調べきれなかったのですが、少なくとも2000年には存在しているので大変由緒正しきソフトウェアと言えるんじゃないでしょうか。

Linux、Windows、MacOSとクロスプラットフォームでバイナリが提供されているので、大抵の環境で問題なく使えるはずです。

グラフ

Graphvizにおけるグラフは棒グラフとか円グラフのことではなく、ある種のデータ構造を指します。

Wikipediaのグラフ (データ構造)から引用すると

グラフ(英: Graph)とは、ノード(頂点)群とノード間の連結関係を表すエッジ(枝)群で構成される抽象データ型

です。

DOT言語

Graphvizはデータを記述するためにDOT言語というデータ記述言語を採用しています。

DOT言語 - Wikipedia

試してみた

DOT言語でグラフを定義します。

digraph example {
  graph [
    // グラフ全体の設定
    charset = "UTF-8";
    label = "graph sample",
    rankdir = LR
  ];

  node [
    // ノード共通の設定
    style = "solid, sfilled"
  ];

  edge [
    // エッジ共通の設定
  ];

  // ノードの定義
  node1
  node2 [shape = box]
  node3 [shape = circle]
  node4 [shape = diamond]
  node5 [shape = folder]

  // エッジの定義
  node1 -> node2
  node2 -> node3 [label = "pattern1"]
  node2 -> node4 [label = "pattern2"]
  node3 -> node5 [style = "dotted"]
  node4 -> node5 [arrowhead = "tee"]
}

dotコマンドを使って変換します。

f:\> dot -T png example.dot -o example.png

これでグラフが描画できます。

出力例

出力例

設定用のパラメータはかなり豊富に用意されているので、もっともっと複雑なグラフも書けますし、もっともっと凝った見た目にもできます。 そのためにはいろいろ調べないとダメですけどね...

参考情報

歴史あるソフトウェアなだけあって情報はかなりカオスです。公式サイトは再構築の真っ最中っぽい。

日本語情報も豊富ですが、あんまり古いと役に立たない恐れがあるので、最近投稿されたものを参考にするのがいいかと思います。

これだけ歴史があってよく使われているツールなのに書籍は全然出ていないようです。入門書くらいはあってもよさそうなのですが。 使いこなしのためにはネットが頼りですね。




おススメ