導入
TypeScriptを使った開発において、例外処理は避けて通れない重要なテーマです。特に中級エンジニアは、エラーハンドリングの設計を適切に行うことで、より堅牢なアプリケーションを作成できます。本記事では、架空のプロジェクトを通じて、実務に即した例外設計の実践例を紹介します。
教科書レベルの解説(例外設計)
重要な概念の整理
例外設計は、システム内で発生する可能性のあるエラーを効果的に管理するための手法です。エラーが発生した際に、どのようにそれを捕捉し、ユーザーに適切なフィードバックを提供するかが鍵となります。具体的には、例外の種類を分類し、それぞれに対して適切な処理を行うことが求められます。
コード例(TypeScript)
class CustomError extends Error {
constructor(public code: number, message?: string) {
super(message);
this.name = 'CustomError';
}
}
function riskyOperation(): void {
throw new CustomError(404, 'Resource not found');
}
function executeOperation() {
try {
riskyOperation();
} catch (error) {
if (error instanceof CustomError) {
console.error(`Error Code: ${error.code}, Message: ${error.message}`);
} else {
console.error('An unexpected error occurred');
}
}
}
executeOperation();
コードの行ごとの解説
- CustomErrorクラス: エラーコードとメッセージを持つカスタムエラーを定義します。
- riskyOperation関数: 意図的に例外を投げる関数です。
- executeOperation関数: 例外処理を行うメインの関数です。
- try-catchブロック: riskyOperationを呼び出し、その結果を捕捉します。
- エラーハンドリング: CustomErrorであれば詳細な情報をログに記録し、その他のエラーは一般的に処理します。
ケーススタディ編
ある中規模のWebアプリケーション開発チームが、ユーザーのリクエストに応じてデータを取得するAPIを実装しています。データベースから情報を取得する際、接続エラーやデータが存在しない場合のエラーが発生することがあります。このプロジェクトでは、例外設計の重要性が明らかになりました。
初めの実装では、エラーが発生した際に単にエラーメッセージを表示するだけでした。これにより、ユーザーは何が起こったのか理解できず、混乱を招く結果となりました。そこで、チームは例外設計を見直し、カスタムエラーを導入することにしました。
具体的には、エラーの種類に応じて異なるエラーメッセージを表示し、ユーザーに適切な対応を促すようにしました。例えば、リソースが見つからない場合は「リソースが見つかりません。再試行してください。」と表示し、接続エラーの場合は「サーバーに接続できません。後ほど再試行してください。」といった具合です。
この改善により、ユーザーからのフィードバックが大幅に向上し、エラーの発生時でもスムーズな対応が可能となりました。
まとめ
- 例外設計は、エラーを適切に管理するための手法である。
- カスタムエラーを使用することで、エラーの種類に応じた柔軟な処理が可能になる。
- ユーザーに明確なフィードバックを提供することで、ユーザー体験が向上する。