はじめに
特にプログラミングを始めた最初のうち、エラーの修正に手こずり、エラーの原因の特定が最初は難しく感じるかもしれません。そんな時のために、Rubyでは、pry-byebug
と呼ばれるデバッガと呼ばれる、バグを修正するためのツール(gem
)が用意されています。
アンケートを見てもpry-byebug
が一番人気そうですね。
Ruby/Railsプログラマのみなさんにアンケートです。RubyやRailsでデバッグするときは、どのデバッガを使っていますか?(最もよく使うものを選択)
— Junichi Ito (伊藤淳一) (@jnchito) January 12, 2017
選択肢になければリプライで回答をお願いします~。
また、現在(2018年6月12日時点)、既に、1900万はDLされてますね。
ということで、今日は、pry-byebug
の導入法と基本的な使い方を紹介します。
環境
この記事では以下の環境(2018年6月12日時点)で動作確認できました。
- Ruby: 2.4.1
- Rails: 5.0.7
- pry-byebug: 3.6.0
pry-byebugのインストール方法
RailsのプロジェクトのGemfile
に以下のように記述します。
gem 'pry-byebug', group: :development
追記してファイル保存したら、bundle install
してインストール完了です。
pry-byebugの使い方
基本はコード中にブレークポイントを書いて、デバッグモードにすることです。
デバッグをしたい箇所をブレークポイントとして、binding.pry
を記述するだけです。View
ファイルでは<% binding.pry %>
のように記述します。
たとえば、メッセージボードで、ユーザー情報をモデルに渡してDB保存するコントローラのcreate
アクション(メソッド)で、パラメータを確認したいという場合。
def create
@user = User.new(user_params)
binding.pry
if @user.save
flash[:success] = 'ユーザーを登録しました'
redirect_to @user
else
flash[:danger] = 'ユーザーを登録しました'
render :new
end
end
4行目あたりにbinding.pry
があるのがわかりますか?では、Railsサーバを起動して、試しにユーザー登録をしてみます。
全て入力した後、「Sign up」を、クリックしたらcreate
アクションに入るので、上記のbinding.pry
のブレークポイントで処理が止まります。
From: /home/ec2-user/environment/microposts/app/controllers/users_controller.rb @ line 19 UsersController#create:
14: def create
15: @user = User.new(user_params)
16:
17: binding.pry
18:
=> 19: if @user.save
20: flash[:success] = 'ユーザーを登録しました'
21: redirect_to @user
22: else
23: flash[:danger] = 'ユーザーを登録しました'
24: render :new
25: end
26: end
[1] pry(#<UsersController>)> @user
=> #<User:0x007f76c6026360 id: nil, name: "namae", email: "test@gmail.com", password_digest: "$2a$10$OWIqmjdKx/obwOquxDZLBenUmsu3o2KNT9Vscl2mLqU4ZP/WjTlNG", created_at: nil, updated_at: nil>
試しに@user
と入力したら、それまでに入力した値などが出力されています。
[2] pry(#<UsersController>)> user_params
=> <ActionController::Parameters {"name"=>"namae", "email"=>"test@gmail.com", "password"=>"pass", "password_confirmation"=>"pass"} permitted: true>
[3] pry(#<UsersController>)> new
=> #<User:0x007f76c5bacc80 id: nil, name: nil, email: nil, password_digest: nil, created_at: nil, updated_at: nil>
[4] pry(#<UsersController>)> User
=> User(id: integer, name: string, email: string, password_digest: string, created_at: datetime, updated_at: datetime)
他も試しに入力して見ましょう。
-
user_params
メソッド:このメソッドは出力制限されてないものだけ出すメソッドで、見事フィルタリングされて出力されています -
new
メソッド:モデルに入力したテーブル構造がnil
で出力されました -
User
モデル:モデルに入力したテーブル構造が出力されました
こんな感じでデバックするのか、とわかるかと思います。
pry-byedebugで使えるコマンド
デバック(pry-byedebug
)に使えるコマンドを4つ紹介します。
コマンド | 機能 |
---|---|
next | 次の行(コマンド)を実行 |
step | 次の行かメソッド内に入る |
continue ( Ctrl + D) | プログラムの実行をcontinueしてpryを終了する |
finish | 現在のフレームが終わるまで実行 |
$ | 現在のソースを表示 |
仮に、View
側に戻ってエラーがでるような内容をフォームに入力をした場合(空入力など)、そんな時は、コマンドのnext
で進めていくと、if文中のelse
内に入って実行していくのがわかります。
以上です!
この記事を読んだ方に
この記事を読んで、誤っている箇所をみつけたり、追記した方がいい内容などありましたら、編集リクエストやコメント欄で指摘していただけると助かります。
参考
- https://github.com/deivid-rodriguez/pry-byebug
- https://www.sejuku.net/blog/21559
- https://k0kubun.hatenablog.com/entry/2015/11/07/000413
- https://rubygems.org/gems/pry-byebug/versions/3.4.0
- 【Rails】pryを使ってデバックする
- Rails デバッグの為にpryを使いこなす
- https://qiita.com/AknYk416/items/6f0bec58712edaf4940e
- https://blog.toshimaru.net/rails-pry-byebug/
- https://qiita.com/k0kubun/items/b118e9ccaef8707c4d9f