必ず役に立つ!Ruby on Railsでの開発で使えるデバッグコード


こ~れなんなん、これなんなん

こんにちは。

開発で最も必要とされる技術ってデバッグ力だと思っています。特にバグを大量生産することが得意な僕にとって、デバッグ力はとても大事。

そこで、普段開発で使ってるデバッグ用のコードをまとめておこうかと思います。

デバッグコード

Ruby on Railsで使える、デバッグで役に立ちそうなコードの一覧を書いていきます。なお、Rubyで使えるコードもあります。

byebug起動時やrails consoleで使用することを想定しています。byebugの使い方よく分からんて人は以下の記事で使えるようにしてください。
https://web-nari.net/2018/03/16/byebug/

メソッド一覧

hogeという変数の参照できるメソッドの中で、メソッド名にmethod_nameが含まれるメソッドの一覧を返します。

hoge.methods.select {|name| name.to_s.include?("method_name") }

メソッド定義場所

hogeという変数の参照できるfooメソッドの定義されてるクラスを返します。

hoge.method(:foo)

ソースファイルのパス

hogeという変数の参照できるfooメソッドの定義されてるファイルのパスを返します。

hoge.method(:foo).source_location

コールバック検索

Hogeというクラスに定義されてるsave時のコールバックの一覧を返します。cb.kind.eql?の引数にafterかbeforeを与えると、それぞれafter_コールバック関数、before_コールバック関数に定義されてるコールバックを返します。

Hoge._save_callbacks.select { |cb| cb.kind.eql?(:after) }.map { |cb| cb.filter }

その他のコールバック関数

saveだけではなくて以下のコールバック関数がそれぞれ利用可能。

=> [:validate,
 :validation,
 :initialize,
 :find,
 :touch,
 :save,
 :create,
 :update,
 :destroy,
 :commit,
 :rollback,
 :before_commit,
 :before_commit_without_transaction_enrollment,
 :commit_without_transaction_enrollment,
 :rollback_without_transaction_enrollment]

例えばafter_validationのコールバックの一覧が知りたい場合は、以下のようにすればいい。

Hoge._validation_callbacks.select { |cb| cb.kind.eql?(:after) }.map { |cb| cb.filter }

クラス化

:stringという名前から該当するクラスに変換します。例の場合だと、Stringが返ってきます。該当するクラスがない場合はNameError: uninitialized constantが発生します。

:string.to_s.classify.constantize

クラスの確認

hogeというオブジェクトのクラスを確認する。

hoge.class

継承元を検索する

hogeというオブジェクトの継承クラスやそのさらに祖先も検索できる。

hoge.superclass # 親クラスを検索
hoge.ancestors # 祖先を検索

インスタンス変数の確認

hogeというオブジェクトが持ってるインスタンス変数を返します。クラス変数はclass_variablesで参照可能。

hoge.instance_variables

まとめ

タイトルの勢いの割に書いてみたらすんごい少なかった。

これからも追加していきます。