👏

【上級者ほど大切にしてる】もう怖くない 例外・エラー【図解あり】

2024/08/27に公開

はじめに

皆さんこんにちは。
今回はエラーについてご紹介します。

エラーはあまり見たくないですが、プログラミングにおいて避けようのないものです。エラーはコードを書いてる時にも出ますし、リリースしたシステムでも発生することがあります。エラーには分類があり、対処も目的を持って行う必要があります。

今回の内容は次のような方にオススメです。

こんな人にオススメ

  • エラーを体系的に理解したい
  • エラーの対応内容を知りたい

初めて学習する方にも分かるように、丁寧に解説していきます。
プログラミングに慣れてきた方も、是非一度目を通していただけると嬉しいです。

😋 エラーには大切な情報が詰まってます♪

エラーとの向き合い方

まずポイントをチェック

  • エラーは開発時には付いて回るもの
  • エラーが出た際は、読む、翻訳、検索、で内容を理解する

エラーはあまり見たくないものかもしれません。しかしエラーは開発時には付いて回るものです。経験に関わらず、誰しもいきなり完璧なコードを書けるわけもなく、必ずエラーにぶつかります。

エラーが発生した際は次のことを心がけてみましょう。
この対応をするだけでも状況の理解が深まります。

エラー発生時の対応

  • エラーメッセージを読む
  • エラーメッセージを翻訳する
  • エラーメッセージをそのまま検索する

😋 エラーが出ても立ち止まらないで、とりあえず調べてみましょう♪

エラーメッセージを読む

エラーメッセージは英語ですし赤文字で怖く見えますが、これはあなたに読んでほしいからです。

😋 エラーメッセージはプログラムからのラブレターという人もいるくらいです♪

まずは読んで知ってる単語がないかなど、何となくでも内容を確認してみましょう。

エラーメッセージを翻訳する

エラーメッセージを読んでも意味が分からない場合は、エラーメッセージを翻訳しましょう。
エラーメッセージをコピーしてGoogle翻訳などに貼り付けてみてください。いくらか理解しやすくなります。

😋 翻訳の時点でエラー原因がわかることもあります♪

エラーメッセージをそのまま検索する

翻訳しても原因がわからない場合は、エラーメッセージをそのまま検索しましょう。同じエラーで悩んでいる人は意外と世界中にいます。そして既に解決方法が発見されていますので、自分一人で悩まないでネットを頼りましょう。

検索結果に英語のサイトが含まれることがありますが、ぜひ翻訳を活用して読んでみてください。人口の割合としても日本語よりも英語の情報が多いので、翻訳に頼って英語情報も活用してください。

😋 英語のページの方が役立つこともあります♪

以上のように、エラーが出た際はエラーメッセージをしっかり調ベてみましょう。

例外(エラー)

まずポイントをチェック

  • 実行時の異常のことを例外やエラーという
  • 例外は大きく3種類に分類される

例外(もしくはエラー)とは、プログラムの実行中に発生した異常であり正常終了できない状態を指します。例外が発生するとプログラムは異常終了し、エラーメッセージが表示されます。

例外と一口に言っても、現象や発生原因によって3種類に分類されます。

例外の種類

  • 復旧不可能な例外
  • バグが原因で発生する例外
  • 避けようがない例外

😋 例外の種類によって対応方法も異なります♪

復旧不可能な例外

復旧不可能な例外とは、プログラム上で対処不可能なものです。

🍕 例えば、実行環境のメモリが枯渇するなどです。プログラム以外に原因がある場合は、プログラムの工夫では対処できません。

こちらについては、ほとんど発生することはないので知っておくだけで大丈夫です。

バグが原因で発生する例外

バグが原因で発生する例外とは、プログラマーのミスが原因であり、テスト工程で潰します。

🍕 例えば、バグの原因になりやすい処理は条件分岐や繰り返し処理などです。

複雑な処理はバグの原因になるので、しっかりとテストをして品質を確保します。

避けようがない例外

避けようがない例外とは、DBやファイルなど、外部とのやりとりで発生します。

🍕 例えば、作成したプログラムは正しくても参照先のファイルやDBに問題がある場合、例外が発生します。

外部に原因がある場合は避けようがないので、あらかじめ想定し例外ハンドリングを実装します。

😋 例外は現象や発生原因ごとに様々にあります♪

エラーメッセージ(スタックトレース)

