以前、pメソッドを利用したデバッグ方法を書いたところ、友人にそこそこウケましたので、次はbinding.pryについて書いていきます。
ちなみにpメソッドの記事はこちら
〜変数に入っている要素を確認〜 pメソッドでデバッグする(初心者の方向け)
https://qiita.com/tomoharutsutsumi/items/925362d6963ebb318305
正直やり方が違うだけで、基本的なところではpメソッドもbinding.pryもデバッグの考え方は似ています。
#binding.pryでできること
binding.pryとコードの中に打つことで、一度プログラム処理が止まり、その時点におけるコードの状態をみることができるというものです。
コードの状態というのは、たとえば、「この時点ではこの変数にはこの値が入っているはずだ!」みたいなことです。
自分ではそう思っていても、いざ動かしてみたら望んだ動きをしません。binding.pryを使ってみたら、値が違うじゃん!みたいになってここが問題だったのか!と気づく。。。。
こんな形でデバッグが可能です。
まあ、文字を書くよりもやってみましょう。
#binding.pryを使うための準備
まず、binding.pryは最初からruby on railsで用意されているものではないので、gemでインストールする必要があります。
#ターミナル
gem install pry-byebug
こちらをターミナルに書き、インストールしましょう。
#実際のデバッグのやり方
まず下のようなコードがあったとします。
def index
number = params[:number]
if number >= 30
puts "30より大きい"
else if number <= 10
puts "10より小さい"
end
end
コーディングしている最中に、numberの中身を確認したいとなったとします。
例えば、30より大きい数が飛んで来ていると思っているが、"10より小さい"が表示されてしまっているといったときです。。。
そういうときにbinding.pryを入れます。
def index
number = params[:number]
binding.pry
if number >= 30
puts "30より大きい"
else if number <= 10
puts "10より小さい"
end
end
確認したい変数の直後に入れるようにします。
今回はnumberです。
binding.pryを追加しましたら、そのコードが書かれている部分をサービス側で実際に動かしてみます。処理が止まるはずです。
そして、ターミナルのrails サーバーに移動します。
#ターミナル
1:def index
2: number = params[:number]
3: binding.pry
=> 4: if number >= 30
5: puts "30より大きい"
6: else if number <= 10
7: puts "10より小さい"
8: end
9:end
[1] pry(#<ExampleController>)> number
=> 5
処理が止まり、下にpryが出て来ます。
ここに自分が調べたい変数をかくと、その中身が表示されます。
5が飛んで来ているので、パラメータの飛ばし方を変えなきゃ。。。となります。
ちなみに、numberのところにexitと書けば、サーバーは元に戻ります。
#ターミナル
[2] pry(#<ExampleController>)> exit
ちなみに、htmlに書く場合は、<%~%>で囲みます。
<% form_tag(books_search_path, method: "get") do %>
<% binding.pry %>
<%= text_field_tag :title , params[:title] %>
<% end %>
実は、まだまだbinding.pryは技があるのですが、勉強中の身ですので、これから勉強していきます。。。。
##個人開発をされている方へ
Moverというプロダクトを開発しています。登録していただくと、開発したプロダクトのテスト利用を依頼し、フィードバックをもらうことができます。自分のプロダクトを公開して個人開発を加速させましょう!! 現在僕のアカウントも登録されているので、そちらにテスト利用依頼をいただければ実際に使ってみた感想などをお送りさせて頂きます。(アドバイスなどではなく、一人のユーザーとしての感想となります。) もちろん無料です。
https://mover-web.herokuapp.com/