TypeScript中級

中級 TypeScriptで学ぶ例外設計|ケーススタディ編

導入

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();

コードの行ごとの解説

  1. CustomErrorクラス: エラーコードとメッセージを持つカスタムエラーを定義します。
  2. riskyOperation関数: 意図的に例外を投げる関数です。
  3. executeOperation関数: 例外処理を行うメインの関数です。
  4. try-catchブロック: riskyOperationを呼び出し、その結果を捕捉します。
  5. エラーハンドリング: CustomErrorであれば詳細な情報をログに記録し、その他のエラーは一般的に処理します。

ケーススタディ編

ある中規模のWebアプリケーション開発チームが、ユーザーのリクエストに応じてデータを取得するAPIを実装しています。データベースから情報を取得する際、接続エラーやデータが存在しない場合のエラーが発生することがあります。このプロジェクトでは、例外設計の重要性が明らかになりました。

初めの実装では、エラーが発生した際に単にエラーメッセージを表示するだけでした。これにより、ユーザーは何が起こったのか理解できず、混乱を招く結果となりました。そこで、チームは例外設計を見直し、カスタムエラーを導入することにしました。

具体的には、エラーの種類に応じて異なるエラーメッセージを表示し、ユーザーに適切な対応を促すようにしました。例えば、リソースが見つからない場合は「リソースが見つかりません。再試行してください。」と表示し、接続エラーの場合は「サーバーに接続できません。後ほど再試行してください。」といった具合です。

この改善により、ユーザーからのフィードバックが大幅に向上し、エラーの発生時でもスムーズな対応が可能となりました。

まとめ

  • 例外設計は、エラーを適切に管理するための手法である。
  • カスタムエラーを使用することで、エラーの種類に応じた柔軟な処理が可能になる。
  • ユーザーに明確なフィードバックを提供することで、ユーザー体験が向上する。