simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

Rubyのオブジェクトの継承関係をtreeコマンドっぽく表示するgem「object_tree」を作った

gem「object_tree」作りました。
https://github.com/siman-man/object_tree

Rubyでクラス継承やら、モジュールのincludeなどをしたときに、ancestorsメソッドなどで継承関係を調べることができるのですが、これをtreeコマンドっぽくして視覚的に見やすくしました。(1.8は確認してないです。)


使い方

gem install object_tree
require 'object_tree'

class A
end

class B < A
end

class C < A
end

tree = ObjectTree::Tree.create(A)
tree.draw
<C>A
├──── <C>B
└──── <C>C

ObjectTree::Tree.createメソッドにrootにするクラスを指定します。(moduleは指定できません)そして、drawメソッドを使用して出力します。


Moduleも含めた表示

createメソッドの第2引数はmodule表示の有無を指定です。trueを入れるとmoduleを含めた表示になります。

require 'object_tree'

module D; end
module E; end

class A
end

class B < A
  include D
end

class C < A
  include E
end

tree = ObjectTree::Tree.create(A, true)
tree.draw
<C>A
├──── <M>E
│      └──── <C>C
└──── <M>D
       └──── <C>B

これで継承関係が視覚的に見れるようになりました。