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

TypeScriptのエラーハンドリング!ログ収集のためのエラーフォーマット設計入門

TypeScriptでログ収集を行うためのエラーフォーマット設計
TypeScriptでログ収集を行うためのエラーフォーマット設計

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

生徒

「TypeScriptでプログラムを書いていると、エラーが発生したときに何が起きたか分からなくて困ります。ログを集めるための決まった形ってありますか?」

先生

「それはとても大切な視点ですね。エラーの内容をバラバラに記録するのではなく、一定の形式(フォーマット)に整えておくことで、後から問題の原因を突き止めやすくなりますよ。」

生徒

「エラーの記録に決まった型が必要だということですね。具体的にどうやって設計すればいいのでしょうか?」

先生

「それでは、TypeScriptにおけるエラー管理の基礎からフォーマット設計のコツまで、一緒に見ていきましょう!」

1. エラーハンドリングとは何か

1. エラーハンドリングとは何か
1. エラーハンドリングとは何か

プログラミングにおいてエラーハンドリングとは、日本語で「例外処理」とも呼ばれ、プログラムが予期せぬ失敗をしたときに、それを安全に検知して適切に対処することを指します。例えば、インターネット通信が切れたり、存在しないファイルを開こうとしたりしたとき、プログラムが突然停止してしまうと困りますよね。そうした「困ったこと」が起きたときに、何が起きたかを記録し、ユーザーに分かりやすく伝えたり、プログラムが止まらないように制御したりするのがエラーハンドリングの役割です。

2. なぜログ収集のエラーフォーマットが必要なのか

2. なぜログ収集のエラーフォーマットが必要なのか
2. なぜログ収集のエラーフォーマットが必要なのか

プログラムが動いている現場では、エラーログ(記録)が宝の山になります。しかし、その記録が担当者によってバラバラな書き方だと、後から調査するときに非常に苦労します。「いつ、どこで、どんなエラーが起きたか」を誰が見てもすぐに分かるように、一定の形式(フォーマット)を決めておくことが、開発の現場では非常に重要です。設計の基本は、エラーの原因となる情報、発生した場所、時刻などを漏らさず含めることです。

3. TypeScriptでエラー情報を整理する型定義

3. TypeScriptでエラー情報を整理する型定義
3. TypeScriptでエラー情報を整理する型定義

TypeScriptの大きな強みは、型(Type)を指定してデータ構造を明確にできることです。エラー情報を一つのルール(インターフェース)に統一しましょう。インターフェースとは、データが持つべき形を定義する設計図のようなものです。以下の例では、エラーの種別、メッセージ、発生時刻を必ず含めるルールを作っています。


interface AppError {
    errorCode: string;
    message: string;
    timestamp: number;
    location: string;
}

4. 実際にエラーをログとして記録する処理

4. 実際にエラーをログとして記録する処理
4. 実際にエラーをログとして記録する処理

定義したルールを使って、実際にエラーを記録してみましょう。ここでは、関数の中でエラーが起きたときに、先ほど決めたフォーマットに情報を詰め込んでログとして出力する例を紹介します。キャッチという仕組みを使うことで、プログラムが停止するのを防ぎつつ、エラー情報を受け取ることができます。


function logError(err: AppError) {
    console.error(`エラー発生: [${err.errorCode}] ${err.message} (${err.location})`);
}

try {
    throw new Error("通信に失敗しました");
} catch (e: any) {
    const errorLog: AppError = {
        errorCode: "ERR_001",
        message: e.message,
        timestamp: Date.now(),
        location: "NetworkModule"
    };
    logError(errorLog);
}

5. 開発を楽にするエラーの分類方法

5. 開発を楽にするエラーの分類方法
5. 開発を楽にするエラーの分類方法

エラーの種類を分類しておくと、ログ分析の効率が劇的に上がります。例えば「ユーザーの入力ミス」なのか「システムのバグ」なのか「ネットワークの一時的な問題」なのかを区別するフィールドをフォーマットに追加するのです。これにより、どのエラーを優先的に直すべきか、すぐに見極められるようになります。


type ErrorCategory = "USER_INPUT" | "SYSTEM_ERROR" | "NETWORK";

interface DetailedError extends AppError {
    category: ErrorCategory;
}

const myError: DetailedError = {
    errorCode: "ERR_002",
    message: "入力値が不正です",
    timestamp: Date.now(),
    location: "FormValidation",
    category: "USER_INPUT"
};

6. ログ収集を効率化する運用のコツ

6. ログ収集を効率化する運用のコツ
6. ログ収集を効率化する運用のコツ

最後に、現場での運用上のアドバイスです。エラーログはただ記録するだけでなく、外部の分析ツールに送ることが一般的です。そのため、フォーマットは「JSON形式」など、機械が読み取りやすい形を意識してください。また、ユーザーのプライバシーに関わる個人情報(名前やメールアドレスなど)をエラーログに含めないよう、設計段階で注意することも非常に大切なマナーです。ログは安全に保管し、開発者がすぐに内容を把握できるようにしておくことが、システムの品質向上に直結します。


function sendLogToMonitoringSystem(err: DetailedError) {
    const jsonLog = JSON.stringify(err);
    console.log("外部送信:", jsonLog);
}
カテゴリの一覧へ
新着記事
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でコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】