AncestorsVisualization
概要
Gem のクラス継承・モジュール利用を可視化する Gem です
作ったきっかけとしては、Gem の実装を読む時に全体感を把握したいなと思うことがあったので
例えば、以下のクラス・モジュール(Gem 名は GemName を想定)があったとして
# sample_gem_dir/lib/gem_name/c1.rb
module GemName
class C1 < C2
include Modules::M1_1
extend Modules::M1_2
end
end
# sample_gem_dir/lib/gem_name/modules/m1_1.rb
module GemName
module Modules
module M1_1
include M1_1_1
extend M1_1_2
def m1_1
end
end
end
end
# sample_gem_dir/lib/gem_name/modules/m1_2.rb
module GemName
module Modules
module M1_2
def self.m1_2
end
end
end
end
# sample_gem_dir/lib/gem_name/modules/m1_1_1.rb
module GemName
module Modules
module M1_1_1
def m1_1_1
end
end
end
end
# sample_gem_dir/lib/gem_name/modules/m1_1_2.rb
module GemName
module Modules
module M1_1_2
def self.m1_1_2
end
end
end
end
# sample_gem_dir/lib/gem_name/c2.rb
module GemName
class C2
include Modules::M2_1
extend Modules::M2_2
end
end
# sample_gem_dir/lib/gem_name/modules/m2_1.rb
module GemName
module Modules
module M2_1
def m2_1
end
end
end
end
# sample_gem_dir/lib/gem_name/modules/m2_2.rb
module GemName
module Modules
module M2_2
def self.m2_2
end
end
end
end
本 Gem を使うと、↓ の画像を生成します
- 右上に表示されている括りが、名前空間に対応
- 各ノードは、クラス・モジュールに対応
- 水色がクラス
- オレンジ色がモジュール
- 矢印は、継承・インクルードに対応
⚠️ 注意点
- 描画内容は正確でないことがあります
- あくまでコードリーディングする際の参考として使ってください
インストール方法
以下を Gemfile に追記して $ bundle install
gem 'ancestors_visualization'
Budler を使わない場合は
$ gem install ancestors_visualization
使い方
実行フォーマットは以下
$ bundle exec ancestors_visualization --gem [Gem 名] --output_path [描画ファイルの出力先]
- gem は必須
- output_path は必要であれば
- デフォルトは、
[Gem 名]_ancestors_[年月日時分秒].png
- 例えば、twitter_ancestors_20220504141646.png
- デフォルトは、
実行例 1
例えば、Twitter Gem に対して実行する場合
$ bundle exec ancestors_visualization --gem twitter
実行例 2
例えば、Rspec に対して実行する場合
該当 Gem の lib 配下のクラス・モジュールを描画対象にしているので、依存先の Gem が本体みたいなケースは、意図しない描画結果になります
↓ で描画結果を表示しているのですが、何も表示されていないのはそういうことです