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

第1章:エラーは“バグ”じゃなく“仕様”でもあるよ😊📌

0. この章でやること(ゴール)🎯✨

「エラー=悪いもの💥」じゃなくて、**“失敗も最初から仕様に入ってる”**って視点に切り替えるよ😊 そのうえで、失敗を3種類に分けて「これは設計で受け止めるやつ」「これは開発者に知らせるやつ」を見分けられるようになるのがゴール🧠💡


1. まず結論:失敗は“仕様の一部”🧩📘

![try-catch の本当の役割[(./picture/err_model_ts_study_001_catch_net.png)

アプリって、成功する時だけ考えて作ると、あとでこうなる👇

  • 失敗した瞬間に画面が崩れる😱
  • 何が起きたかわからないログが増える🌀
  • ユーザーが「どうすればいいの?」ってなる🥺
  • 開発者も「再現できない…」ってなる😵‍💫

だから最初からこう考えよう✨

成功ルートだけじゃなく、失敗ルートも同じくらい丁寧に設計する ✅ 失敗は「起きうるイベント」だから、どう振る舞うかを決めるのが設計🎀

エラーって「実行時の異常(abnormalities)」を表すために作られる、という説明もあるよ📌 (GitHub)


2. 失敗は3種類に分けると一気にラク😊🗂️

![3つの「失敗の種類」[(./picture/err_model_ts_study_002_three_layers.png)

この教材の最初は、細かい型設計よりも「仕分け感覚」を作るのが大事💗 今日覚える分類はこの3つ👇

A. 想定内の失敗(=仕様の範囲)🙂✅

ユーザーや業務のルール的に起きて当たり前の失敗。

例👇

  • パスワード間違い🔑
  • 在庫なし📦
  • 入力が不正(メール形式じゃない)✉️
  • 期限切れ⏰

👉 これは “怒る”んじゃなくて“案内する” が正解😊🫶 (のちの章で Domain Error として扱うやつ💗)


B. 想定外の異常(=バグっぽい)⚡🧱

本来起きないはずのやつ。

例👇

  • nullのはずがないのにnullだった😨
  • 絶対あるはずのデータが無い😵
  • 到達しないはずの分岐に来た🚫

👉 これはユーザーに「あなたが悪い」とは言わない🙅‍♀️ 開発者に「直して!」って知らせるやつ👩‍💻🔥


C. 運用で起きる失敗(=現実は落ちる)🌩️🔌

外部要因で普通に起きるやつ。

例👇

  • ネットが切れた📶💥
  • APIが落ちた🛰️
  • タイムアウト⏳
  • 一時的に混んでる🚧

👉 これは「再試行できます🔁」とか「少し待ってね🙇‍♀️」みたいに、運用前提の受け止めが必要✨

Node.jsだと Promise の失敗が拾われない(unhandled)と、既定で“投げ直し”扱いになって落ちる方向になってたりするよ⚠️ (nodejs.org) (こういう“現実の落ち方”も、この分類で整理できる😊)


3. 失敗を設計対象にするって、具体的に何するの?🛠️🎀

この段階では難しい型はまだ不要だよ🙂 まずは 「失敗したらどうする?」を文章で言えるのが最強💪✨

失敗1個につき、最低これだけ決める👇

  • 誰に見せる?(ユーザー?開発者?両方?)👀
  • 表示はどうする?(優しい文言?再試行ボタン?)🫶
  • ログは何を残す?(再現できる情報)🧾
  • 次の行動は?(やり直し/問い合わせ/放置でOK)🔁📩

ここまで決めると、あとで Result 型やエラーカタログに落とし込むのが超ラクになるよ😊✨


4. ミニ演習📝:「最近の“困った失敗”」を3つ書いて分類してみよう😊📌

ステップ1:まず3つ書く✍️

最近あなたが作った・触ったもの(個人開発でもOK)で、困った失敗を3つ思い出してね💭✨

  • 失敗①:__________
  • 失敗②:__________
  • 失敗③:__________

ステップ2:3種類に分類🏷️

下のどれ?を選ぶだけでOK😊

失敗A 想定内🙂B 想定外⚡C 運用🌩️

ステップ3:1個だけ深掘り(テンプレ)🧾✨

どれか1つ選んで、これを埋めてね👇

  • 状況:いつ/どこで起きた?📍
  • 原因:何が原因っぽい?🧠
  • 期待結果:本当はどうなってほしい?🌈
  • ユーザー対応:どう表示したい?💬
  • 開発者向け:ログに何を残したい?🔎

5. AI活用🤖:失敗の「言語化」を整えてもらおう✨

AIはここでめちゃ強いよ😊 「モヤっとした失敗」を チームに説明できる文章に整えてくれる🪄

そのままコピペして使えるプロンプト例👇(短くてOK!)

次の「失敗体験」を、設計に使える形に整理して。
出力は「状況」「原因候補」「期待結果」「ユーザー向け対応」「ログに残すべき情報」の5つ。

失敗体験:
(ここにあなたの失敗を書く)

追加でこう頼むのもおすすめ👇😆

この失敗は「想定内」「想定外」「運用」のどれに近い?
理由も1〜2行で。
迷う場合は、判断のための質問も3つ出して。

6. まとめ🧁✨(今日の持ち帰り)

  • 失敗は「悪」じゃなくて、仕様の一部として設計する😊📘

  • まずは3分類👇ができると強い🗂️

    • 想定内🙂 / 想定外⚡ / 運用🌩️
  • いきなり難しい型じゃなくて、文章で“どう振る舞うか”を決めるのが第一歩🫶

  • AIで「失敗の説明」を整えると、設計が一気に進む🤖✨


次回予告📣(第2章)

TS/JSのエラーが難しい理由を3つにまとめて、ハマりポイントを先に踏み抜いておくよ😵‍💫🧩 「throwが何でも飛ぶ🎲」とか「Promiseの落ち方⚡」とか、超あるあるをやるよ〜😊💗