『Python + Graphviz』を使ってフローチャートを作成してみる
こんにちは、okutani(@okutani_t)です。本記事ではPythonとGraphvizを利用して、かんたんなフローチャートを作成する方法について解説しています。
GraphvizはDOT言語という言語で書かれたファイルを元に、フローチャートや状態遷移図などのグラフを生成してくれるツールです。
Graphvizの公式サイトは以下。
LINKGraphviz – Graph Visualization Software
そのGraphvizを今回はDOT言語を使わず、Pythonから直接扱ってみたいと思います(正確にはDOT言語で書かれたファイルへコンパイルして利用)。
DOT言語を直接書く場合はPyhonは必要ありません。お好みでご利用ください。
今回の開発環境はMac(High Sierra)、Pythonは3.6.4を利用しています。
Pythonが導入されてない場合はHomebrewで導入しておきましょう(参考MacにHomebrewを導入する方法&使い方まとめ | vdeep)。
$ brew install python3
Python3の導入確認。
$ python3 --version
Python 3.6.4
同時にpip3も導入されているか確認しておきましょう。
$ pip3 -V
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)
それでは、PythonとGraphvizを使ってフローチャートを作成していきましょう。
スポンサーリンク
Graphvizを導入
Homebrewを使ってGraphvizを導入します。
$ brew install graphviz
Graphvizの導入確認。dotコマンドを利用します。
$ dot -V
dot - graphviz version 2.40.1 (20161225.0304)
GraphvizをPythonで利用できるよう、pip3コマンドでgraphvizライブラリを導入。
$ pip3 install graphviz
これでGraphvizを利用する環境が整いました。
Graphvizを使って状態遷移図を作成
それでは、実際にGraphvizを使って状態遷移図を作成してみましょう。
今回は一例として、商品が注文されたときのフローをかんたんに書き起こしてみました。
「sample.py」として、以下の内容で作成。
from graphviz import Digraph
G = Digraph(format="png")
G.attr("node", shape="box", width="1", color="orange")
G.node("start", shape="oval", color="pink")
G.node("注文を確認")
G.node("注文情報に問題はある?", shape="diamond", color="yellow")
G.node("在庫チェック")
G.node("在庫はある?", shape="diamond", color="yellow")
G.node("配送")
G.node("配送伝票番号の入力")
G.node("購入者へメール通知")
G.node("end", shape="oval", color="gray")
G.edge("start", "注文を確認")
G.edge("注文を確認", "注文情報に問題はある?", label=" ")
G.edge("注文情報に問題はある?", "注文を確認", label=" ある")
G.edge("注文情報に問題はある?", "在庫チェック", label=" ない")
G.edge("在庫チェック", "在庫はある?", label=" ")
G.edge("在庫はある?", "在庫チェック", label=" ない")
G.edge("在庫はある?", "配送", label=" ある")
G.edge("配送", "配送伝票番号の入力")
G.edge("配送伝票番号の入力", "購入者へメール通知")
G.edge("購入者へメール通知", "end")
G.render("order_state")
nodeでノードを追加、edgeで矢印を追加しています。
それ以外の属性はそれぞれ読んだとおりです。詳しくは記事の最後に載せている参考を確認してみてください。
ところどころlabelにスペースが入ってしまっているのは見た目を整えるためしかたなくいれています(ここらへんいい方法があったら知りたいです)。
上記のプログラムを実行してみます。
$ python3 sample.py
次のような画像(order_state.png)が出力されました。
例としてはちょっと物足りない感じですが、工夫すれば複雑な図も書けそうですね。
ぜひ活用してみてください。
まとめ
PythonとGraphvizを使ってフローチャートを作成する方法について解説しました。
かんたんな図形であれば、パワーポイントやkeynoteを使わずにフローチャートや状態遷移図が書けるのではないでしょうか。
難しい図を書きたい場合は、Graphvizのドキュメントを詳しく見る必要があるため、あるていどの学習コストがかかりそうです。
参考
Python + Graphvizのサンプルや利用できる形状などの情報は、以下のサイトあたりが参考になります。
LINKUser Guide — graphviz 0.8.2 documentation
LINKExamples — graphviz 0.8.2 documentation
LINKNode Shapes
この記事を書くにあたり、以下のサイトが参考になりました。
参考pythonでgraphvizの使い方(美しいツリー構造や状態遷移図の描画) – 技術メモ
参考Graphvizとdot言語でグラフを描く方法のまとめ – Qiita
参考Gvizの目次 – Rubyの世界からGraphvizの世界にこんにちは!
参考になれば幸いです。
Web開発のお仕事を募集しています
フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。
「Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。
ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。
LINKお問い合わせ
スポンサーリンク
PC用AdSense
PC用AdSense
こちらもどうぞ
- PREV
- 2018年にやりたいこと
- NEXT
- 『Git勉強しよう会 #1』レポート記事