Ruby | Gviz gem の内部 DSL の基本
概要
Gviz gem の内部 DSL の基本構成要素について。
※ 私は graphviz を単独で使ったことが無い状態で Gviz を利用しはじめています。
その点において、おかしな記述があるかもしれません。
node
ノード。 gviz の DSL では、 route + ノード名(シンボル) によって記述する。
引数が可変長になっているので複数指定も可能。
ソースコード
nodes.rb
require 'gviz'
Graph do
route :Hubot
route :Kandan
route :GitLab, :GitLabCI
save(:nodes, :png)
end
出力
nodeset によって、定義済みの node のリストにアクセスできます。
Hashを取得したい場合は、 @nodes でアクセスできます。
ソースコード
nodeset.rb
require 'gviz'
require 'pp'
Graph do
route :Hubot
route :Kandan
route :GitLab, :GitLabCI
pp nodeset
pp @nodes
end
出力
$ ruby nodeset.rb
[#<struct Gviz::Node id=:Hubot, attrs={}>,
#<struct Gviz::Node id=:Kandan, attrs={}>,
#<struct Gviz::Node id=:GitLab, attrs={}>,
#<struct Gviz::Node id=:GitLabCI, attrs={}>]
{:Hubot=>#<struct Gviz::Node id=:Hubot, attrs={}>,
:Kandan=>#<struct Gviz::Node id=:Kandan, attrs={}>,
:GitLab=>#<struct Gviz::Node id=:GitLab, attrs={}>,
:GitLabCI=>#<struct Gviz::Node id=:GitLabCI, attrs={}>}
edge
エッジ。gviz の DSL では、 route + エッジ(Hash) によって記述する。
引数が可変長になっているので複数指定も可能。
ソースコード
edges.rb
require 'gviz'
Graph do
route Kandan: :Hubot
route Hubot: :Kandan
route GitLab: :Hubot
route GitLab: :GitLabCI
save(:edges, :png)
end
出力
edgeset
node と nodeset 、 edge と edgeset は同じ構成なので
edgeset に関する説明は省略。
rank
グラフのランクを以下のシンボルから設定します。
[:same, :min, :max, :source, :sink]
設定例1
rank.rb
require 'gviz'
Graph do
route Kandan: :Hubot
route Hubot: :Kandan
route GitLab: :Hubot
route GitLab: :GitLabCI
rank :min, :Kandan
rank :same, :GitLab, :Hubot
rank :max, :GitLabCI
save(:rank1, :png)
end
出力
設定例2
require 'gviz'
Graph do
route Kandan: :Hubot
route Hubot: :Kandan
route GitLab: :Hubot
route GitLab: :GitLabCI
rank :max, :Kandan
rank :same, :GitLab, :Hubot
rank :min, :GitLabCI
save(:rank2, :png)
end
出力
subgraph
サブグラフ。
ソースコード
subgraph.rb
require 'gviz'
Graph do
route Kandan: :Hubot
route Hubot: :Kandan
route GitLab: :Hubot
route GitLab: :GitLabCI
subgraph do
global label:'GitLab CI'
route :GitLabCI => :GitLabCiRunner1
route :GitLabCI => :GitLabCiRunner2
end
save(:subgraph, :png)
end
出力
参照
-
Gviz 作者さんの Gviz 関連記事の目次ページ
http://melborne.github.io/2014/02/27/gviz-posts/ -
Gviz GitHub
https://github.com/melborne/Gviz