Railsの簡単なデバッグ
Railsのデバッグにはいろいろな方法があります。 Ruby Debuggerを使ってもいいし、IDE内蔵デバッガを使ってもいいでしょう。原始的な方法として、p, pp , putsあたりをつかってコンソールに出力する、というのもあります。複雑なのは使いこなせれば便利だろうと思って、Rails Guideのデバッグセクション(英語)を頑張って読んでそのままやってみようとしました。
ただ、私の環境では、Ruby Debuggerを入れたらRailsが起動しなくなってしまって、あきらめました。複雑なフックがかかっているようで、目の前の問題を解いても、今後また相性問題が発生しそうだな、と感じて。
原始的なp, pp, putsはかなり強力でもありますが、多用するとどの出力がどこから来ているのか分からなくなります。このtrueは何だっけ?あと、デバッグが終わった後に消し忘れることもあります。本番ログに怪しげな数字が大量に出力されていて気づくとか笑えない。
pの使いやすさはそのままに、機能を追加した新しいコマンドを作りました。名付けてpl *1。これは、現在のファイル名、メソッド名、行数を出力してから、変数を出力する単純なメソッドです。
以下のコマンドをpl.rbと名前を付けて、config/initializersフォルダに置いてください。
require 'pp' def pl(*args) str0 = "=== " + caller.select{|l| l.match(/Rails.root/)}.first str_out = args.inject(str0){|strs, obj| strs + obj.pretty_inspect} puts str_out str_out end
使い方
pl #=> === /Users/.../app/models/user.rb:24 'true_friends' pl current_user.name, current_user.friends.all #=> === /Users/.../app/models/user.rb:line:24 'true_friends' User1 [<User...>, <User...>, ...]
*1:print line. 最も使うメソッドなので短いメソッド名にしました。