RailsでToDoサービスを作ろう(第7回)〜Railsでのデバッグ(byebug)とおまけでbetter_errors〜
こんにちは、にゅ〜ぶるです。
こんにちは〜、ぶるこだよ〜💕
さて、第7回目!最終回だよ!前回は、こちら
今日は、「Railsでのデバッグ(byebug)とおまけでbetter_errors」について、進めていきたいと思います!
いつものようにGemfileに追加してbundle installですが、byebugデフォルトで入っているので、既に追加されていれば追加する必要はありません。
group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end
でも一つ覚えておいて欲しいのが、
「group :development do 〜 end」ブロックの間に追加する必要があるということ。
※:testもあるけど
えぇ〜普通に追加したら動かないの?
動かないわけじゃないんだけど、こうすることで、「development環境にのみ追加する」という意味なんだ。
デバッグは開発中の環境でしか動かさない(よね?笑)
だから、こうやって、本番運用時には極力影響がないようにするんだ。
そしてデバッグとして停止したい箇所に「byebug」と1行追加します。
これがブレイクポイントとなり、実行された際に、そこで一時停止します。
class TasksController < ApplicationController before_action:set_task, only: [:show, :edit, :update, :destroy] # GET /tasks # GET /tasks.json def index authorizeTask byebug @q = Task.ransack(params[:q]) @tasks = @q.result.page(params[:page]) end
この状態で、「http://localhost:3000/tasks」にアクセスしてみましょう。
「rails s」で起動したコンソールがこんな感じに変わると思います。
[4, 13] in /Users/newburu/project/rails/todo/app/controllers/tasks_controller.rb 4: # GET /tasks 5: # GET /tasks.json 6: def index 7: authorize Task 8: byebug => 9: @q = Task.ransack(params[:q]) 10: @tasks = @q.result.page(params[:page]) 11: end 12: 13: # GET /tasks/1 (byebug)
この状態で、byebugのコマンド等を打つことでデバッグが可能になります。
必要最低限としては、こんな感じでしょうか。
◆実行関連
「n」…ステップオーバー(next)
「s」…ステップイン(step)
「c」…実行継続(continue)
「fin」…ステップアウト(finish)
restart 最初から実行し直す
◆変数表示
「p 変数名」…変数の中身を表示
「変数名 = 値」…変数に代入
「disp 変数名」…変数をウォッチする
※上の実行関連の操作をするたびに変数の中身が表示されます。
わかんない…
そうだね…
デバッグは慣れだと思う。何度もやってみて自分なりでもイイから使い方を覚えて行こう!一つ一つ、デバッグ用に「p 変数」をソースに直書きするより断然早くデバッグできるようになるからね!
「byebug」はここまで。次は、「better_errors」だよ。
これも、Gemfileに追加してbundle install。
これもdevelopmentの場合にしか使わないから、「byebug」と同じところに追加しようか。
group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem'byebug', platforms: [:mri, :mingw, :x64_mingw] gem'better_errors' end
そして、テスト的に、異常終了させるために、次のようにしてみようか。
def index authorizeTask 1/0 @q = Task.ransack(params[:q]) @tasks = @q.result.page(params[:page]) end
この状態で、「http://localhost:3000/tasks」にアクセスしてみましょう。
エラー画面が変わったのがわかると思います。
好み的なのもあるかもだけどね笑
でも、適用前は、画面下部にirbのコンソールがあったんだけど、なくなっちゃうので、それも追加しておこうね。そのためのGemが「binding_of_caller」。追加方法はもう知ってるよね?!笑
わぁ〜追加されたぁ💕
以上!
これでRailsチュートリアルも終了になります。
ありがとうございましたぁ💕
最後まで読んでくれてありがとうございました!
Railsのチュートリアル的な感じで、
「Todoサービスを作る!」をテーマにお送りいたしました。
アジェンダは、こちら
質問等ありましたら、コメントなりTwitterなりで頂ければ対応させて頂きますので、遠慮なく利用くださいね。
ディスカッション
コメント一覧
まだ、コメントがありません