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

Rubyデバッグで使うメソッド達

More than 1 year has passed since last update.

概要

Rubyでのソースコードリーディング時に
これだけは最初に押さえておきたい!というメソッドをまとめました。

実装をしたり、ソースコードリーディングを行う際に、pryデバッグなどを行うのですが、
基本的なことを確認するときに使うRubyのメソッドがあるので、その紹介。

自身のClassを確認する

class

レシーバのクラスを調べて、出力してくれるメソッド。
意図してない箇所で、NoMethodErrorが出て、レシーバに何のクラスが入ってるのか確認したいときに使う。

自身にMix-inされているModuleや継承されているClassを調べる

ancestors

Moduleのインスタンスメソッドとして定義されています。

あるクラスやオブジェクトがどのようなクラス・Moduleをincludeしているのか?は結構気になります。
ancestorsを実行してあげると、継承ツリーの順番で返ってくるので、
include, extendされている位置関係が自身が意図した状態であるのか確認出来ます。

ActiveRecordを継承していたりすると、結構量があるので、ピンポイントで確認したい場合、
HogeClass.ancestors.include?(確認したいクラス名)をしてあげると、良いかと思われます。

参考
https://ref.xaio.jp/ruby/classes/module/ancestors

自身が使用できるメソッドを調べる

methods

使用できる全てのmethodを出力

すごい量が出てくるので、
Hoge.methods.grep(/部分検索文字列/)で探したりしてます。

このメソッドは、インスタンスメソッドなのかを調べたくなってくる時がある。

  • インスタンスか
  • 特異かは調べられるようにしておこう :muscle:

instance_methods

使用できる全てのインスタンスメソッドを出力
スーパークラスやMix-inしてるModuleのインスタンスメソッドも含まれる。

hoge.instance_methods(false)のように引数にfalseを渡すと、
レシーバで定義されているインスタンスメソッドのみを出力する。

参考
https://ref.xaio.jp/ruby/classes/module/instance_methods

singleton_methods

レシーバが使用できる全ての特異メソッドを出力
スーパークラスやMix-inしてるModuleの特異メソッドも含まれる。

hoge.singleton_methods(false)のように引数にfalseを渡すと、
そのオブジェクトで定義されているメソッドのみを出力する。

参考
https://ref.xaio.jp/ruby/classes/object/singleton_methods

自身が保持している変数を調べる

  • インスタンス変数
  • クラス変数
  • 定数は調べられるようにしておこう :cat:

methodsのように、全ての変数を返すというものはないっぽい

instance_variables

保持しているインスタンス変数を出力

参考
https://ref.xaio.jp/ruby/classes/object/instance_variables

class_variables

保持しているクラス変数を出力

参考
https://ref.xaio.jp/ruby/classes/module/class_variables

constants

保持している定数を出力

hoge.constants(false)のように
falseをつければ、そのオブジェクトで定義されている定数のみを出力する。

参考
https://ref.xaio.jp/ruby/classes/module/constants

まとめ

pry自体の機能を使ったいい方法もあるので、それも別途記事にする

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
No 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
ユーザーは見つかりませんでした