まえがき
初めてbinding.pryを使ってデバッグをしようとしている方向けにわかりやすく使い方を書いたのでぜひ参考にしてみてください!
binding.pryを使えるようになると、バグの原因特定やアプリケーションの動きがわかるようになるなどのメリットが多いので、必須でできるようにした方がいいものです。この記事を読んでできるようになったら嬉しいです。
目次
- 設定方法
- binding.pryを挟む場所
- おまけ
設定方法
pry
のインストール
Gemfileに以下のように追加します。
gem 'pry'
gem 'pry-rails'
その後、bundle install
を実行します。
あとはbinding.pryを挟んで使用するだけ!
binding.pryを挟む場所
1. メソッドの最初
- メソッドの開始直後に挟むことで、そのメソッドが呼び出された際の引数やインスタンス変数の状態を確認できます。
def create
binding.pry
@learning_datum = current_user.learning_data.new(learning_data_params)
if @learning_datum.save
redirect_to @learning_datum, notice: 'Learning data was successfully created.'
else
render :new
end
end
2. 条件分岐の前後
-
if
やunless
などの条件分岐の前後に挟むことで、条件が正しく評価されているか、分岐前後での値の変化を確認できます。
def create
@learning_datum = current_user.learning_data.new(learning_data_params)
binding.pry
if @learning_datum.save
binding.pry
redirect_to @learning_datum, notice: 'Learning data was successfully created.'
else
binding.pry
render :new
end
end
3. データベース操作の前後
-
save
,update
,destroy
などのデータベースに影響を与える操作の前後に挟むと、その操作が正しく行われるか確認できます。
def update
binding.pry
if @learning_datum.update(learning_data_params)
redirect_to @learning_datum, notice: 'Learning data was successfully updated.'
else
render :edit
end
end
4. ループの中
- ループの中に挟むと、各反復ごとに処理を止めて状態を確認できます。特に、ループ処理が期待通りに動作しているか確認したいときに有効です。
def calculate_totals
@totals = {}
learning_data.each do |data|
binding.pry
@totals[data.category_id] ||= 0
@totals[data.category_id] += data.time
end
end
5. エラーが発生している箇所
- エラーが発生していると予想される箇所やエラーを捕捉している箇所に挟むと、原因の特定に役立ちます。
def show
@learning_datum = LearningDatum.find(params[:id])
binding.pry
rescue ActiveRecord::RecordNotFound => e
binding.pry
redirect_to root_path, alert: 'Learning data not found.'
end
6. コールバックやフック
-
before_action
,after_action
,around_action
などのコールバックやモデルのbefore_save
,after_create
などに挟むと、コールバックが期待通りに動作しているか確認できます。
before_action :set_learning_datum, only: [:show, :edit, :update, :destroy]
def set_learning_datum
binding.pry
@learning_datum = LearningDatum.find(params[:id])
end
7. フォームデータの検証時
- フォームから送信されたパラメータが適切に受け取れているか、またはバリデーションが正しく行われているかを確認したい場合に有効です。
def learning_data_params
binding.pry
params.require(:learning_data).permit(:category_id, :skill, :time, :month)
end
おまけ
唐突ですが弊社のご紹介もさせてください。
▼ コーポレートサイト
https://prum.jp/
▼ Wantedly求人
https://www.wantedly.com/projects/626662
弊社メンバーは学習した内容を日々Qiitaの記事にアウトプットしております。
弊社にご興味のある方、まずは求人を見てみてください!
ご応募お待ちしておりますー!