Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away