0
0

More than 3 years have passed since last update.

保守運用の際に既存メソッドの定義場所を調べるメソッド[Ruby, Rails]

Posted at

想定

  1. 既存のアプリの改修を担当することになった
  2. 独自に定義されているメソッドについて、どこで定義されているか知りたい

結論

メソッドがどこで定義されているか調べるメソッド

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カ月が経ちます。
初めての開発現場はとても学びが多いですが、全然アウトプットの時間を確保できていませんでした…

これからは、自分の中でのアウトプットに対する敷居を下げ、誰に向けた記事なのか意識することで、少しずつアウトプットの時間を確保しようと思います!

最後までお読み頂き、ありがとうございました!

0
0
0

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
0
0