公開日

pry-byebug を使ってRailsアプリをステップ実行する

(image)pry-byebug を使ってRailsアプリをステップ実行する

Railsアプリケーションのデバッグはどのように行っていますか? 愚直にプリントデバッグ? でも複雑なロジック内だと「このロジックのこの処理のここでピンポイントで止めたい!」という場合もありますよね。

そんなときに便利なのがpry-byebug. Githubのリンクは下記。

https://github.com/deivid-rodriguez/pry-byebug

pry-byebugを使えばピンポイントで処理を止めてステップ実行が可能になります。

Requirement

  • Ruby2以上

pry-byebugで使われているByebugはRuby2前提のデバッガーなので2以上が必要になってきます。

導入

下記をGemfileに追加してbundle install.

gem 'pry-byebug', group: :development

ユースケース

例えばこんなコントローラーのロジックがあったとする。

class PostsController < ApplicationController
  # ...
  def create
    @post = Post.new(post_params)
    result = @post.complicated_logic
    #
    # ... long logic ...
    #
  end
end

resultの中身を見たい場合はこうすればよい。

class PostsController < ApplicationController
  # ...
  def create
    @post = Post.new(post_params)
    result = @post.complicated_logic
    binding.pry
    #
    # ... long logic ...
    #
  end
end

するとbinding.pryを通る処理をした際に、下記のように表示されます。

From: app/controllers/posts_controller.rb @ line 31 PostsController#create:

   26: def create
   27:   @post = Post.new(post_params)
   28:   result = @post.complicated_logic
   29:   binding.pry
   30:   # ... long logic ...
=> 31:   respond_to do |format|

[1] pry(#&LTPostsController>)>

この状態で下記のように変数をみたりできます。

[1] pry(#&LTPostsController>)> result
=> true
[2] pry(#&LTPostsController>)> post_params
=> {"title"=>"a", "category"=>"b", "content"=>"c"}

その他のコマンド

ステップ実行に使えるコマンドは下記4つ。

  1. step
  2. next
  3. finish
  4. continue

次の行を実行したければstep、Pryセッションから抜けたい場合はcontinueを打てばよい。

コマンドエイリアス

それぞれのコマンドをいちいち打つのがダルいので、プロジェクトルートに.pryrcを置きに下記のように書くとエイリアスを設定できるようだ。

if defined?(PryByebug)
  Pry.commands.alias_command 'c', 'continue'
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
end

本エントリで紹介したpry-byebugなどのデバッグgemを駆使してRailsアプリのデバッグをもっと効率的にしましょう!

Happy Debugging Life!