Ruby | Gviz gem で graphviz を Ruby の DSL で操作し、グラフを描画する
概要
Gviz gem で graphviz を Ruby の DSL で操作し、グラフを描画します。
導入目的は、システム開発に関わる設計資料などの図が必要な際に、
図の作成・保守をプレーンテキストで管理することです。
手動での図の作成、保守は非常に手がかかります。
プレーンテキストで管理することで、手間がかからず自動化も容易になり、
履歴管理も容易になります。
※私の職場では日常業務で、手動できっちり調整しなければならないほど見栄えが求められる機会が少ない
どちらかというと、開発者内の情報共有のため開発者が見てわかればよい。
手順
graphvizのインストール
Windows7 環境にインストールします。
-
安定版の msi インストーラーを利用します。
http://www.graphviz.org/pub/graphviz/stable/windows/graphviz-2.38.msi -
インストーラーに沿ってインストール
-
パスを通しておく。例えば Windows7環境にウィザードに沿っていインストールした場合は、
C:\Program Files (x86)\Graphviz 2.38\bin
にパスを通す。
gviz gem のインストール
gem i gviz --no-ri --no-doc
または bundle install
試行
仕様
OSS で構成された開発チームで利用する環境の構成図を作ってみます。
自分が環境構築を行った結果をチームメンバーと共有したり、
新たなメンバーが増えた際に説明するために利用する、と想定します。
<構成要素>
- リポジトリブラウザ => GitLab
- チャットツール => Kandan
- CIツール => GitLab CI
- CI実行 => GitLab CI
- ユーザー => User
<依存関係>
-
ユーザー
- GitLabへの push, issue の作成などを行います
- Kandanでコミュニケーションのためのチャットをしたり、Hubotへの指示を出すためのコマンドをチャットします
- レアケースだがCIを手動で実行する
-
GitLab
- push をトリガーとして GitLab CI へ実行を要求する
- push/issue/merge request をトリガーとして、 Web Hook に登録してある Hubot の Webサーバーに送る
-
GitLab CI
- GitLab CI Runner へ CI の実行を要求する
- CIの実行結果をWeb Hook に登録してある Hubot の Webサーバーに送る
-
GitLab CI Runner
- CI の実行をし、結果を GitLab CI に送る
-
Hubot
- Hubot Webサーバーから受け取ったデータをもとに Kandan にチャットメッセージを送る
- Kandan のチャットメッセージをもとにサーバー内で任意の処理を実行したり、チャットメッセージを返却する
-
Kandan
- Hubot へScriptの実行を促すコマンドを送る
Gviz DSL
このファイルを ruby で実行すると、
oss_agile_dev_env.dot, oss_agile_dev_env.png が生成されます。
require "gviz"
Graph do
route :Hubot => [:Kandan]
route :Kandan => [:Hubot]
route :GitLab => [:Hubot, :GitLabCI]
route :GitLabCI => [:Hubot, :GitLabCiRunner, :Hubot]
route :GitLabCiRunner => [:GitLabCI]
route :User => [:Kandan, :GitLab, :GitLabCI]
save(:oss_agile_dev_env, :png)
end
出力ファイル(dot)
digraph G {
Hubot;
Kandan;
GitLab;
GitLabCI;
GitLabCiRunner;
User;
Hubot -> Kandan;
Kandan -> Hubot;
GitLab -> Hubot;
GitLab -> GitLabCI;
GitLabCI -> Hubot;
GitLabCI -> GitLabCiRunner;
GitLabCiRunner -> GitLabCI;
User -> Kandan;
User -> GitLab;
User -> GitLabCI;
}