Graphvizというネットワーク構造のグラフを描画するツールがある。このツールを使うと高度なグラフが描画できるのだが、Pythonと一緒に使うとより手軽に使える。作業の手順書を作成するのにも便利なので使ってみよう。
Graphvizとは
Graphvizはもともと専用のDOT言語を使ってグラフ構造を描画するツールだ。AT&T研究所が開発したオープンソースのアプリだ。グラフ構造とは、複数のノード同士を接続することで構成される図だ。応用範囲は広く、さまざまなデータ構造を表現したり、手順書を作ったり、家系図などを表現することもできる。
専用のDOTもそれほど難しくないのだが、Pythonが分かるのなら、Pythonから使うのがお勧めだ。DOT言語よりも簡単であることや、Pythonの制御構文と組み合わせることで、より複雑なグラフ表現が可能になるからだ。
それでは早速使ってみよう。
Graphvizのインストールについて
PythonからGraphvizを使うには、Pythonのgraphvizモジュールに加えて、Graphviz本体が必要となる。最初にGraphviz本体のインストール方法を紹介しよう。
【Windowsの場合】
Windows用に親切なインストーラーが用意されているのでこれを使うと良いだろう。こちらのWebサイトからGraphvizのインストーラーをダウンロードしよう。なお、サイト自体は英語だがダウンロードサイトの「Windows > Graphviz-5.0.0」にある「EXE Installer」をOSのビット数に合わせて選んでダウンロードしよう。
ダウンロードしたEXEファイルをダブルクリックすれば、インストーラーを起動できる。ただし、WindowsのDefenderの保護機能が表示されるので[詳細情報]をクリックし、その後[実行]ボタンを押そう。
インストーラーは親切なので、基本的には「次へ」を連打していけばセットアップが完了する。しかし、今回、Pythonから利用したいので、次の画面が出たときに「Add Graphviz to the sytem PATH...」を選ぶことを忘れないようしよう。
インストールが終わったら、Pythonのモジュールをインストールしよう。PowerShellを起動して、以下のコマンドを実行しよう。なお、PowerShellからpythonコマンドを使うには、Pythonのインストール時に「Add Python to enviroment variables」のチェックを入れておく必要がある。
python -m pip install graphviz
【macOSの場合】
macOSの場合は、パッケージマネージャーのHomebrewを使うのが簡単だ。ターミナル.appを起動してコマンドを実行しよう。
Homebrewをインストールするには、こちらにあるHomebrewのインストールコマンドを実行しよう。
Homebrewのインストールが完了したら次に、PythonのGraphvizモジュールをインストールしよう。ターミナルで以下のコマンドを実行しよう。
python3 -m pip install graphviz
Graphvizの最も簡単な使い方
それでは、Graphvizを使ってみよう。以下は「[い]→[ろ]→[は]」という3つのノードを順にグラフに描画する例だ。
import graphviz
# Graphvizのオブジェクトを作成 --- (*1)
g = graphviz.Digraph(format='svg', filename='test')
# ノードを3つ作成 --- (*2)
g.node('い')
g.node('ろ')
g.node('は')
# ノードを接続する --- (*3)
g.edge('い', 'ろ')
g.edge('ろ', 'は')
# 表示
g.view()
上記のプログラムを「graphviz_test.py」という名前で保存しよう。そして、ターミナルで以下のコマンドを実行しよう。
# Windows
python graphviz_test.py
# macOS
python3 graphviz_test.py
すると、次のように表示される。
プログラムを確認してみよう。(*1)の部分でGraphvizのオブジェクトを作成する。この時に、出力フォーマット(format)やファイル名(filename)のパラメーターも一緒に指定する。
(*2)の部分では「い」「ろ」「は」の三つのノードを作成する。ノードを作成するにはnodeメソッドを使う。
(*3)では上記(*2)で作成した3つのノードを接続する。そのためにedgeメソッド使う。ここでは、い→ろ→はの順にノードを接続するので、edge('い', 'ろ')とege('ろ', 'は')のように指定している。
そして最後にviewメソッドを使うと、画像ファイルが出力されてその画像に関連づけられているアプリで画像が表示される。
手順書を作ってみよう
以上で、Graphvizを使う基本的な流れが分かったことだろう。そこで、手順書を作ってみよう。ここでは、ある資格試験について合格証が郵送されるまでの手順の図を描画するプログラムを作ってみた。
import graphviz