バーr……blog のようなもの 2025 年 04 月

04 月 11 日 (金)

思考整理のためのツール GraphViz 編 (1)

さて今回から GraphViz でどのような図を描くことができて、それを実際に描く方法を解説していきたいと思います。

どのような図を描けるのか

最初にどのような図を描くことができるのか見ていきましょう。今回からソースファイルはキャプションのリンクからダウンロードしてテキストエディタで見てください。Vim でも Emacs でも Windows のメモ帳でもかまいません。

GraphViz を使って描いた図をこれまでの日記で公開しています。

クリックまたはタップすると新しいタブで表示され拡大等しやすくなる。図のソースファイルはここ

上の図をさらに簡略化し整理したものが下図になります。

クリックまたはタップすると新しいタブで表示され拡大等しやすくなる。図のソースファイルはここ

上図では長方形、楕円、八角形といったノードが使われています。PlantUML ではこういった部品をエレメントと呼んでいましたが GraphViz ではノードと呼びます。この連載の GraphViz の説明はノードと呼ぶことにします。

GraphViz では PlantUML のエレメントよりも多くの種類の以下のノードを描くことができます。

クリックまたはタップすると新しいタブで表示され拡大等しやすくなる。図のソースファイルはここ

次にノード間を結ぶ矢印について説明します。基本的な矢印の形状には以下のものがあります。

クリックまたはタップすると新しいタブで表示され拡大等しやすくなる。図のソースファイルはここ

GraphViz ではこれまでに紹介したノードと矢印を使った図をつくることができます。逆に言えば UML のようなある特定のフォーマットに従った図はなにも描けません。

とはいえ GraphViz にはノードと矢印の豊富さという他のツールにはないアドバンテージがあります。

レイアウトエンジンにもモダンな図を描けるものがなく、開発もほぼ新規の機能開発が終っていて実質的にメンテナンスモードに移行しているにもかかわらず、ずっと多くの人に愛用されつづけている所以だと思います。

画像のレイアウトの制御は PlantUML と同様にかなり難しい部類に入ります。rank や subgraph、表示されない矢印などを駆使してある程度レイアウトのコントロールを試すことができますが、期待するほどには効果がありません。場合によってはレイアウトがかなり崩れて判読困難な図がつくられることがあります。

他のツールも同様なのですがレイアウトのコントロールを試みる場合は注意と慎重さが求められます。顧客への納品物や体裁が重要視される公開文書に含めるのでなければ GraphViz にそのまままかせるのが良いと思います。この連載での思考の整理と見える化、分析、俯瞰という目的では、レイアウトは GraphViz に任せたほうが良い結果が得られることが多いと思います。

もちろんそれ以外の目的で使ってはいけない理由など一切存在しないので、そのような場合は実際にご自身でいろいろ試して研究してみてください。GraphViz のマニュアルはどちらかというと初めて GraphViz をつかう人には優しくない書きかたをされているので、得られた知見を公開されると多くの人が喜びます。

GraphViz で検索すると日本語で書かれた blog などもヒットするので、それらをメインに GraphViz の使い方を学ぶのもいいと思います。困ったときになって初めてから公式サイトを見るというパターンもありでしょう。そのあたりは柔軟に行動してください。

インストール

GraphViz のインストールは OS のネイティブアプリであることもあり比較的簡単です。Windows ユーザであればインストーラがダウンロードページからダウンロードできます。あとはダウンロードしたインストールプログラムを実行するだけです。

Linux ユーザは更に簡単で OS のパッケージマネージャでインストールしてください。

次回は GraphViz の dot レイアウトエンジンでの基本的な図の描きかたを説明していきます。