2 flat logo on transparent 256
2018-06-12

Ruby On Railsのデバッグツール byebugの紹介

Error2131212

Ruby On Railsでアプリケーションを作成している際にエラーは必ず発生すると思います。

今回はRuby On Railsのデバックgemのbyebugを紹介します。 byebugを利用すれば、実行したプログラムを途中で停止できるので、エラーの切り分けがスムーズになります。

Java を利用されている方ならブレイクポイントを設定できるようにするような感じです。

Gemをインストール

byebugはgemなので、gemファイルに追記してインストールするか以下のコマンドを実行して、byebugをインストールして下さい。

gem install byebug

Controllerで利用する

ControllerやModelでbyebugを利用する際は、対象にbyebugを記載して、プログラムを起動します。

以下はWeb上のフォームから受けたデータの処理をCreateするアクションです。4行目にbyebugを追記しているので、 ここでプログラムが一時停止されます。

class DashboardsController < ApplicationController
  def create
    @article = Article.new(article_params)
    byebug
    if @article.save
      redirect_to dashboards_path
    else
      render 'new'
    end
  end
end

この状態で、ターミナルを開いてみます。 そうすると以下の通り、プログラムが途中で停止されています。

22:   def create
   23:     @article = Article.new(article_params)
   24:     byebug
=> 25:     if @article.save
   26:       redirect_to dashboards_path
   27:     else
   28:       flash[:notice] = "カテゴリーが選択されてません"
   29:       render 'new'

ここで、23行目のデータを閲覧します。 23行目のインスタンス変数@article を入力すると 値が表示されています。

  22:   def create
   23:     @article = Article.new(article_params)
   24:     byebug
=> 25:     if @article.save
   26:       redirect_to dashboards_path
   27:     else
   28:       flash[:notice] = "カテゴリーが選択されてません"
   29:       render 'new'
(byebug) @article
#<Article id: nil,title: "テスト", content: "・テストです", publish_time: "2018-06-12 06:38:00", created_at: nil, updated_at: nil, status: 1, category_id: nil, eyecatch: "", slug: nil>

nextを入力すると、次のプログラムが実行されます。 今回はインサート処理が走ります。

(byebug) next
- Gracefully stopping, waiting for requests to finish
   (0.9ms)  BEGIN
  SQL (0.8ms)  INSERT INTO `articles` (`title`, `content`, `status`, `eyecatch`, `description`, `publish_time`, `created_at`, `updated_at`) VALUES ('dasdadadadas', 'adsadda', 0, '', 'dadasd', '2018-06-12 06:45:00', '2018-06-12 06:46:06', '2018-06-12 06:46:06')
  SQL (0.7ms)  INSERT INTO `categories_articles` (`category_id`, `article_id`, `created_at`, `updated_at`) VALUES (3, 78, '2018-06-12 06:46:06', '2018-06-12 06:46:06')
   (2.9ms)  COMMIT

   21:
   22:   def create
   23:     @article = Article.new(article_params)
   24:    byebug
   25:     if @article.save
=> 26:       redirect_to dashboards_path
   27:     else
   28:       flash[:notice] = "カテゴリーが選択されてません"
   29:       render 'new'
   30:     end

なお、cを押すとbyebugが無視されプログラムの実行が開始されます。

ページで利用する

ページで利用する場合は-byebugと記載する必要があります。

Create.html.slim

= simple_form_for(@article, url: url) do |f|
  - byebug

  = f.input :publish_time
  span = t('.text_count')
  span id="title_count"
  = f.input :title, maxlength:'60'
  = f.input :eyecatch
  span = t('.text_count')
    6: = simple_form_for(@article, url: url) do |f|
    7:   - byebug
=>  8:   = f.input :publish_time
    9:   span = t('.text_count')
   10:   span id="title_count"
   11:   = f.input :title, maxlength:'60'
   12:   = f.input :eyecatch

以上になります。

実際の使い所としては、以下の記事のようにNameエラーになった場合の調査などに利用されます

NameError | Ruby On Railsでよく発生するエラー2

Ruby On Railsでよく発生するエラー1

Ruby On RailsでSassを活用し、CSS作成を高速・効率化する

エラー関係の記事一覧

前の記事
次の記事
人気記事
カテゴリーから記事を探す