エラー解消のコツ

エラー解消のコツ

このページでは、学習におけるエラー解消の考え方プログラミングの取り組み方を解説しています。
困ったときはこのページに立ち戻って、ぜひ繰り返し読んで自分の力にしてください!
※(注)「Springの概要とプロジェクト作成」以降の単元に進んだ方向けの内容が多くなっています。
「★Spring」と書かれている内容はSpringBoot以降の内容になりますので、未学習の場合は飛ばして読み進めてください。

エラーメッセージを読み解く

①エラーメッセージの内容から推測する

・英単語が分からなければ1単語ずつ検索したり翻訳ツールを使用して、まずは意味を読み取る。 …翻訳ツール例(Google翻訳DeepL翻訳
Exceptionの内容を検索する
下図の場合なら、一番最初の「java.lang.NullPointerException」の意味を調べる。
また、:に続く英文(Cannot load from byte/boolean array because “array1” is null)が具体的なエラー内容のため、翻訳して意味を読み取る。

また、何に起因するエラーなのか(テンプレートファイル?SQL?…)を判別するだけでも、解決の近道になります。


・「ERROR」や「Caused by:」の直後のExceptionやメッセージを中心に調査(★Spring)
エラーの主原因が書いてある可能性が高いポイントです。

コンソール上の赤字「ERROR」の付近を確認。
(コンソール上をクリックしてからCtrl+Fを押すと、コンソール内の検索が可能です。)


<よくあるエラー・推測の仕方の例>


コンパイルエラー
コード上で赤い並線×マークが出る場合、プログラムとしてコンパイルする前に判明している記述上のエラーです。
多くは構文エラー(Javaの書き方のルール)を守っていない場合にEclipseが指摘してくれます。
 ↓
赤い並線または×マークに マウスカーソルを当てると、エラーの内容を表示してくれます。(またはCtrl+, でエラー箇所に飛ぶことも可能)
(例1)
下図の場合、閉じかっこ”)”が足りないことによるエラーです。


(例2)
閉じブロック”}”が足りないエラーです。
下図の場合、赤い枠のif文について足りていませんが、Classの閉じブロック”}”の部分にエラー表示が出ています。
これは前から順に{}ペアを見つけていくと一番外側のブロックのペアが見つからず、この位置に表示されます。
→Eclipseではブロックの隣にカーソルを置くと、ペアのブロック同士に枠を表示して目立たせてくれます。これを利用して、想定外のブロック同士がペアになっていないか確認しましょう。


テンプレート処理に関するエラー(★Spring)
「An error happened during template parsing・・」といった記述がある場合、テンプレート(Thymeleafの処理)に関するエラーです。原因のHTMLファイル名も示されています。
※テンプレート上:Thymeleafとしての記述エラー、またはThymeleafへ渡した変数の中身とThymeleaf上の記述が噛み合わないことによるエラー。(例:idというフィールドを持たないobjectに対して*{id} と記述している等)

テンプレートのエラーの場合、ページ内検索(Ctrl+F)で”line”と入力すると、原因の記述がある行を確認できます。
:この例で言うと38行目

②エラー箇所を確認する。

エラーメッセージと合わせて「原因ファイル原因の記述箇所(行)」が表示されていることがほとんどです。
その行、もしくはその1行前などを徹底的に確認しましょう。
SQLに関するエラーの場合、テーブルのカラムやデータも合わせて確認すると良いでしょう。

また、エラーが出ている行があれば、反対に言うとその前の行までの処理は基本的に通っている=エラーは出ていないことも認識しておきましょう。

③エラーメッセージを見ても何も分からなければ、エラー文をコピーして検索

同じエラーに行き当たった人のQ&Aなどが参考になったりします。
Java、Springでは英語圏の方が比較的記事が多いので、英語や英単語のみで検索するのがおすすめです。
英語の記事でもページ翻訳をかければおおよその内容や方針のヒントは読み取れるはずです。

(例)

↓エラー文言をコピーして検索

エラーへの具体的な対処のポイント

・とにかく手を動かすこと!トライアンドエラーを繰り返す。
…頭で考えすぎても進まないので、手を動かして検証する。ただし、既に完成している箇所は理由もなく変えないように。
仮説と検証を繰り返します。 探偵になったつもりで推理!
「もしここがこうなら、この可能性はないな…。」
「ここを隠したらエラーが変わったから、隠した場所に原因があるはず!」
「ここを変えたらエラー/変な挙動になったから、この記述に関わる部分に問題がある」

・基本的に対照実験する。
・複数のエラーや問題点が見つかった時も、まとめて考えずに1つ1つ対応していく。

「1か所だけを変える」→「実行する」行動を基本にする
…複数箇所を変えすぎると、どこの影響か分からなくなるため。また、違うエラーを誘発する可能性がある。

・部分的にコメントアウトして隠してみる(Ctrl+/)
・途中経過をSystem.out.printで出力してみる

→おかしなところがないか。想定と違う値が取れていたりしないか。そもそも値が取得できていない可能性も?
→記述全体の中で、どの段階でエラーが起きているのか?を突き止める

・ネットで検索した人のコードや、問題なく動く記述と見比べて観察する。

・自分の記述を信じすぎない。
人間は間違えるものです。うまくいかない以上、必ず何か間違えている、または見逃しています。
コツとして、「間違えているはず」という疑いの目で端から端まで見直すと、見つけるのが早くなります。

・一連の処理の上流から直す。
リンクを押してページ遷移して・・と進んでいくような処理の場合、手前のページや処理から確認する。

!)解消したエラーはメモに残すようにしましょう。
→類似したエラーはすぐに解決できるように。
忘れやすい人、苦手意識が強い人ほど、リスト化しましょう!

参考サイト:
エラーメッセージの読み方と対処,検索や質問の原則

困ったとき

~うまく動かない、思ったような挙動にならないとき、何をしたらいいか分からなくなったとき~

とにかく状況・情報を整理しましょう。

・今分かっていることを書き出す(使えそうな知識、得られた結果から分かる事実)

・分からない部分、疑問点を書き出す
→疑問点を整理して検索する。ひとつひとつ解消していく。

・問題を分割する。問題点をまとめて考えて解決しようとせずに、1つ1つクリアしていく。

・今書いてあるコードを日本語で説明を書き出してみる。
→日本語で説明した中で、辻褄が合わないところはないか?

・自分が書いた記述はどんな意味なのか考える。
→おかしなところ、意味が繋がらないところはないか?

具体的にやることは、エラーの対処と大きく変わりません。

コーディングの仕方、考え方の順序

…特に「CRUD」の単元以降で、自分で機能を作っていく段階で参考にしてください!

1. 最終の完成形の機能(作りたいもの)を確認、明らかにする。
頭の中で考えると混乱するなら、文字や図にして整理しましょう。

2.そのために使えそうな記述(メソッド、関数)に検討を付ける。
→思いつかなければマニュアルを見返す、調べる(インプット不足)

3.使用したいメソッドや関数に対して、実現するために必要な値は何か?を考える。

4.その値はどこから取り出せるか、取得できるか?を考える。
…View・Controller(メソッド)の一連の処理から値を持ち回りすることも視野に入れる。

参考サイト:
プログラムがうまく動かない――そんな時に確認して欲しい方法とマインドセット
エンジニア未経験者が陥る「分からないところが分からない」からの脱却思考術

プログラミングが上達する人・しない人 【現役エンジニアの実体験】
最高のプログラマーになるため必要な15の特性とは? – GIGAZINE

タイトルとURLをコピーしました