手強いエラーの紐解き方
みなさんは仕事や趣味でコードを書いている時に、予想外のところでエラーが発生して、調べてもなかなか解決出来なかったり、長時間エラーと向き合った経験はあるでしょうか。
おそらくある程度の期間コードを書いたことがあるエンジニアなら、誰もが経験していることだと思います。
そこで今回は、私がエラーにぶつかった時に行っているアプローチや、考えていることを整理してみました。
エラーに悩む(特に経験の浅い)エンジニアにとって、何かしらヒントになればうれしいです。
1. 観察する
エラーが発生した時に、まずは事象をしっかり観察することはとても大事です。エラーメッセージをよく見たら解決策が書いてあるケースは非常に多いです。
エラーメッセージやエラーを調べて出てきた記事を、とにかく読み飛ばさずに丁寧に何度も読むというのは、初歩的ですが効果的なアプローチです。
エラーメッセージを見て調べてみてもすぐに解決できないケースもあります。そういった場合にも、やはり細かく観察した方が良いです。
「どこを変えたらエラーになるか」「ここの実装が怪しそう」「問題なく動いているコードとの違いはどこか」等、色々な視点からエラーにアプローチして分析していくとエラーは解決に近づきます。
この「色々な視点」というのが非常に重要なポイントで、私の経験上、他の人があまり疑わない視点からアプローチできるエンジニアはエラーの解決も上手です。
こういった視点は経験と共に培われていく側面があったり、時には他のエンジニアの視点が必要になる場面もありますが、自らが良い視点を持ってるというのは強力な武器になるので、意識的に伸ばしていくべきスキルだと思います。
2. 範囲を絞る
エラーの原因がはっきり分からない場合は、範囲を絞っていくアプローチが有効です。
1つ具体例を挙げてみます。Aという画面からBという画面に遷移する際にエラーが発生していたとします。
エラーメッセージを見て解決できれば良いのですが、残念ながら原因箇所の特定がすぐに出来なかったとします。
この時に行うアプローチとして有効なのは、「エラーの原因がAの画面にあるのかBの画面にあるのか(あるいはそのどちらでもないのか)」を判断することです。
例えば、このように遷移先の画面をCに変えてみてエラーが発生しなくなれば、「おそらくBという画面に何らかの原因がある可能性が高い」という事が分かります。
特定の画面に原因があることが分かれば、その画面の中で同じことを繰り返して、さらに原因として疑うべき場所を絞り込んでいきます。
あるいは、下記の様に「Aの画面もBの画面も変えてみたけどエラーが解消されなかった」ということもあると思います。こういう時は画面自体というよりは、画面遷移をさせるロジックであったりより大きな部分にエラーの原因が潜んでいる可能性を疑うことが出来ます。
この様に部分的に値を変更して動作を観察していくと、エラーの原因として疑うべき範囲を絞り込んでいくことが出来て、一歩ずつ前進します。
3. 最初に戻ってみる
エラーに長時間向き合っていると、頭が疲れてきたりエラーを解消する為に色々設定を変更した結果、どのような状態になっているかよく分からなくなることがあります。
こういう状態に陥った時は、思い切ってエラーが起きる前のステップまで戻ってみるのも1つの方法です。(少し時間を置いてみるのも良いかもしれません。)
イメージとしては、複雑に絡まった糸を一度解いて最初から作り直してみる様な感じです。
私は環境構築を行なった際にエラーが大量に発生したことがあります。慣れない作業と解決できないエラーでかなり苦しみましたが、結果的にはこのアプローチで無事解決出来ました。特に長期間悩んでいる場合にはこの方法はオススメです。
また、この様なアプローチを取りやすくする為にも、細かくコミットしたり作業をやり直しやすいセーブポイントをなるべく多く作っておくのも大事です。
「ここまでは問題なく実装できている」というポイントを作っておくことは、上述したエラーの「範囲を絞る」ことにも繋がります。
4. 検索ワードを工夫する
インターネットは沢山のエンジニアたちが残してくれた知見の宝庫です。ただしそこに正しくアクセス出来なければ問題を解決することは出来ません。
個人的な意見ですが、ChatGPTをはじめとしたAIを活用する時代になってもそれは変わらないと思います。むしろAIの登場によってますます「正しく問いを立てる力」は重要になっていると思っています。
エラー解決に際しても、より効果的に欲しい情報に辿り着くアプローチをするべきです。検索ワードを少し工夫するだけでも手に入る情報は大きく変わります。
特にエラーの解消でよく使われる英単語を知っておくと、いざという時役に立ちます。
5. 粘り強く取り組む
急に根性論みたいな感じになりますが、これまでのエンジニアとしての経験を踏まえると、エラーに粘り強く向き合うのは重要だなと思います。
諦めずに色々なアプローチを試したり、脳みそをフル回転させて考えるからこそ解決する問題もあります。また、そういった創意工夫の中にエンジニアとしての成長もあるのだと思います。
難しいエラーにぶつかった場合は、自分の殻を破るチャンスと捉えてみると少し気持ちが楽になるかもしれません。結果的に上手く解決出来なかったとしても、無駄な経験にはなりません。
エラーの解決に限らずですが、すぐに解決策が浮かばなかったり、明確な正解が無い中で判断が必要な問題にぶつかることは度々あります。
そういった場合にも、やはり粘り強く考えて脳みそに汗をかく意識は大事になると思います。
さいごに
私がエラーを解決する時に考えていることを偉そうに書いてみましたが、私もエラーに悩むことはよくありますし、その度に「もっと上手に解消できたらな」と思うことがあります。それでも自力でエラーを解消できた時は達成感がありますし、自信にもなります。
これを読んでくださった方にとって、何か1つでもヒントになる内容があればとてもうれしいです。最後まで読んでくださりありがとうございます。