448
402

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyでメソッドの定義場所を見つける方法

Last updated at Posted at 2012-12-26

RubyはModuleで組み込まれたメソッドや、method_missingを利用した「ゴーストメソッド」など、自分の見ているメソッドがそのクラス以外のどこで定義されているのか、分かりにくいケースがよくあります。
特にJavaやC#から移ってきた僕のようなプログラマは、「メソッド = どこかのクラスで定義されているもの」という印象が強いので、「持ち主がよく分からないメソッド」の存在はデバッグ等で苦労させられます。

こういったケースでは、Kernel#methodMethod#source_locationを組み合わせることで、メソッドの定義場所を見つけることができます。
たとえば、rails consoleでblank?メソッドの定義場所を見つけたい場合は、こんな感じです。

$ rails c
> 'x'.method(:blank?).source_location
 => ["/Users/mypc/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.3/lib/active_support/core_ext/object/blank.rb", 102] 

制限事項

  • Method#source_locationはRuby 1.9以上でしか使えません。
  • irbやrails consoleで簡単にチェックできるメソッドならいいですが、gemの奥まった処理で使われているメソッドなどを調査しようと思うと、結構大変かもしれません。

参考

2014.12.10 追記

最近はこの方法ではなく、 RubyMine を使ってます。
RubyMine、便利!

RubyMineのコードジャンプ機能は本当にすごい!!困ったときはCommand+Bを押すべし!

2017.1.30 追記

定数(クラス名やモジュール名を含む)の定義場所を調べたい場合はこちらの記事を参考にしてください。

Rubyでclassやconstの定義位置を調べる方法 - Qiita

448
402
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
448
402

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?