TypeScriptのエラーハンドリング!ログ収集のためのエラーフォーマット設計入門
生徒
「TypeScriptでプログラムを書いていると、エラーが発生したときに何が起きたか分からなくて困ります。ログを集めるための決まった形ってありますか?」
先生
「それはとても大切な視点ですね。エラーの内容をバラバラに記録するのではなく、一定の形式(フォーマット)に整えておくことで、後から問題の原因を突き止めやすくなりますよ。」
生徒
「エラーの記録に決まった型が必要だということですね。具体的にどうやって設計すればいいのでしょうか?」
先生
「それでは、TypeScriptにおけるエラー管理の基礎からフォーマット設計のコツまで、一緒に見ていきましょう!」
1. エラーハンドリングとは何か
プログラミングにおいてエラーハンドリングとは、日本語で「例外処理」とも呼ばれ、プログラムが予期せぬ失敗をしたときに、それを安全に検知して適切に対処することを指します。例えば、インターネット通信が切れたり、存在しないファイルを開こうとしたりしたとき、プログラムが突然停止してしまうと困りますよね。そうした「困ったこと」が起きたときに、何が起きたかを記録し、ユーザーに分かりやすく伝えたり、プログラムが止まらないように制御したりするのがエラーハンドリングの役割です。
2. なぜログ収集のエラーフォーマットが必要なのか
プログラムが動いている現場では、エラーログ(記録)が宝の山になります。しかし、その記録が担当者によってバラバラな書き方だと、後から調査するときに非常に苦労します。「いつ、どこで、どんなエラーが起きたか」を誰が見てもすぐに分かるように、一定の形式(フォーマット)を決めておくことが、開発の現場では非常に重要です。設計の基本は、エラーの原因となる情報、発生した場所、時刻などを漏らさず含めることです。
3. TypeScriptでエラー情報を整理する型定義
TypeScriptの大きな強みは、型(Type)を指定してデータ構造を明確にできることです。エラー情報を一つのルール(インターフェース)に統一しましょう。インターフェースとは、データが持つべき形を定義する設計図のようなものです。以下の例では、エラーの種別、メッセージ、発生時刻を必ず含めるルールを作っています。
interface AppError {
errorCode: string;
message: string;
timestamp: number;
location: string;
}
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. 開発を楽にするエラーの分類方法
エラーの種類を分類しておくと、ログ分析の効率が劇的に上がります。例えば「ユーザーの入力ミス」なのか「システムのバグ」なのか「ネットワークの一時的な問題」なのかを区別するフィールドをフォーマットに追加するのです。これにより、どのエラーを優先的に直すべきか、すぐに見極められるようになります。
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. ログ収集を効率化する運用のコツ
最後に、現場での運用上のアドバイスです。エラーログはただ記録するだけでなく、外部の分析ツールに送ることが一般的です。そのため、フォーマットは「JSON形式」など、機械が読み取りやすい形を意識してください。また、ユーザーのプライバシーに関わる個人情報(名前やメールアドレスなど)をエラーログに含めないよう、設計段階で注意することも非常に大切なマナーです。ログは安全に保管し、開発者がすぐに内容を把握できるようにしておくことが、システムの品質向上に直結します。
function sendLogToMonitoringSystem(err: DetailedError) {
const jsonLog = JSON.stringify(err);
console.log("外部送信:", jsonLog);
}