89
91

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pry-byebug を使ってRailsアプリをデバックする方法

Last updated at Posted at 2018-06-12

はじめに

特にプログラミングを始めた最初のうち、エラーの修正に手こずり、エラーの原因の特定が最初は難しく感じるかもしれません。そんな時のために、Rubyでは、pry-byebugと呼ばれるデバッガと呼ばれる、バグを修正するためのツール(gem)が用意されています。

github | pry-byebug

アンケートを見てもpry-byebugが一番人気そうですね。

また、現在(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に以下のように記述します。

Gemfile
gem 'pry-byebug', group: :development

追記してファイル保存したら、bundle installしてインストール完了です。

pry-byebugの使い方

基本はコード中にブレークポイントを書いて、デバッグモードにすることです。

デバッグをしたい箇所をブレークポイントとして、binding.pryを記述するだけです。Viewファイルでは<% binding.pry %>のように記述します。

たとえば、メッセージボードで、ユーザー情報をモデルに渡してDB保存するコントローラのcreateアクション(メソッド)で、パラメータを確認したいという場合。

app/controllers/users_controller.rb
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サーバを起動して、試しにユーザー登録をしてみます。

スクリーンショット 2018-06-12 11.49.56.png

全て入力した後、「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内に入って実行していくのがわかります。


以上です!

この記事を読んだ方に

この記事を読んで、誤っている箇所をみつけたり、追記した方がいい内容などありましたら、編集リクエストやコメント欄で指摘していただけると助かります。

参考

89
91
0

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
89
91

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?