Edited at

〜変数の中身を確認〜 binding.pryでデバッグする(初心者の方向け)

以前、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

こちらをターミナルに書き、インストールしましょう。


実際のデバッグのやり方

まず下のようなコードがあったとします。


example_controller.rb

def index 

number = params[:number]

if number >= 30
puts "30より大きい"
else if number <= 10
puts "10より小さい"
end

end


コーディングしている最中に、numberの中身を確認したいとなったとします。

例えば、30より大きい数が飛んで来ていると思っているが、"10より小さい"が表示されてしまっているといったときです。。。

そういうときにbinding.pryを入れます。


example_controller.rb

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に書く場合は、<%~%>で囲みます。


example.html.erb

<% form_tag(books_search_path, method: "get") do %>

<% binding.pry %>
<%= text_field_tag :title , params[:title] %>
<% end %>

実は、まだまだbinding.pryは技があるのですが、勉強中の身ですので、これから勉強していきます。。。。