RubyのIRBやpryでメソッドの定義元をすっと調べる方法

こんにちは、hachi8833です。 先週弊社で行われたコードリーディング勉強会で、講師のmorimorihogeさんが終盤で教えてくれたIRBやpry向けのテクニックをご紹介します。勉強会本編も後日記事にいたしますのでご期待ください。 メソッドの定義元を調べる 任意のオブジェクトの#methodsメソッドを呼ぶと、以下の様にそのオブジェクトで使えるメソッド一覧のSymbol配列を取得できますが、そこで見つけたメソッドが実際にはどのクラスやモジュールで実装されているのかをその場で知りたいことがあります。 実は.method(:メソッド名).ownerで簡単に取得できます。Methodオブジェクトを取ってきて情報を参照しているだけです。 以上はRubyの場合ですが、RailsコンソールでももちろんOKです。 定義元は.ownerを付けなくてもわかる場合もありますが、以下のようにメッセージが長くなると読み取りが面倒なので付けておくのがよいでしょう。 参考: Railsコンソールをpry化 既に皆様もお使いになっていると思いますが、pry-railsを導入するとRailsコンソールで標準のIRBの代わりにpryを使えるようになります。 RailsなどのGemfileに以下のようにpryを追加し、Railsのホームディレクトリでbundle installを実行することでdevelopment環境とtest環境のRailsコンソールがpry化されます。今回の記事とは関係ありませんが、ついでにpry-doc、pry-byebug、pry-stack_explorerもインストールしてしまいましょう。 group :development, :test do gem ‘pry’ gem ‘pry-rails’ gem ‘pry-doc’ gem ‘pry-byebug’ gem ‘pry-stack_explorer’ end Railsと関係なくpryをインストールするには、gem install pryを実行します。 morimorihogeコメント morimorihogeです。最近補足コメントの人化してますね。Civ6が待ち遠しいです。 週一の勉強会のネタが切れてきたのでGemのコードリーディングについての話をしてみたのですが、その中で「そういえば、better_errorsとかを使ってデバッグコンソールを取った時、オブジェクトにはアクセスできるけどメソッドの定義元が分からないから調べられると便利だよなー」とふと思って調べてみたのがMethodオブジェクトでした。 Javaとかだとリフレクション系の機能のドキュメントを眺めていくという方法もありましたが、Rubyは設計思想的になんでもオブジェクトな思想なので「#methodsでメソッド一覧が取れるなら、methodオブジェクトもあるよねJK」ということで調べたらあったぜ、という流れです。 僕自身はRubyのコアの方にはそれほど詳しくないのですが、言語の設計思想や他の言語との比較なんかがなんとなく頭に入ってると「この言語はこういう設計だから、この問題はこの辺を調べれば解決できるはず」という最初の取っかかりができるので、問題解決が早くなることもあります。 仕事でコードを書いていると即物的な解決策を求めてしまいがちですが、たまには言語自体の勉強なんかをする機会も持つとプログラマとしての幅が広がるのではないでしょうか。 とか偉そうなことを書いてみました。2〜3個くらいのプログラミング言語をそれなりに使えるようになるくらいまで習得しておくと、比較しながら言語の特徴を理解できるので割とオススメです。 関連記事 pry/pry-railsでコンソール出力のページャを無効にする WordでUnicodeコードポイントを直接入力する