コードを書いたけど、なんだかうまくいかない場合の解決方法について
バグが発生した場合のデバッグ方法について、ちょっとまとめてみたいと思います。
- エラーメッセージが表示されている場合
- エラーメッセージが表示されないけどうまくいかない場合
- うまくいかない解決方法を教えてもらいたい場合
エラーメッセージが表示されている場合
エラーメッセージをよくみましょう
ここにはエラーの直接的な原因が書かれています。
rubyの場合
/tmp/sample.rb:6:in `<main>': undefined method `length' for nil:NilClass (NoMethodError)
/tmp/sample.rbを実行した時に発生したエラーです。
このエラーはどういう意味でしょう...?
/tmp/sample.rb:6
これはエラーが発生した行数です。
ファイルの6行目でエラーが発生したことがわかります。
これがわかるだけでもかなり大きなヒントですね。
` undefined method `length' for nil:NilClass (NoMethodError)`
次にこのメッセージですが...
undefined method length
なので、lengthメソッドが呼べないことがわかります。
さらに for nil:NilClass
とあるので、nilクラスからlengthメソッドを呼び出そうとしてエラーになったことがわかりますね。
そのため、本来値が入るはずだった変数に nil が入ってしまっているのが問題だということがわかります。
ここまでわかると、この変数に値を入れるところおかしいのか、とか変数名をタイポしてしまった、などを考えることができるようになるので原因がだいぶ絞り込めてくることがわかるかなーと思います。
エラーメッセージを読んでもさっぱりわからない場合
エラーメッセージをみてもチンプンカンプンのこともあります。
こういう場合は素直にエラーメッセージで検索してみましょう。
エラーメッセージが表示されないけどうまくいかない場合
これはなかなか厄介です。
こういう場合はどこに問題があるかを切り分けることができるようになるのが肝心です。
AページからBページへ値を渡すのがうまくいかないとします。
この場合は
- Aページで入力した値がきちんとControllerで取得できているか
- ControllerでDBに登録が正常にされているか
- Viewの表示が正しく記述されているか
こういった順番で調べていくと問題の切り分けができてくるとので調べるポイントが絞れて来ます。
うまくいかない解決方法を教えてもらいたい場合
これはちょっと別軸で、うまくいかないので教えてもらいたい場合の質問の仕方のポイントみたいなものになります。
エラーメッセージを正しく伝える
エラーメッセージが表示されている場合は、エラーメッセージをそのまま教えてください。
文字列をそのままコピペしてもらえるのが助かります。なぜなら...そのままコピペで検索できるから🙄
自分でどこまで調べたかを伝える
質問する前に自分で調べることもあるかと思います。
どういったことをして、どういう調査をしたのかを教えてもらえるとパターンがある程度絞り込める可能性があるので、解決までの時間短縮になると思います。
また、今後の調査方法のアドバイスをすることができるかと思います。
ソースコードを共有する
調査するにはソースコードをみないとわからない場面が多いので、実際のコードを共有をするのが一番早いと思います。
この場合一部だけでなく、いったんプロジェクト全てのコードを共有する方が良いです。
例えばRailsアプリケーションの場合、configの設定が原因で意図した挙動になってくれない可能性があるのでエラーがおきている場所のコードだけでなく、全部見せてもらえると嬉しいですね 😄