メインコンテンツまでスキップ

第1章:エラーモデリングって何?なぜ必要?🤔🌱

この章は「例外の書き方」を覚える章じゃないよ〜!🙅‍♀️ “失敗を仕様として設計する”って感覚を、ゆるっとつかむ章だよ😊✨


1. まず結論:エラーモデリング=「失敗ルートの設計」🧭💥

失敗ルートの設計

アプリって、成功ルートだけ書いてると だいたい後で壊れる のね…🥲 だから最初から、

  • どう失敗しうる?😵
  • 失敗したら、誰が何を困る?🙃
  • ユーザーには何を見せる?🫶
  • 開発者は何をログに残す?🔎

“仕様”として決める。これがエラーモデリングだよ✨


2. 「例外地獄あるある」😱🔥(見覚えあるやつ)

あるある①:握りつぶし(何も分からない)🫥

public bool Purchase(string itemId)
{
try
{
// いろいろ処理…
return true;
}
catch (Exception)
{
return false; // ← 何が起きたの…?😇
}
}

これ、呼び出し側は false しか分からないよね…🥺 「在庫なし」なのか「ネットワーク落ち」なのか「バグ」なのか全部同じ扱い💥


あるある②:広すぎcatch(全部“想定内”みたいに見える)🪤

catch(Exception) で全部捕まえると、 本当は直すべきバグも「まあ失敗したね」で流れがち⚡


あるある③:メッセージだけで判断(運用で詰む)🧨

「例外メッセージ文字列」に依存すると、環境や言語で変わって事故るよ〜😵‍💫


3. エラー/失敗/バグ:言葉をそろえる🧩📝

ここ、ふわっとしてると一生迷子になるので、超やさしく固定するね😊✨

  • 失敗(Failure):ユーザーや呼び出し側にとって「目的が達成できなかった」状態😢
  • エラー(Error):失敗の理由や種類(在庫不足、DB接続不可など)🏷️
  • 例外(Exception):C#の仕組みとしての“異常の通知”🧯
  • バグ(Bug):プログラムの矛盾や不変条件破り(直すべき)🧱⚡

ポイントはこれ👇 失敗が起きるのは普通(仕様に入る) バグは普通じゃない(早く見つけるべき)⚡


4. “怖くない設計”ってこういうこと🫶🎀

エラーモデリングをすると、世界がこう変わるよ〜✨

✅ ユーザーにやさしくなる

  • 「原因不明です」じゃなくて 「在庫が足りないみたい🙏」とか言える💬

✅ 開発者が助かる

  • ログを見て「どの原因?再現できる?」が分かる🔎🧵

✅ API/画面の作りが安定する

  • 失敗の形が毎回バラバラじゃなくなる
  • (後半でやる)ProblemDetails みたいな標準形式に寄せられる🧾✨ ※Problem Detailsの最新仕様は RFC 9457 で、RFC 7807 を置き換える位置づけだよ。(rfc-editor.org)

5. 今日のミニ題材:推し活グッズ購入管理🛍️💖(今後も使うやつ)

推し活グッズ購入管理フロー

「購入する」って一見シンプルだけど、失敗ルートがいっぱいあるよ〜😳

  • 予算オーバー💸(ユーザーの行動ミス系)
  • 在庫なし📦(業務ルール系)
  • 決済APIがタイムアウト⏳(外部要因)
  • DBが落ちてる🗄️💥(運用要因)
  • nullが来て落ちる😇(バグっぽい)

この章では分類までは深追いしないけど、 “失敗の種類が違う” って感覚だけ持って帰ればOK🙆‍♀️✨


6. 章のメイン:失敗を「言語化」する練習📝✨

エラーモデリングの第一歩はコレ👇 「何が起きたか」を言えるようにする(ここが超大事)

✅ 言語化テンプレ(これを使うとラクだよ😊)

  • いつ:どの操作で?
  • 何が:どう失敗した?
  • 原因は:どのへんっぽい?
  • ユーザーは:どう困る?
  • こちら(開発側)は:何が知りたい?

7. ミニ演習:このコードの“怖いところ”を見つけよう🕵️‍♀️💥

演習A:握りつぶし探し🫥

public bool SaveProfile(Profile profile)
{
try
{
_repo.Save(profile);
return true;
}
catch
{
return false;
}
}

質問👇(答えは下にあるよ)

  1. 失敗の理由、呼び出し側は分かる?🤔
  2. ユーザーに何て表示されがち?😇
  3. ログに何が残る?🔎

演習B:情報欠落throw探し🧯

try
{
_repo.Save(profile);
}
catch (Exception)
{
throw new Exception("保存に失敗しました");
}

質問👇

  1. これ、何がもったいない?🥲
  2. 原因追跡できる?🧵

✅ 解答例(やさしめ)🫶

  • 演習A

      1. 分からない(falseだけ)
      1. 「保存できませんでした」みたいな雑表示になりがち
      1. 例外情報が残らない(運用で詰む)
  • 演習B

      1. 元の例外情報(スタックトレース等)が薄くなる/失われやすい
      1. 原因追跡が難しくなる(どこで何が起きたか消える)

8. AI活用(この章のおすすめの使い方)🤖✨

AIはこの章だと 「案出し・漏れチェック」 が最強だよ💪

✅ そのまま使えるプロンプト例

  • 失敗パターン列挙📝 「この機能(プロフィール保存)の失敗パターンを、ユーザー視点と運用視点で10個ずつ出して。重大度も添えて」

  • 握りつぶし指摘👀 「このコードの例外処理の“困る点”を具体的に。どんな障害調査が困難になるかも」

  • やさしいメッセージ案💬 「ユーザー向けに優しい日本語のエラーメッセージ案を5つ。責めない・次にどうすればいいかが分かる感じで」


9. 今日の成果物(1枚)📄✨:失敗例メモを作ろう!

ノートでもOKだよ😊(あとでエラー分類表に育てる🌱)

例👇

  • 操作:購入する🛍️

    • 失敗:在庫なし📦
    • ユーザーの困り:買えない😢
    • 次アクション:入荷待ち案内/数量変更
    • 開発側が欲しい情報:商品ID、在庫数、要求数量、ユーザーID
  • 操作:購入する🛍️

    • 失敗:決済タイムアウト⏳
    • ユーザーの困り:決済できたか不安😵‍💫
    • 次アクション:再試行の可否、二重購入防止
    • 開発側が欲しい情報:相関ID、外部決済の応答状況

10. まとめ:この章で持ち帰る“感覚”🌱✨

  • 失敗は「消す」んじゃなくて「設計する」🧭
  • try/catch は最後の手段で、まずは失敗ルートを考える🧠
  • 「何が起きた?」を言語化できると、次の章が一気にラクになる😊

ちょい最新メモ(今のC#/.NETの空気感)🆕✨

このロードマップが狙ってる「2026っぽい開発の前提」として、いまは .NET 10 がLTS(3年サポート)で、リリース告知も出てるよ。(Microsoft for Developers) それに合わせて Visual Studio 2026 もGA になってて、AI支援が前提っぽい流れが強いよ〜🤖🛠️(Microsoft for Developers)


次の第2章では、すぐ試せる土台(プロジェクト作成〜最小APIまで)を作って、“失敗を再現して観察する” ところから入るよ🪟🛠️😊