Rails案件で「pry」を使って実装したメソッドをデバッグする機会があったので、使い方の備忘録
pryとは
REPLで対話的にプログラムを実行したり、ActiveRecordを利用したDB操作や、変数の中身を調べることができるコマンドラインツール
※ Laravelで言うところの「tinker」とほぼ同じような使い方ができる、超便利なデバッグツール
サンプル
サンプルとして、以下のメソッドを例に解説
app/lib/utils/test_sample.rb
module Utils
module TestSample
class << self
def sample_method(param)
data = [1, 2, 3, 4, 5]
data.each do |r|
if r == param
return true
end
end
return false
end
end
end
end
メソッドのデバッグ方法
bundle exec rails c
で、コンソールを立ち上げる
$ bundle exec rails c
Loading development environment (Rails 6.0.0)
[1] pry(main)>
ソースコードの「ブレークポイントを貼りたい箇所」にbinding.pry
を差し込む
app/lib/utils/test_sample.rb
module Utils
module TestSample
class << self
def sample_method(param)
data = [1, 2, 3, 4, 5]
data.each do |r|
+ binding.pry
if r == param
return true
end
end
return false
end
end
end
end
※ 変更を加えた際の反映は、pryのコンソールにreload!
を入力してリロードすること
コンソールから、デバッグしたいメソッド指定して実行する
[1] pry(main)> reload!
Reloading...
=> true
[2] pry(main)> Utils::TestSample.sample_method 3
From: /Users/nakano_shingo/Documents/minnshu-gms/app/lib/utils/test_sample.rb @ line 8 Utils::TestSample.sample_method:
4: def sample_method(param)
5: data = [1, 2, 3, 4, 5]
6:
7: data.each do |r|
=> 8: binding.pry
9: if r == param
10: return true
11: end
12: end
13:
14: return false
15: end
※ 引数を指定したい場合は、上記のようにスペースの後に引数を渡す
その時点の変数の値を確認したい場合は、コンソールに変数名を入力する
[1] pry(Utils::TestSample)> param
=> 3
[2] pry(Utils::TestSample)> r
=> 1
pryのコマンドは、以下のようにコンソールからhelp
を入力すると使い方を教えてくれる
pry> help <コマンド>
よく使うコマンド
コマンド | 説明 |
---|---|
next | 次の行を実行 |
step | 次の行かメソッド内に入る |
continue | プログラムの実行をcontinueしてpryを終了 |
finish | 現在のフレームが終わるまで実行 |
exit/quit | 実行中のステップを終了し、次のステップ(binding.pry)まで処理を実行 |
!!! | pryのコンソールを抜ける |
※ 参考: Pryコマンドまとめ - Qiita |
「next」や「step」などのコマンド実行時、以下のエラーが出る場合
SyntaxError: (eval):2: Can't escape from eval with next
こちらを参考にpry-nav
のgemを追加で導入すればOK
スクリプト言語でも、デバッグ時に手軽にステップ実行ができるのはとても便利ですね