まずポイントをチェック

  • プログラムに異常が発生した際に表示されるメッセージ
  • 何が発生したか、どこで発生したかの情報が含まれる

エラーメッセージとは、プログラムに異常が発生した際に表示されるメッセージです。
エラーメッセージは、バグの原因を特定するヒントになります。

エラーメッセージには、次の2つの情報が含まれています。

エラーメッセージの内容

  • 何が発生したか
  • どこで発生したか

何が発生したかについては、英文のメッセージで表示されます。
どこで発生したかについては、処理の呼び出し階層と該当ファイル名や行番号が表示されます。

どこで発生したかの情報を、スタックトレースとも呼びます。

😋 これらの情報をヒントにバグを修正します♪

例外ハンドリング(エラー対応)

まずポイントをチェック

  • 例外の発生に備えることやその処理のこと
  • 主な目的は、正常処理に復帰する、ユーザーに次の操作を促す、ログを残す、こと
  • やってはいけないことは、例外の握り潰し

例外ハンドリングとは、例外の発生に備えることやその処理のことです。例外を放置するとプログラムが異常終了してしまうので、例外ハンドリングはとても大切です。

例外ハンドリングの主な目的は、次の3つです。

例外ハンドリングの目的

  • 正常処理に復帰する
  • ユーザーに次の操作を促す
  • ログを残す

😋 例外ハンドリングは安定的な稼働に不可欠です♪

正常処理に復帰する

正常処理に復帰するとは、プログラムを停止させないことです。
発生した例外を無視すると、最終的にはプログラムが異常終了します。

異常終了してしまうと、ユーザーに大きな迷惑がかかります。

🍕 例えば、オンラインショッピングのシステムが停止してしまうと、その時間多くのユーザーが買い物をすることができなくなります。他のシステムも同様に、突然の停止は利用者や運営者にも損害となります。

😋 異常終了は絶対にさせないようにしましょう♪

ユーザーに次の操作を促す

ユーザーに次の操作を促すとは、処理が中断されたユーザーへのフォローのことです。
異常終了を避けたとしても、プログラム上は直前までの処理が中断されてるなど、ユーザーの目的が達成できていない可能性があります。

🍕 例えば、ショッピングのシステムが購入手続きの途中で停止して、トップページに戻ってしまうと、購入が完了できているか分かりません。その際ユーザーに「購入ができているのか、次何をすればいいのか」を伝えることで、ユーザーに安心感と確実な結果を提供できます。

😋 現状と対応を明示することで、安心してサービスを利用してもらいます♪

ログを残す

ログを残すとは、発生した例外の詳細をファイルなどに書き出すことです。
ログはシステムの運用者向けの情報ですので、プログラムの詳細情報を記述します。

🍕 例えば、ログにはバグの発生原因や発生した処理のスタックトレースを記述します。ログのフォーマットは現場によって様々ですが、早急にバグを修正できるよう十分な情報を記述します。

😋 運用者はログを確認し、不備のあるプログラムを修正します♪

例外の握り潰しは絶対にダメ

例外ハンドリングで一番やってはいけないことは、例外の握り潰しです。
これは例外の発生をユーザーにも伝えずログにも残さないで、正常処理に復帰するような対応です。

例外が発生したことが隠蔽されてしまい、正常に動作しているように見えてしまいます。
システムの内部では異常が発生しているにも関わらず、それをどこにも表現していないため、異常が起きたままになってしまいます。

😋 例外の握り潰しは危険なのでやめましょう♪

【補足】コンパイルエラーと例外の違い

まずポイントをチェック

  • コンパイルエラーはそもそも実行できない
  • コンパイルエラーは文法ミスが原因
  • エディタ上の赤波線はコンパイルエラー

コンパイルエラーはコードに文法上の不備があり、そもそも実行できない状態です。
例外は実行途中に異常が発生しているので、実行時エラーとも言います。

コンパイルエラーは文法ミスが原因ですので、コードをよく確認して修正します。
エディタによっては赤波線などで不備を強調表示してくれますので、そちらもヒントに修正します。

😋 コンパイルエラーの状態では実行できません♪

おわりに

皆さん、お疲れ様でした。
ここまでご覧いただき、ありがとうございました。

エラーが出るとガッカリした気分になりますが、プログラミングにはつきものなので、少しずつ慣れていきましょう。

😋 これからもプログラミング学習頑張りましょう♪

Discussion