- Error を JSON 化することは「エラー情報を安全・確実に構造化して扱うための基盤技術」
- Error を JSON 化するための基本理解(最重要ポイント)
- ステップ1:Error の主要プロパティを手動で抽出する
- ステップ2:Error に追加されたプロパティも取り込む
- ステップ3:Error を「安全に」JSON 化する
- ステップ4:Error を完全に JSON 化するユーティリティを作る(基本版)
- ステップ5:JSON 文字列として出力するユーティリティを作る
- ステップ6:整形済み JSON をログに出す(業務で最も使われる形)
- ステップ7:業務で使える Error JSON 化ユーティリティ(完成版)
- ステップ8:業務での活用例
- 深掘り:なぜ Error を JSON 化する必要があるのか
- まとめ:Error を JSON 化することは「障害調査の効率を最大化する技術」
Error を JSON 化することは「エラー情報を安全・確実に構造化して扱うための基盤技術」
Error オブジェクトは JavaScript の中でも特殊な存在です。 message や stack を持ち、さらに API エラーなどでは独自のプロパティが追加されることもあります。
しかし、初心者が必ずつまずくポイントがあります。
JSON.stringify(new Error("失敗"))が 期待通りに動かない- Error の
stackが JSON に含まれない - Error に追加されたプロパティが JSON 化されない
- 循環参照があると JSON 化に失敗する
業務では、ログ送信・監視ツール連携・API レスポンス整形などで Error を JSON 化するユーティリティが必須です。
ここでは、ステップバイステップで Error の JSON 化の考え方 → 実装 → 強化 → 業務テンプレート までを丁寧に解説します。
Error を JSON 化するための基本理解(最重要ポイント)
Error はそのまま JSON 化できない
次のコードを見てください。
JSON.stringify(new Error("失敗"));
JavaScript結果はなんと…
{}
空オブジェクトになります。
理由は、Error の message や stack が enumerable(列挙可能)ではないためです。
つまり、通常の JSON 化では拾われません。
ステップ1:Error の主要プロパティを手動で抽出する
まずは Error の基本情報を手動で取り出します。
function extractErrorBase(error) {
return {
name: error.name,
message: error.message,
stack: error.stack,
};
}
JavaScript使用例
try {
throw new Error("DB接続に失敗");
} catch (e) {
console.log(extractErrorBase(e));
}
JavaScriptステップ2:Error に追加されたプロパティも取り込む
業務では API エラーなどで Error に追加情報が付くことがあります。
const err = new Error("API失敗");
err.code = "API001";
err.status = 500;
JavaScriptこれらも JSON 化したいので、 Error の 自前プロパティを取り込みます。
function extractErrorProps(error) {
const extra = {};
for (const key of Object.keys(error)) {
extra[key] = error[key];
}
return extra;
}
JavaScriptステップ3:Error を「安全に」JSON 化する
循環参照があると JSON.stringify が失敗するため、 安全な stringify を用意します。
function safeStringify(value) {
try {
return JSON.stringify(value);
} catch {
return "[Unserializable Object]";
}
}
JavaScriptステップ4:Error を完全に JSON 化するユーティリティを作る(基本版)
function errorToJson(error) {
if (!(error instanceof Error)) {
return { message: String(error) };
}
return {
...extractErrorBase(error),
...extractErrorProps(error),
};
}
JavaScript使用例
try {
throw new Error("ファイル読み込み失敗");
} catch (e) {
console.log(errorToJson(e));
}
JavaScriptステップ5:JSON 文字列として出力するユーティリティを作る
function errorToJsonString(error) {
return safeStringify(errorToJson(error));
}
JavaScript使用例
try {
throw new Error("API失敗");
} catch (e) {
console.error(errorToJsonString(e));
}
JavaScriptステップ6:整形済み JSON をログに出す(業務で最も使われる形)
function logErrorAsJson(error, context = "") {
const ctx = context ? `[${context}] ` : "";
console.error(`${ctx}${errorToJsonString(error)}`);
}
JavaScriptステップ7:業務で使える Error JSON 化ユーティリティ(完成版)
export const ErrorJsonUtil = {
extractBase(error) {
return {
name: error.name,
message: error.message,
stack: error.stack,
};
},
extractProps(error) {
const extra = {};
for (const key of Object.keys(error)) {
extra[key] = error[key];
}
return extra;
},
toJson(error) {
if (!(error instanceof Error)) {
return { message: String(error) };
}
return {
...this.extractBase(error),
...this.extractProps(error),
};
},
stringify(error) {
try {
return JSON.stringify(this.toJson(error));
} catch {
return "[Unserializable Error]";
}
},
};
JavaScriptステップ8:業務での活用例
API エラーを監視ツールに送信する
try {
await fetch("/api/user");
} catch (e) {
sendToMonitoringService(ErrorJsonUtil.stringify(e));
}
JavaScriptバッチ処理の異常終了ログ
try {
runBatch();
} catch (e) {
Logger.error(ErrorJsonUtil.stringify(e), "SalesBatch");
}
JavaScript外部サービスの障害を JSON 化して保存
Logger.error(ErrorJsonUtil.stringify(e), "ExternalService");
JavaScript深掘り:なぜ Error を JSON 化する必要があるのか
1. 外部サービスに送信するため
監視ツール(Datadog、Sentry、CloudWatch など)は JSON 形式を前提にしていることが多いです。
2. ログを構造化して検索しやすくするため
JSON 形式なら、 「message が ‘DB接続’ を含むエラーだけ検索」 などが簡単になります。
3. エラーの追加情報も確実に残せる
API エラーの code や status など、 独自プロパティも JSON 化できます。
4. チーム全体で統一されたエラーログ形式になる
誰が見ても理解できるログは、 調査の属人化を防ぎます。
まとめ:Error を JSON 化することは「障害調査の効率を最大化する技術」
Error を JSON 化できるようになると、次のメリットがあります。
- エラー情報を構造化して扱える
- 監視ツールに送信しやすくなる
- 追加情報も確実にログに残せる
- 読みやすいログ形式を統一できる
- 障害調査のスピードが劇的に向上する
Error はそのままでは扱いづらい特殊なオブジェクトですが、 JSON 化ユーティリティを作れば、どんな環境でも安全に扱えるようになります。
業務システムの品質を支える重要な基盤として、 ぜひ Error JSON 化ユーティリティを活用してください。
