例外処理とは
例外処理とは、想定内のエラー(例外)が起きた時に、その内容に応じて実行される処理のことです。
なぜ、例外処理が必要なのかを説明すると、もしプログラムに適切な例外処理が実装されていない場合、プログラム実行中にエラーが発生してしまうと、意図しない構造のデータが保存されたり、異常終了してしまう事態を招きます。また、その時に発生したエラーを調査するのに時間がかかってしまいます。
ですが、適切な例外処理を実装していれば、データを整合性を保つ事ができ、簡単にかつデバッグしやすい信頼性の高いコードを組むことができます。もし例外が起きてしまっても原因の調査がしやすくなります。
このように、アプリケーションを作成するにあたって適切な例外処理の設計をすることは重要なポイントになります。
例外(エラー)を分類
例外(エラー)と一言で表現していますが、例外(エラー)には複数に分類する事ができます。その中でも、例外処理を実装すべき業務エラー
とそれ以外のシステムエラー
の2つに大きく分類していきましょう。以下が2つの分類を表した図です。
このように、業務エラーは主にユーザーの誤入力・誤操作が原因のエラーで、システムエラーは主にユーザー側で対処する事ができないエラーです。
次は、2つに分類したそれぞれのエラーをどのように対処していくのかを考えていきましょう。
例外(エラー)の対処
さてここでは、2つに分類した例外(エラー)の対処方法について考えていきます。
まずは業務エラー
について考えていきましょう。
先に説明したように、業務エラー
とは主にユーザーの誤入力・誤操作が原因のエラーであり、その対処方法としてはユーザーに誤入力・誤操作を取り消してもらい、正常な入力・正常な操作を行ってもらう事が対処方法になります。
その為には、正常な入力・正常な操作を行ってもらえるような例外(エラー)を考えていく必要があります。
正常な入力・正常な操作を行ってもらうには、まず何が誤入力・誤操作だったのかをユーザーに指摘する
事が考えられるでしょう。例えばメールのフォーマットが違う場合、『エラーが起きました。』のような抽象的なメッセージを表示するのではなく、『不正なメールのフォーマットです。』のような具象的なメッセージを画面を用いて表示させる事が適切です。
次は、システムエラー
の対処方法について考えていきましょう。
システムエラーとは主にユーザー側で対処する事ができないエラーです。例えばプログラム内部のバグが原因でエラーが起きたとしましょう。その時はシステム開発者がプログラムを修正する事が対処方法
になります。ユーザー側はバグを修正することは不可能な為、開発者にエラーが発生した詳しい状況を伝えてもらえるような画面を表示する必要があります。また、バグが原因のエラーが発生した後にプログラムを実行してしまうと以降のプログラムの実行結果が正しいことが保証できない為、安全に終了してもらう必要があります。
開発者側は、システムエラーが起きたときに素早く対処できるように、ログにエラー内容を出す
ようにしましょう。またErrbitなどのエラー監視サービスを導入し、Slackなどと連携しておくとエラー時に迅速な対処が行えるでしょう。
例外処理とは想定内の例外が起きた時に、その内容に応じて実行される処理のことです。
例外設計を行う時はまずは例外を業務エラー
とシステムエラー
に分類することから考えていきましょう。そこからそれぞれのエラーに対してどのように設計するのがいいのかを考えていきましょう。適切な例外処理を実装するためにも悩んだ時は開発メンバーと相談しながら決めていくのが無駄のない良い設計になっていくと思われます。
参照
Railsアプリケーションにおけるエラー処理(例外設計)の考え方
プログラム設計でのエラー処理
運用を困らせないインターフェースのエラー処理とリカバリ設計