return 1;

Webエンジニア、RailsとJSをメインに仕事しています。チーム開発が得意で、0-1や1-100のどちらも行う

Railsにおけるデバッグ方法のあれこれ

基本は pry を使います(gemとしては pry-rails ですが)

1. 前提

テストしやすいように

GitHub - lion-man44/sandbox-rails: railsのいろいろな説明用

Rails環境をあげてあります

出来るだけ最小ケース(あんまりバカスカgemを入れてない状態)でデバッグできるような内容を重きに置いてあります

自プロジェクトで導入する場合は導入方法はこちら

動かし方はこちら です

2. 環境

Rails 5系以上 Ruby 2.6.0 (せっかくなので) pry-rails 3.8

3. 起動方法

https://github.com/lion-man44/sandbox-rails

に書いてあるのでそちらを参考にしてください

ちなみに、 docker などを活用していない場合は下記のコマンドでそれぞれおこないます

  • ローカルサーバーの起動方法
bundle exec rails s
# or
$RAILS_ROOT/bin/rails s
bundle exec rails c
# or
$RAILS_ROOT/bin/rails c

4. 確認方法

  • 一体何のmethodがあるのか知りたい
[].methods # public and protected
[].public_methods # only public
[].private_methods # only private
  • 大量のmethod名の中から自分が想定されるメソッドがあるか知りたい
    • Enamerableな要素に対してgrepが行えますので、いろいろと調べたい時は便利です(これを実装で使うパターンはあんまりないと思います)
[].methods.grep /allow/
  • 祖先が知りたい
    • concernも調べらたりするので何を継承しているのか知ることができる
class.ancestors
  • そもそもglobalに何が定義されているのか知りたい
    • これは rails c よりも rails s でそのmethodで調べたい時の方が効果があります
ls # いっぱい出てきて戸惑うかもしれませんが、ゆっくり読んでいけば一体何が今展開されているのか読むことができます

ちなみに cd ${調べたいmethod} などで移動することができます

[111] pry(main)> helper.select :users, :id, [['a', 1], ['b', 2]]
=> "<select name=\"users[id]\" id=\"users_id\"><option value=\"1\">a</option>\n<option value=\"2\">b</option></select>"

qiita.com

もうここに書いてあること実行すればできます

5. まとめ

思いつくだけババっと書いてみました

これらを駆使すればデバッグできるけど、といった内容です

しかし結局のところはデバッグ方法をいくら知っていたとしてもそのフレームワークの規約などから外れているといくらデバッグ機能が優秀だとしても理解が及ばない時があり、その時は結局苦戦することになります

Railsの場合、他と特色が違うなと思うのは大体の思いついたことをメソッド名にして探してみると大体あるな、というのが長年触っていてあります

「継承しているものを知りたい」→「祖先が知りたい」→「 ancestors というメソッドがあるじゃん」

みたいな流れで大体気付いたりすることが多いです(「祖先が知りたい」という部分が出てこない場合はありますがw)

まずはやりたいことをggってみるだけでも割とたどり着けることが多いです