2008/03/26 カテゴリ : Tech  Graphviz  Wiki  PEAR 

テキストから図を作成 - Graphviz

皆さんは、ちょっとした図が必要になったとき、どうされてますか?
エクセルを使って作成したり、文字を駆使してテキストで作成したりでしょうか。ただ、エクセルだとちょっと大仰だったり、テキストだとちょっと面倒だったりといった場合もあるかと思います。
今回はそんな時に便利な Graphviz をご紹介します。

Graphviz - Graph Visualization Softwareは、AT&T研究所が開発したフリーソフトウェアで、DOT言語というグラフ記述言語で書かれたテキストファイルから図を出力することができます。

それでは、早速インストールして使ってみましょう。

Windowsの場合は、
 http://www.graphviz.org/Download_windows.php
からダウンロードしてインストールします。
ただ、私の環境ではmsi版は動作しませんでしたので、exe版のほうをインストールしました。

Linuxの場合は、
 http://www.graphviz.org/Download_linux.php
からダウンロードしてインストールします。
なお、お使いのディストリビューションがFedoraであれば、

  1. # yum install graphviz

Debianであれば、

  1. # apt-get install graphviz

で簡単にインストールできます。

では、次のような画面遷移図を作成する場合を例に進めていきます。

  1. +----------------------+
  2. |   会員情報入力画面   |
  3. +----------------------+
  4.           ↑↓
  5. +----------------------+
  6. | 会員情報入力確認画面 |
  7. +----------------------+
  8.            ↓
  9. +----------------------+
  10. | 会員情報入力完了画面 |
  11. +----------------------+

まずは下記の内容のファイルを作成します。

sample1.dot
  1. digraph sample1 {
  2.   form -> confirm;
  3.   confirm -> finish;
  4. }

では、図に変換してみましょう。コマンドラインから次のように実行します。

  1. $ dot -Tpng -o sample1.png sample1.dot

ここではpng形式で出力していますが、jpegやsvgなど、他にもいろいろな形式で出力することができます。

さて、出力されたpngファイルを見てみると、次のような感じになると思います。



なお、sample1は下記のように書くこともできます。

  1. digraph sample1 {
  2.   form -> confirm -> finish;
  3. }

次に、formとconfirmの矢印を両向きにします。

sample2.dot
  1. digraph sample2 {
  2.   form -> confirm [ dir = both ];
  3.   confirm -> finish;
  4. }



最後に、枠を四角にして、日本語の名称をつけます。日本語を使う場合は、日本語が表示できるフォントを指定し、dotファイルの文字コードをUTF-8で保存する必要があります。

sample3.dot
  1. digraph sample3 {
  2.   node [ fontname = "meiryo" shape = box ];
  3.   form    [ label = "会員情報入力画面" ];
  4.   confirm [ label = "会員情報入力確認画面" ];
  5.   finish  [ label = "会員情報入力完了画面" ];
  6.   form -> confirm [ dir = both ];
  7.   confirm -> finish;
  8. }



完成!!

蛇足ですが、ステートチャート図っぽくするとこんな感じでしょうか。

sample4.dot
  1. digraph sample4 {
  2.   graph [];
  3.   node [
  4.     fontname = "meiryo"
  5.     shape = record
  6.     style = rounded
  7.   ];
  8.   edge [ arrowhead = vee ];
  9.   first [
  10.     label = ""
  11.     height = 0.2
  12.     shape = circle
  13.     style = filled
  14.     fillcolor = black
  15.   ];
  16.   form    [ label = "{会員情報入力画面|}" ];
  17.   confirm [ label = "{会員情報入力確認画面|}" ];
  18.   finish  [ label = "{会員情報入力完了画面|}" ];
  19.   last [
  20.     label = ""
  21.     height = 0.2
  22.     shape = doublecircle
  23.     style = filled
  24.     fillcolor = black
  25.   ];
  26.   first -> form;
  27.   form -> confirm [ arrowtail = vee ];
  28.   confirm -> finish -> last;
  29. }



さすがにこれはやりすぎですが、例えばsample3へ会員情報一覧画面を追加したいといった場合も、ちょっと修正するだけで簡単に追加できます。

sample5.dot
  1. digraph sample5 {
  2.   node [ fontname = "meiryo" shape = box ];
  3.   list    [ label = "会員情報一覧画面" ];
  4.   form    [ label = "会員情報入力画面" ];
  5.   confirm [ label = "会員情報入力確認画面" ];
  6.   finish  [ label = "会員情報入力完了画面" ];
  7.   list -> form -> confirm [ dir = both ];
  8.   confirm -> finish -> list;
  9. }



どうでしょうか。ちょっと繋ぎ先を変更したいといった場合も簡単に修正できますし、もとはテキストファイルですので、Subversionなどのバージョン管理システムで変更箇所の履歴を追うことも簡単です。
Wikiとの親和性も高いと思われますので、各種Wiki用のプラグインもあります。

・MediaWiki用エクステンション Extension:GraphViz
・Trac用プラグイン Graphviz Plugin
・PukiWiki用プラグイン graphviz.inc.php

また、PHPからGraphvizを扱うことが出来る PEAR::Image_GraphViz というPEARパッケージもありますので、PHPを使って大量のデータを可視化することもできます。

使いこなせばとても強力なツールになると思いますので、皆さんもぜひ使ってみてはいかがでしょうか。

コメント

    • key
    • 2008年04月02日 16:43
    • テキストからビジュアルを生成するツールではmscgenというものも面白いです。職場でpukiwiki graphvizプラグインを改造したものを使用していて、wiki上にきれいなシーケンス図を載せたりしています。

      http://www.mcternan.me.uk/mscgen/
    • 高橋崇
    • 2008年04月02日 20:55
    • ありがとうございます!
      早速使ってみたところ、記法も使い方もGraphviz風で、なかなか素敵なツールですね。
      Wikiを使ってみんなでシーケンス図を書く場合などはすごい良さそうです。

トラックバックURI

最近の記事

アシアルPHP書籍情報