Coding for Fun

ruby on railsを中心としたウェブ技術つれづれ日記

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. 最も使うメソッドなので短いメソッド名にしました。