LoginSignup
8
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-08-28

概要

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自体の機能を使ったいい方法もあるので、それも別途記事にする

8
6
2

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
8
6