〜変数の中身を確認〜 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でインストールする必要があります。

#Gemfile
gem install pry-byebug

こちらをgemfileに追記し、インストールしましょう。

実際のデバッグのやり方

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

example_controller.rb
def index 
 number = params[:number]

 if number >= 30
  puts "30より大きい"
 else 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 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 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は技があるのですが、勉強中の身ですので、これから勉強していきます。。。。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.