最近C言語でちょこちょこ仕事用のツール等をつくっているが、ツールを作る前に頭の中にある関数の関係をグラフで表わして整理したいなと思って色々調べてみた。適当に自分で図をつくってもいいけど、どうせなら世間で使われている表現方法で表わしたい・・・色々調べたところ、関数の呼び出し関係を有向グラフで表したコールグラフなるものが自分のイメージに近い。調べてみるとGraphvizというオープンソースのソフトウェアが有名っぽいようなので、使ってみた。今回はGraphizのインストールと使い方の初歩の初歩を説明する。
GraphvizのInstall(Windows7 64bit)
さっそくググってWebサイトからダウンロードしてみる。今回はWindows版のインストーラ、graphviz-2.38.msiをダウンロード。ちなみに私の環境はWindows7 64bit。インストーラがダウンロードできたら起動して、最初の画面でNextをクリック。次の画面でインストール先フォルダFolderを選択。下の「Everyone」、「Just me」と書いてあるチェックボックスは、同じコンピュータで異なるユーザが存在する場合、他のユーザもGraphizが使用できるようにしたい場合は「Everyone」を選び、自分だけ使う場合は「Just me」を選択し、Nextをクリック。
次のConfirm Installationの画面でNextをクリックインストールが開始される。インストールが終了したらCloseをクリックしてインストールは完了。
Graphvizでグラフを作成する
スタートメニューの「すべてのプログラム」などから「Graphviz 2.38」->「gvedit.exe」で起動できる。以下が起動画面。
メニューの「File」から「New」を選ぶと、「graph1.gv」という名前で空のファイルが立上るはず。GraphizではDOT言語というグラフを表現するための言語で記述する。ここでは以下のサンプルでグラフをつくってみる。
digraph test {
main -> detect_str;
main -> open_file;
detect_str -> input_str;
}
雰囲気で大体わかると思いうが、上記のサンプルはtestという名前の、有向グラフ(digraph)をつくっている。有向グラフは方向が定義されたグラフ(厳密な定義が知りたい方はグラフ理論などでググってください・・・笑)。
グラフを表示する
グラフをつなぐ線の片方に矢印をつけて表わされる。その下は「->」を含む文章については、グラフ出力結果を見てもらえばわかると思う。このファイルを「File」の「Save」から、適当な名前を付けて適当なフォルダに保存。そしてメニューの人が走っているようなボタン(Layout)をクリックすると、下記のようなグラフが表示される。
main -> detect_str;のように書いたことで「main」というノードと「detect_str」というノードが定義され、その間の接続の関係を「->」で定義する。
「->」がそのまま矢印の方向になっているので直感的にわかる。このグラフを図として保存したい場合は、先程クリックした「Layout」ボタンの左隣の「Setting」ボタンを押すと、下の図のようなDialogが表示される。
この画面で「Output File Type」で図の保存形式を選択、その下の「Output File Name」から保存するファイルの名前とフォルダを選択し、下のOKを押すと、指定したフォルダにグラフが保存される。とりあえずこれで関数の関係は描けそう。
ちなみにソースコードから自動的にコールグラフを生成する方法もあるみたい。(とうか、そういう使い方がポピュラーらしい)また調べたときに、記事として書きたいと思う。