dot言語という独自の言語で記述します
せっかくなので自分の身の回りのツールやシステムを可視化してみました
やっぱりソースコードで管理できるというのはいいですね
■環境
Mac OS X 10.8.5
Ruby 2.1.2p95
Gem 2.2.2n
Ruby 2.1.2p95
Gem 2.2.2n
■graphvizのインストール
http://www.graphviz.org/pub/graphviz/stable/macos/mountainlion/graphviz-2.36.0.pkg
からgraphvizをダウンロードします
ダウンロードが完了したらpkgファイルを実行してインストールしてください
利用規約に同意する以外、特に気にする部分はないと思います
インストールが完了すると /Applications/Graphviz.app/ が作成されていると思います
からgraphvizをダウンロードします
ダウンロードが完了したらpkgファイルを実行してインストールしてください
利用規約に同意する以外、特に気にする部分はないと思います
インストールが完了すると /Applications/Graphviz.app/ が作成されていると思います
■gvizのインストール
gem install gviz
■サンプルコード
# -*- coding: utf-8 -*-
# sample.rb
require 'gviz'
gv = Gviz.new
gv.graph do
# グラフ全体のレイアウトを定義
global layout:'dot', overlap:false
# 共通のサービスを宣言
cloud_storage_services = [:Dropbox, :GoogleDrive, :Evernote, :Github, :codeBreak]
local_storage = [:disk200a, :disk200b]
net_services = [:Twitter, :Facebook, :Blogger, :Cacoo]
# 起点となるノードからのつながりをここで定義
## ここですべてを定義しなくても後からedge等を使ってつながりを作成することは可能
route :yoshi0 => [:Internet]
route :yoshi1 => [:yoshi0] + cloud_storage_services + net_services + local_storage
route :yoshi2 => [] + cloud_storage_services + net_services
route :yoshi3 => [] + cloud_storage_services
# すべてのノードに対するルールを定義
nodes color:'black', fillcolor:'white', style:'filled'
# 特定のノードに対するルールを定義
cloud_storage_services.each {|k|
node k, fillcolor:'green'
}
node :yoshi0, fillcolor:'gray99', label:'yoshi0\n(gateway)'
node :yoshi2, label:'yoshi2\n(Jenkins)'
node :fndb, fillcolor:'orange'
net_services.each {|k|
node k, fillcolor:'lavender'
}
node :Internet, fillcolor:'lavender'
# 特定のエッジに対するルールを定義
## routeで定義したつながりを「_」で区切ることでエッジを特定して設定できる
edge :yoshi1_yoshi0, color:'lightslateblue', label:'wi-fi'
edge :yoshi1_yoshi2, style:'dotted', label:'rdp'
edge :yoshi1_yoshi3, style:'dotted', label:'ssh'
edge :yoshi2_yoshi3, style:'dotted', label:'ssh'
edge :yoshi2_Github, style:'dotted', label:'git clone'
edge :yoshi2_codeBreak, style:'dotted', label:'git clone'
edge :yoshi2_fndb, style:'dotted', label:'xmlrpc'
edge :fndb_Twitter, style:'dotted', label:'api-tweet'
edge :fndb_Facebook, style:'dotted', label:'api-post'
# ノードをグループにまとめる
subgraph do
global label:'cloud'
node :yoshi2
node :yoshi3
end
subgraph do
global label:'home_net'
node :yoshi0
node :yoshi1
end
end
gv.save :my_system, :png
■実行
ruby my_system.rb
と実行するとmy_system.dot と my_system.png というファイルが作成されます
pngを直接開いても問題ないですが、dotファイルを開いてもgraphvizが立ち上がりグラフを見ることができます
もしdotファイルを開いたときにgraphivzで開かない場合にはFinderでsample.dotのところまで開き
Cmd+i でファイルの情報を開き「このアプリケーションで開く」の部分をGraphvizに変更してください
※クリックすると拡大します

簡単に凡例を説明すると(完全にUMLは無視していますが。。)
と実行するとmy_system.dot と my_system.png というファイルが作成されます
pngを直接開いても問題ないですが、dotファイルを開いてもgraphvizが立ち上がりグラフを見ることができます
もしdotファイルを開いたときにgraphivzで開かない場合にはFinderでsample.dotのところまで開き
Cmd+i でファイルの情報を開き「このアプリケーションで開く」の部分をGraphvizに変更してください
※クリックすると拡大します

簡単に凡例を説明すると(完全にUMLは無視していますが。。)
- 点線のつながりはTCP接続
- 緑はストレージサービス的な
- 薄い青はWebサービス的な
- 白はマシンノード
■Tips
gviz man
gviz man layouts
で各メソッド名を指定すればそのメソッドで指定できる属性情報を調べることができます
使用できる命令はほぼこれで網羅できると思います
gviz man layouts
で各メソッド名を指定すればそのメソッドで指定できる属性情報を調べることができます
使用できる命令はほぼこれで網羅できると思います
■参考サイト
0 件のコメント:
コメントを投稿