カテゴリ: TypeScript 更新日: 2026/04/03

TypeScriptの例外処理まとめ!信頼性の高いアプリケーション設計の鍵

TypeScriptの例外処理まとめ!信頼性の高いアプリケーション設計の鍵
TypeScriptの例外処理まとめ!信頼性の高いアプリケーション設計の鍵

先生と生徒の会話形式で理解しよう

生徒

TypeScriptでプログラムを書いているときに、予期せぬエラーが起きて動かなくなることがあって困っています。どうすればいいですか?

先生

それはプログラム開発で誰もがぶつかる壁ですね。エラーが起きたとき、その場をどう切り抜けるかを決めておく「例外処理」という仕組みが重要になります。

生徒

例外処理ですか?なんだか難しそうですが、具体的にどうやるんでしょうか?

先生

大丈夫ですよ。身近な例えを交えながら、安全で壊れにくいプログラムを作るための方法を解説しますね。

1. プログラミングにおける例外とは何か

1. プログラミングにおける例外とは何か
1. プログラミングにおける例外とは何か

まず、プログラミングにおける例外(エクセプション)について説明します。例外とは、プログラムの実行中に発生する「予期せぬトラブル」のことです。例えば、インターネットに接続しようとしたけれど通信が切れていた、読み込もうとしたデータが壊れていたなど、プログラムが正常に続きを行えなくなる状況を指します。

もし、こうしたトラブルに対して何の対策もしていないと、プログラムは突然停止してしまい、画面がフリーズしたり、最悪の場合は大切なデータが壊れたりしてしまいます。そこで、あらかじめ「もし何かが起きたらこうする」というルールを決めておくことが、信頼性の高いアプリケーション設計の鍵となります。これが、例外処理の役割です。

2. try-catch文による基本の例外処理

2. try-catch文による基本の例外処理
2. try-catch文による基本の例外処理

TypeScriptで例外処理を行うための最も基本的な命令が、try-catch文です。これは、「やってみて(try)」、もし「ダメなら捕まえる(catch)」という分かりやすい仕組みです。トラブルが起きそうな箇所をtryブロックで囲み、もしエラーが起きたらcatchブロックへ飛ばすことで、プログラムを止めることなく安全に対処できます。


try {
    throw new Error("何か問題が発生しました!");
} catch (error) {
    console.log("エラーをキャッチしました:", error);
}

エラーをキャッチしました: Error: 何か問題が発生しました!

ここで出てくる「throw」は、わざとエラーを発生させるキーワードです。catchの中のerrorという変数には、何が起きたのかという具体的な情報が入ります。これにより、エラー内容に応じた適切な対応が可能になります。

3. finallyブロックを使って確実に処理を行う

3. finallyブロックを使って確実に処理を行う
3. finallyブロックを使って確実に処理を行う

例外処理には、tryとcatchだけでなく、finally(ファイナリー)という便利な部品があります。finallyに書いたコードは、エラーが発生しても発生しなくても、プログラムがtry-catchを通り抜けた後に必ず実行されます。例えば、データベースとの接続を閉じる処理や、ファイルを保存した後にメモリを解放する処理など、「結果はどうあれ最後は必ずやってほしいこと」を指定するのに最適です。


try {
    console.log("処理を開始します");
} catch (e) {
    console.log("エラーが起きた場合のみ動きます");
} finally {
    console.log("成功しても失敗しても必ず最後に実行されます");
}

処理を開始します
成功しても失敗しても必ず最後に実行されます

4. TypeScriptでのエラーの型定義

4. TypeScriptでのエラーの型定義
4. TypeScriptでのエラーの型定義

TypeScriptの大きな特徴である「型(タイプ)」についても触れておきましょう。通常、catchで受け取るエラーはunknown型といって、何者か分からない状態です。しかし、現代のTypeScriptでは、これが本当にエラーオブジェクトなのかを確認する工夫が必要です。これを怠ると、エラーが起きた時にその詳細情報を正しく扱うことができません。安全性を高めるため、エラーの種類を判定してから処理を分岐させるのがプロのやり方です。


try {
    throw new Error("通信エラー");
} catch (e) {
    if (e instanceof Error) {
        console.log("エラーメッセージ:", e.message);
    } else {
        console.log("未知のエラーです");
    }
}

エラーメッセージ: 通信エラー

instanceof(インスタンスオブ)は、その値が特定の型(この場合はErrorという型)かどうかをチェックする道具です。これで、エラーが正体不明のまま暴走するのを防ぎます。

5. 独自のエラーを作成して管理を楽にする

5. 独自のエラーを作成して管理を楽にする
5. 独自のエラーを作成して管理を楽にする

プログラムが大きくなってくると、単に「エラー」と言われても、「どの部分で起きたエラーか」が分からなくなることがあります。そんなときは、自分だけのオリジナルエラーを作ることができます。例えば、「ユーザーが見つからないエラー」や「入力データが無効なエラー」のように名前をつければ、プログラムを後から修正するときに非常に楽になります。これはクラスという仕組みを使って、既存のエラー機能を拡張して作成します。


class ValidationError extends Error {
    constructor(message: string) {
        super(message);
        this.name = "ValidationError";
    }
}

try {
    throw new ValidationError("名前が入力されていません");
} catch (e) {
    if (e instanceof ValidationError) {
        console.log("入力チェックでエラーです:", e.message);
    }
}

入力チェックでエラーです: 名前が入力されていません

6. 信頼性の高いアプリケーションを設計する考え方

6. 信頼性の高いアプリケーションを設計する考え方
6. 信頼性の高いアプリケーションを設計する考え方

最後に、例外処理を組み込む際の心構えをお伝えします。例外処理は「エラーを隠すための手段」ではなく、「エラーを正しく検知し、適切な復旧やユーザーへの報告を行うための手段」です。何でもかんでもtry-catchで囲んでしまうと、本当は直すべき根本的なプログラムのミスまで見えなくなってしまいます。

本当に回避できない外部要因、例えば「サーバーがダウンしている」「ユーザーがネットを切断した」といった事象に対して例外処理を使い、プログラム自体の論理的な間違いは、例外処理に頼らずに正しいコードを書くことで防ぐのが理想的なアプリケーション設計です。TypeScriptの強力な型チェック機能を活用しながら、必要な場所に適切な例外処理を配置することで、あなたの作るアプリケーションはより強固で信頼できるものになります。

カテゴリの一覧へ
新着記事
New1
JavaScript
JavaScriptの配列を逆順にする方法(reverseメソッド活用)
New2
JavaScript
JavaScriptの配列の並べ替え(sortメソッド)の基本とカスタマイズ
New3
TypeScript
TypeScriptとJSDocを併用して型推論を強化!初心者向けガイド
New4
JavaScript
JavaScriptの配列の長さ(lengthプロパティ)を理解しよう
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
TypeScript
TypeScriptの型定義ファイル管理を徹底解説!読み込み順序とDefinitelyTypedの仕組み
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptで型定義を拡張する方法を徹底解説!モジュール拡張とDefinitelyTypedの使い方
No.4
Java&Spring記事人気No4
TypeScript
TypeScript型定義ファイル(d.ts)の分割構成を徹底解説!大規模開発でも迷わない管理術
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.6
Java&Spring記事人気No6
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptで型定義を参照する方法!triple-slash directives(三斜線ディレクティブ)を徹底解説
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】