2018-06-12
2019-04-04
Ruby on Railsのデバッグツール byebugの紹介

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エラーになった場合の調査などに利用されます
Carrierwave+S3で複数画像をアップロードする|Ruby on Rails5
あなたにお勧めの記事
前の記事
2018/06/11
次の記事
2018/06/13