想定
- 既存のアプリの改修を担当することになった
- 独自に定義されているメソッドについて、どこで定義されているか知りたい
結論
メソッドがどこで定義されているか調べるメソッド
method("メソッド名").source_location
# => ["/Users/user_name/dir1/dir2/app/helpers/application_helper.rb", 78]
# これが定義場所
使い方
このメソッドは、binding.pry
を用いたデバッグ中やrailsコンソール時などに用いることが可能です。(恐らく
以下では、binding.pry
を用いたデバッグを用いて、メソッドの定義場所を調査しています
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
:
</head>
<body>
<%= flash_messages %>
<% binding.pry %>
<%= yield %>
<%= javascript_include_tag 'application' %>
</body>
</html>
サーバー内にて
Frame number: 0/114
From: /Users/user_name/dir1/dir2/app/views/layouts/application.html.erb:209
207: <%= flash_messages %>
208: <% binding.pry %>
=> 209: <%= yield %>
210: <%= javascript_include_tag 'application' %>
211:
[1] pry(#<#<Class:xxxxxxxxxxxxxx>>)> method("flash_messages").source_location
=> ["/Users/user_name/dir1/dir2/app/helpers/application_helper.rb", 78]
参考
さいごに
参考記事では、'x'.method(:blank?).source_location
でメソッドの定義場所を調査されていますが、自分の環境ではうまく動作しませんでした。
また、自分が紹介したmethod("メソッド名").source_location
では、アプリ内で定義されているメソッド以外を調査することはできませんでした。(なんでだろう?
余談ですが…
久しぶりの投稿になります。現在インターンとして、実務開発に参加してから1カ月が経ちます。
初めての開発現場はとても学びが多いですが、全然アウトプットの時間を確保できていませんでした…
これからは、自分の中でのアウトプットに対する敷居を下げ、誰に向けた記事なのか意識することで、少しずつアウトプットの時間を確保しようと思います!
最後までお読み頂き、ありがとうございました!