はじめに
Ruby on Railsのアプリケーションのデバッグ方法を記載していきます!
Railsアプリケーションの開発中は、エラーが頻繁に起きますよね。でもエラーを解決していくことでRailsの仕組みの理解に繋がっていきます。
エラーは自身の成長をサポートする友達^^
エラー画面の見方
まずはエラー画面の見方から
- 1行目にはエラーの概要
- 2行目にはエラー発生の予測場所
- 3行目にはエラー内容の詳細
- 4行目にはコード内のエラー発生場所
ざっくりこんな感じです。自身のエラー画面と比べてみると分かりやすいと思います!
デバッグ
デバッグとは、プログラムの誤りを見つけて、手直しすることです。
実際にデバッグ作業を行うにはpry-rails
というGemを使用します!
実際にデバッグしてみましょう!
※投稿機能実装時、投稿する時にエラーが発生する場合を例とします。
まずはGemの確認から!以下のGemが導入されていることを確認してください
gem `pry-rails`
このpry-rails
を導入することでbinding.pry(バインディングプライ)を使用することができるようになります。
binding.pryという記述をソースコードの中にすると、binding.pryが存在する箇所でRailsの処理を一時停止し、その状態でコンソールを起動できます。便利!!
def create
binding.pry
Post.create(post_params)
end
例えば、上記のようにbinding.pryを使用するとローカルサーバー内でSENDボタンをクリックすると(SENDボタンが投稿する役割を持っている場合。)処理が停止され、ターミナルでコンソールが起動されます。
ターミナルを確認するとこんな感じ、
Started POST "/posts" for ::1 at 2022-05-30 17:31:23 +0900
Processing by PostsController#create as HTML
Parameters: {"authenticity_token"=>"7imvHaB3Z9fle2uEDeNY5mBJebreoWRs6Scs8zcEHuL5FHWhXS8eOpX8Db8i13SGuV1F8T9fTbgSCuBFkrOmDQ==", "post"=>{"image"=>"", "text"=>"aaa"}, "commit"=>"SEND"}
User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
↳ app/controllers/posts_controller.rb:50:in `move_to_index'
From: /Users/***/projects/post/app/controllers/posts_controller.rb @ line 14 PostsController#create:
13: def create
=> 14: binding.pry
15: Post.create(post_params)
16: end
[1] pry(#<PostsController>)>
[1] pry(#)> で入力待ちの状態になっています。
投稿時にformから送信したパラメーターを、paramsと入力して見てみましょう!
[1] pry(#<PostsController>)> params
=> <ActionController::Parameters {"authenticity_token"=>"7imvHaB3Z9fle2uEDeNY5mBJebreoWRs6Scs8zcEHuL5FHWhXS8eOpX8Db8i13SGuV1F8T9fTbgSCuBFkrOmDQ==", "post"=>{"image"=>"", "text"=>"aaa"}, "commit"=>"SEND", "controller"=>"posts", "action"=>"create"} permitted: false>
[2] pry(#<PostsController>)>
このように、配列のような形で出力できます。
仮に、formで送信しても保存ができない場合があり、「formでパラメーターが送れていない可能性がある」と仮説を立てた場合に、このデバッグ方法で検証できます。
最後にexitと入力してコンソールを終了しておきましょう。
まとめ
簡単ではありましたが以上がエラー画面の見方とデバッグの一例になります。
上記でも述べましたが、エラーを解決していくことでRailsの仕組みの理解に繋がっていきます。
「エラーは自身の成長をサポートする友達^^」
ではまた。
※プログラミングを始めてまだ月日も浅い初学者が投稿しています。誤字脱字等ありましたら申し訳ないです。何か間違いがあればご指摘いただけると助かります。