LoginSignup
76
87

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-03-25

以前、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は技があるのですが、勉強中の身ですので、これから勉強していきます。。。。

個人開発をされている方へ

Moverというプロダクトを開発しています。登録していただくと、開発したプロダクトのテスト利用を依頼し、フィードバックをもらうことができます。自分のプロダクトを公開して個人開発を加速させましょう!! 現在僕のアカウントも登録されているので、そちらにテスト利用依頼をいただければ実際に使ってみた感想などをお送りさせて頂きます。(アドバイスなどではなく、一人のユーザーとしての感想となります。) もちろん無料です。
https://mover-web.herokuapp.com/

Screen Shot 2020-05-19 at 4.36.42 PM.gif

76
87
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
76
87