Rubyでメソッドの定義場所を取得する方法
タグ: ruby / 初版公開: 2013-12-11

gemを使っていたり、扱っているソースが大規模だったりする時に、メソッドの定義場所を調査したい場合がある。 RubyにはProc#source_locationで、メソッドの定義場所を取得することができる。 使い方は簡単で、調査対象のメソッドをいったんMethodオブジェクトに変換し、source_locationメソッドを呼びだせば良い。

例えば標準添付ライブラリのopen-uriKernel#openを再定義することで、URIを直接openすることを可能にする。 この時にKernel#openの実体がどこで定義されているのか調べてみよう。 以下のコードのとおり、Kernel#openopen-uriの27行目で再定義されていることが確認できる。

require 'open-uri'
method = Kernel.method(:open) # Kernel#openのMethodオブジェクトの取得
p method.source_location # => ["/usr/lib/ruby/1.9.1/open-uri.rb", 27]

source_locationの使い方については、パーフェクトRubyの6-1-1のコラムとして簡単な解説が掲載されている。

パーフェクトRuby (PERFECT SERIES 6)
Rubyサポーターズ すがわら まさのり 寺田 玄太郎 三村 益隆 近藤 宇智朗 橋立 友宏 関口 亮一
技術評論社
売り上げランキング: 10,788