第6章:エラー分類の全体像(3分類)🧩
(ドメイン/インフラ/バグ)
この章は「迷ったらここに戻る地図」を作る回だよ😊✨ 以降の Result型や例外境界は、ぜんぶこの3分類が土台になるよ〜!
1) まず結論:エラーは3種類に分ける🌈

✅ ① ドメインエラー(業務ルール違反)💗
- 例:在庫不足、期限切れ、予算オーバー
- 仕様として起きる(= 想定内)
- だいたい Resultで返す(例外じゃなくて戻り値で扱う方向)✨
✅ ② インフラエラー(外部I/Oの失敗)🌩️
- 例:DB接続できない、外部APIタイムアウト、ネット不安定
- これも 仕様として起きる(= 想定内)
- “一時的” なら リトライ候補になる(でも闇雲はNG)🔁 ※「一時的な障害(transient fault)」の扱いは Azure/設計ガイドでも強調されてるよ📘 (Microsoft Learn)
✅ ③ バグ(不変条件違反・想定外)💥
- 例:絶対ありえない状態、null前提崩壊、ロジック破綻
- “ここに来たらおかしい” なので Fail Fast(すぐ気づく)
- 基本は 例外で止める(ログに濃い情報を残す)🧯 「例外は乱用せず、普通に起きる条件は例外にしない」系の指針は .NET の公式ドキュメントでも推されてるよ📌 (Microsoft Learn)
2) 3分類があると何が嬉しいの?😊🎁
🌟 “対応が自動で決まる”から迷いが減る
分類が決まると、次がセットで決まるよ👇
- ユーザーに何を見せる?(優しい文言?それとも一般メッセージ?)🫶
- ログの濃さは?(Warnで十分?スタックトレース必須?)🔎
- リトライしていい?(するなら回数や間隔は?)🔁
- Resultで返す?例外で落とす? 🎁🧯
3) 迷ったときの「分類フローチャート」🧭✨

次の順で質問していくと、ほぼ迷子にならないよ😊
Q1:それは “業務ルール” の話?💗
-
YES → ドメインエラー
- 例:「在庫がない」「期限切れ」「購入上限を超えた」
Q2:外部(DB/ネット/別サービス/ファイル)に触ってる?🌩️
-
YES → インフラエラー
- 例:「DB接続失敗」「HTTP 503」「タイムアウト」
- 一時的失敗は retry の候補(ただし無限リトライはダメ🙅♀️) (Microsoft Learn)
Q3:どっちでもないのに失敗してる?💥
-
YES → バグ(不変条件違反)
- 例:「本来ここに来ない分岐」「絶対成立するはずの条件が崩れてる」
4) 具体例で体に入れる(超大事)🧠✨
題材:推し活グッズ購入管理🛍️💖(在庫・予算・購入)
💗 ドメインエラー例(仕様で起きる)
- 予算が足りない
- 在庫が0
- 同じ商品を1日3回まで、みたいなルール違反
- 購入期限を過ぎた
👉 こういうのは「怒る」んじゃなくて「やさしく案内」する系😊 (ユーザーに説明できる=ドメイン)
🌩️ インフラエラー例(外の世界が不機嫌)
- DB が落ちた/接続できない
- 外部決済APIが 503(サービス停止っぽい)
- タイムアウト(回線遅い/相手が混んでる)
- 429(混みすぎ!後で来て!)
👉 “一時的” ならリトライ候補だけど、**回数制限・待ち時間・相手の指示(Retry-After)**とかを考える感じだよ⏳🔁 (Microsoft Learn)
💥 バグ例(設計・実装の想定が崩壊)
- 「在庫は0以上」って決めてるのに -1 になってた
- null にならない前提の値が null
- switch の default に落ちた(本来ありえない)
- ありえない状態遷移(未購入→発送済み みたいな飛び)🚀
👉 これは ユーザーのせいじゃない ので、ユーザーには一般メッセージ+ログに詳細、が基本線✨ (そして早く直す🔥)
5) 成果物:分類表の「雛形」📋✨(この章のゴール)
このフォーマットを1枚作ると、以降がめちゃ楽になるよ😊
| 失敗シーン(短い名前) | 分類(ドメイン/インフラ/バグ) | 例(何が起きた?) | ユーザーへの見せ方 | 開発者向けログ | リトライ |
|---|---|---|---|---|---|
| 在庫不足 | ドメイン | 在庫=0 | 「在庫がありません🥲」 | Info/Warn(状況だけ) | しない |
| DB接続失敗 | インフラ | 接続できない | 「混み合ってます🙏」 | Error + 例外詳細 | 場合により |
| 在庫が-1 | バグ | 不変条件違反 | 「エラーが発生しました🙇♀️」 | Error/Critical + 例外詳細 | しない |
※ 例外の扱いは「よく起きる条件は例外で処理しない」方針が公式でも推されてるよ📘 (Microsoft Learn)
6) ミニ演習:あなたのアプリ想定で“分類表”を作る📋🧩
Step 1:失敗シーンを10個書く📝(まずは雑でOK)
コツ:
- 「入力」系(ユーザーが間違える)
- 「業務ルール」系(禁止・上限・期限)
- 「外部I/O」系(DB/API/ファイル)
- 「ありえない状態」系(不変条件)
Step 2:3つに振り分ける🚦
迷ったらさっきのQ1〜Q3に戻る😊
Step 3:各行に“見せ方・ログ・リトライ”を埋める🧾
- ドメイン:やさしい文言+ログは軽め
- インフラ:やさしい文言+ログは濃いめ(復旧に必要)+リトライ検討
- バグ:ユーザー文言は一般的+ログは最濃(スタックトレース等)
7) AI活用:会話で分類訓練しよ🤖💬(めっちゃ効く!)
✅ 使えるプロンプト例(コピペOK)✨
- 「次の失敗シーンを、ドメイン/インフラ/バグに分類して。理由も1行で」
- 「迷った2つ(AとB)の違いを“判断軸”で説明して」
- 「インフラエラーのうち“リトライしてよい可能性が高いもの”だけ抜き出して」 ※ リトライは “transient” 前提で設計ガイドがあるよ📘 (Microsoft Learn)
✅ AIに任せっぱなし防止チェック🙂
- 「それ、ユーザーに説明できる?」→ できるならドメイン寄り💗
- 「外部に触ってる?」→ 触ってるならインフラ寄り🌩️
- 「本来ありえない?」→ バグ寄り💥
まとめ🎀✨
- 迷ったら 3分類(ドメイン/インフラ/バグ) に戻る🗺️
- 分類できると、見せ方・ログ・リトライ・例外/Result が自然に決まる🎁🧯
- 次章(第7章)から、ドメインエラーを“型”にしていくよ〜🏷️💗
次は 第7章:ドメインエラー入門(業務ルール違反)💗 を、命名まで含めてガッツリ作るね😊✨