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
# 以下に手順を記述 --- (*1)
data = [
'説明会',
'エントリー',
'筆記試験',
'一次面接試験',
'二次面接',
'合否判定',
'合格証の郵送']
# Graphvizのオブジェクトを作成 --- (*2)
g = graphviz.Digraph(format='svg', filename='tejun')
# リストを順にノードを作ってつなげる --- (*3)
last = ''
for s in data:
g.node(s)
if last != '': g.edge(last, s)
last = s
# 繰り返しがあれば指定 --- (*4)
g.edge('合否判定', 'エントリー', label='不合格なら')
# 表示
g.view()
プログラムを確認しよう。(*1)では手順の一覧をリストで記述する。(*2)ではGraphvizのオブジェクトを作成する。(*3)では手順(*1)で記述したリストを元にノードを作り、ノードを接続する。(*4)では不合格時のアクションをedgeメソッドで指定した。
まとめ
以上、今回は、Graphvizを使って簡単な手順書を作成するプログラムを紹介した。Graphvizを使うといろいろな図が手軽に書ける。頻繁に手順が変わる場合でも、このように手軽に図が作成できると何かと便利だ。活用してみよう。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。