20 October 2013
JRubyユニバースも視覚化してみる
(追記:2014-3-3) Gvizについてのまとめ頁を作りました。
前の前の記事でCRubyのクラスツリーをGraphvizを使って視覚化した。
前の記事でRubiniusのクラスツリーをGraphvizを使って視覚化した。
そうしたら今度は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
拡大するとJavaProxy
というクラスからJavaの世界へつながるような構造が見える。
(追記:2013-10-21) Rubyのソースディレクトリも視覚化しました。
関連記事:
Yet Another Ruby Graphviz Interfaceを作ったからみんなで大量のグラフを作って遊ぼうよ!
blog comments powered by Disqus