初心者必見。プログラミングでのエラー解決のコツ。
プログラミング学習につきまとうエラー
プログラミング学習には、エラーってつきまといますよね。私もプログラミングを学び始めた時はなんで動かないかわからずに何時間も時間を無駄にしてしまったなんてことはよくありました。ただ、そんな中で何回もエラーにぶちあたり、エラーを解消してということを繰り返しているとエラーが発生した場合にはどういった手順で解消していけば良いのかということがわかってきました。
今回は自身の経験を元に、エラーが発生した場合にどういうステップを踏んでエラーを解決していけばよいのかというのをまとめていきます。
①エラーメッセージを読む
エラーの種類を見極める
まず、第一にこれがものすごく大事で初心者を抜け出すための最初の関門です。プログラミングを始めたての頃というのは、どうしても自分の思い通りに動くことを期待して、「エラーか正常に動作したか」という黒か白かという二つの値でしか判断ができません。
そのため、初心者の方はよく「エラーがでたんですけど、見てもらえませんか?」のような聞き方をしてきます。この「エラー」というものには種類があり、どういったエラーが出たかによって対処の仕方が大きく変わってきます。ここでエラー解決の脱初心者をするためには、エラーをエラーというまるっとした単位でとらえずに細かくなんというエラーなのかというのを認識する必要があります。
どんな言語でもエラーには種類があり、その中でもSyntaxErrorなのか、NullPointExceptionなのか、RecordeInvalidなのかというのはエラーが発生した時に確実に認識する必要があります。これは別に難しいことではなく、このエラーというのは、エラーメッセージとして画面に表示されるためそれを読めば必ず理解できます。
エラーメッセージというのは、開発者がデバックしやすいようにエラーの原因を突き止めるために出力されます。なので、エラーメッセージを読むというのはデバックの第一歩です。
エラーの箇所を見極める
上にも画像を貼り付けましたが、RailsなどのWebアプリケーションフレームワークを使用していてエラーが発生した場合にはと一緒にスタックトレースというログが一緒に出力されます。ここにはどのファイルの何行目でエラーになっているかというのがこと細かに出力されるのでこういった出力を元にどこでエラーになっているのかというのをつきとめます。
ここでエラーの箇所を突き止めているかそうでないかで、のちのデバッガーでの確認などにもはねるので、「RecordNotFoundが出た」ではなく「app/controllers/users_controller.rbの68行目でRecordNotFoundが出た」と認識できるようになりましょう。
人に聞く場合もどこでエラーが出ているのかをしっかりと伝えられた方が、相手に今の状況をわかってもらいやすいです。
②打ち間違いがないか確認する
これは「そんなバカな!」って思われる方も多いかもしれませんが、意外と多いです。
「なんでここの変数がnullになるんだろう??」と数時間悩んだあげく、スペルミスで意図した変数が使えていないなんてことは往々にしてあります。タイポ侮るなかれです。ここにあまり時間を駆け過ぎるのもよくないのですが、エラーの原因がわからない時は今一度頭を冷やして自分の書いたコード、エラーの出ている箇所のコードを読み直しましょう。
③周辺のコードやドキュメントを再度確認する
これは何回もエラーのドツボにはまり、何時間もの時間を無駄に消費した経験から言えることですが、周辺のコードの動作や使用しているライブラリの仕組みなどを理解していないと無駄なトライアンドエラーを繰り返してただただ時間だけが過ぎていきます。
こういうドツボにハマった時というのは、その時にある知識だけで無理やり進めようとしているので正しい方向に進まずスタックしてしまいます。エラーが出て→コード直して→実行→エラー→コード修正→エラーという感じでなんども同じエラーに突き当たった場合はアプローチを変えるサインです。
ライブラリのドキュメントをしっかり読み込む、わかりやすく解説しているブログを読んで理解するなどして今自分が実装しようとしているところでわからないところ・あやふやなところを潰していきます。
これをやってると次第に仕組みが掴めてきて、うまく作業が進み始めるということがまあまあよくあります。新しい分野や自分が不慣れな分野の実装を行う際は、付け焼き刃で実装しようとせずにちゃんと全体像と構造を理解してから実装を行うようにしましょう。トライには無駄なトライと良いトライがあるので、なんども同じエラーを表示させつづけるようなトライはすぐにやめて、コードの理解に時間を使いましょう。
その方がコードの理解も深まり、結果的に短い時間で実装を終えることができます。
④デバックツールを活用する
Rubyならbyebugなどのツール、Javascriptならブラウザのデベロッパーツールなど様々なツールが提供されていますが、プログラミングの学び初めは積極的にこれらのデバッグツールを使った方がエラーの解消にはよいでしょう。RubyMineやPHPStormなどIDEを使うとGUIベースでデバッグをできたりするので、それを使用するのも検討してもよいかもしれません。
最初のうちは、コードを読むだけではデータのながれが読めないことも多いので、実際にステップ実行をしながら適宜変数にどんな値が格納されているのかということを確認しながら実装するとデータ構造なども理解できて良い勉強になります。
初心者のうちは、想定通りの値が変数に格納されないなんてことは日常茶飯事なので、デバッグツールとにらめっこして、デバッグしながらその認識とのずれを修正してプログラミングの質を高めていきましょう。
⑤エラーメッセージでググる
これは割とエラーメッセージを確認した後にやっても良いのですが、あまりこれに依存するとエラーメッセージを読まずに、検索でヒットしたコードをコピペみたいな習慣がついて、いつまでたってもエラーを自己解決する能力がつかないなんてことになるのは困ります。とはいえ、便利なのでつい使ってしまうんですけどw
検索に出てこない課題を解決するのがエンジニアの役目でもあるのでこれにあまり頼り過ぎてはいけないという意識は常に持っていたいですね。また、プログラミングを始めたうちはここを変に頑張りすぎてプログラミングが嫌いになるというのも本末転倒なので、意識はもちつつ必要あれば検索するという態度で向かうのがベストかもしれませんね。
まとめ
以上、プログラミングでのエラー解決のコツをまとめましたが、いかがでしょうか?プログラミング初めてまもない人は①番のエラーメッセージを読むというところだけは必ず守りましょう。エラーがでたら「ログを見る」「エラーメッセージを見る」基本中の基本です。これから素晴らしいエンジニアになるみなさんにはぜひとも身につけておいてもらいたい習慣の一つが「エラーメッセージを読む」ということです。英語で読むの辛かったりするかもしれませんが、なんどもにらめっこしていると「あ、こういうことか」と必ずハラオチする日が来ます。
他にも色々とエラー解決のコツを書きましたが、他のはエラーメッセージを読む習慣がついてきてから追々身につけていきましょう。初心者のうちにこれらの習慣が身についているとその後の成長が早いです。これらができるだけで他の初心者からは一歩も二歩もリードできるのでここに書いたことはおさえておくと良いでしょう。