(追記:2014-3-3) Gvizについてのまとめ頁を作りました。

Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは!


前の前の記事でCRubyのクラスツリーをGraphvizを使って視覚化した。

RubyユニバースをGraphvizで視覚化する

前の記事でRubiniusのクラスツリーをGraphvizを使って視覚化した。

Rubiniusユニバースも視覚化してみる

そうしたら今度はJRubyでどうなるのかも見てみたくなったのでJRubyをインストールしてやってみることにした。

% rbenv install jruby-1.7.4
% rbenv local jruby-1.7.4
% ruby -v
jruby 1.7.4 (1.9.3p392) 2013-05-16 2390d3b on Java HotSpot(TM) 64-Bit Server VM 1.6.0_51-b11-456-11M4508 [darwin-x86_64]
% gem install gviz

例外クラスとモジュールを除いたRubyのクラスツリーをJRubyで書いてみる。

# ruby_tree.rb
 require 'gviz'
 
 classes = ObjectSpace.each_object(Class)
                      .reject { |k| "#{k}".match /Gem|Thor|Gviz/ }
 
 Graph do
   global layout:'fdp'
   nodes style:'filled', colorscheme:'purd7'
 
   classes.each do |klass|
     tree, mods = klass.ancestors.group_by { |anc| anc.is_a? Class }
                       .map { |_, k| k.reverse }
     next if tree.include?(Exception) && tree[-1] != Exception
     tree = tree.map.with_index { |k, i| [k, i] }
     tree.each_cons(2) do |(a, ai), (b, bi)|
       a_id, b_id = [a, b].map(&:to_id)
       route a_id => b_id
       node a_id, label:a, color:7-ai, fillcolor:7-ai
       node b_id, label:b, color:7-bi, fillcolor:7-bi
     end
   end
 
   save :ruby_tree, :png
 end

ファイルを実行して生成されたpngを開いてみる。

% ruby ruby_tree.rb
% open ruby_tree.png


alt noshadow (クリックで拡大)

拡大するとJavaProxyというクラスからJavaの世界へつながるような構造が見える。


(追記:2013-10-21) Rubyのソースディレクトリも視覚化しました。

Rubyのソースディレクトリも視覚化してみる


関連記事:

RubyユニバースをGraphvizで視覚化する

Rubiniusユニバースも視覚化してみる

Yet Another Ruby Graphviz Interfaceを作ったからみんなで大量のグラフを作って遊ぼうよ!



blog comments powered by Disqus
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS