Skip to main content

第03章:題材ドメインを決める(在庫・注文・決済)🛒📦💳

この章の結論(1行)✨

以後の32章ぜんぶを「同じ世界の同じ単語」で話すために、ドメイン(在庫・注文・決済)を固定して、状態とルールを先に決めるよ! 🧠🔧


3.1 なぜ「題材ドメイン」を最初に固定するの?🤔📌

分散の話って、抽象のままだと一生フワフワしがち…🥺☁️ だからこの教材では、最初に “このECっぽい世界” を作って、以後ずーっと同じ話をします🛍️✨

  • どこがズレるとヤバい?」💥
  • ズレてもOKなところは?」😌
  • ズレたとき、画面にどう見せる?」🎨⏳

これを毎章、同じ題材で繰り返すから、体に染みこむよ〜🧠💕

セットアップ


3.2 今後ずっと使う “ミニ分散EC” の世界観 🌍🧩

主役(登場人物)👤

  • お客さん(購入する人)🛒
  • システム(注文を受ける)🧾
  • 決済サービス(カード会社・決済APIっぽいやつ)💳
  • 在庫(商品数を管理する)📦

扱う3つの領域(ここが今回のタイトル!)🧱

  1. 注文(Order) 🧾
  2. 在庫(Inventory) 📦
  3. 決済(Payment) 💳

この3つが“別々の部屋”にいる感じにすると、分散っぽさが一気に出るよ🏠🏠🏠✨


3.3 用語(この教材の共通語)を揃える📖✨

まずは「名詞」と「状態」を決めちゃうのが勝ち筋!🏆

名詞(Entityっぽいやつ)🧩

  • Product:商品(価格・SKUなど)🏷️
  • InventoryItem:在庫の実体(在庫数)📦
  • Order:注文(合計金額・状態・明細)🧾
  • OrderItem:注文の明細(商品・数量)🧺
  • Payment:決済(状態・金額・決済ID)💳
  • StockReservation:在庫の引当(予約)📌📦

ポイント:「在庫を減らす」じゃなくて「在庫を予約する」 を入れると、あとで整合性の話が超ラクになるよ😇✨


3.4 状態(ステータス)を決める:最終的整合性の“画面の言葉”になる🎨⏳

この教材は「ズレる世界」を扱うから、状態設計が主役だよ🎬✨

注文(Order)の状態案🧾

  • Pending:受付したよ(処理中)⏳
  • Confirmed:確定したよ✅
  • Rejected:だめだったよ(在庫なし/決済失敗)❌
  • Cancelled:キャンセルされたよ🧹

決済(Payment)の状態案💳

  • Requested:決済開始したよ🚦
  • Authorized:与信OK(お金はまだ確保のイメージ)✅
  • Captured:請求/確定したよ💸
  • Failed:失敗したよ❌

在庫引当(StockReservation)の状態案📦📌

  • Reserved:引当できたよ📌✅
  • Expired:期限切れで戻したよ⌛↩️
  • Released:キャンセルで戻したよ↩️
  • Failed:引当できなかったよ❌

3.5 ハンズオン:ユーザー画面の状態を紙に描く✍️📝

ここ、超重要!💡 “遅れる世界” を UX で支える ための設計図になるよ🎨⏳

① まずは購入フローを1本にする🧵

例:

  1. 商品をカートに入れる🛒
  2. 注文する(注文受付)🧾
  3. 画面は「処理中」⏳
  4. あとで「確定」or「失敗」✅/❌

② 画面に出すステータス案を決める📱✨

最低限これだけでOK!👍

  • 注文直後:「注文を受け付けました(処理中)」
  • 成功:「注文が確定しました」
  • 失敗:「注文を確定できませんでした(在庫/決済)」
  • ずっと処理中:「確認に時間がかかっています」 🕰️

③ 紙テンプレ(そのまま写してOK)📝💗

[注文ボタン押下]

画面:処理中(Pending)
↓(数秒〜数十秒〜…)
(成功) 画面:確定(Confirmed)
(失敗) 画面:失敗(Rejected)+ 理由

ここでの狙い:「遅れる」を失敗に見せない 😌✨ UXの言葉があるだけで、最終的整合性が“怖くない”になるよ🫶


3.6 「どこが即時一致必須?どこは遅れてOK?」を仕分ける🧩✅

CAPの話を始める前に、業務ルールで優先順位を決めるよ⚖️✨ ここが決まると、次の章以降がスラスラ進むよ〜🚀

仕分けの基準(3つだけ覚えよ)📌

  • お金:二重請求は絶対NG💸❌
  • 法務/約束:やった/やってないが争点になるもの⚖️
  • UX:多少ズレても“気持ちよく待てる”ならOK😌⏳

例:この教材ドメインの仕分け案🟥🟨🟩

  • 🟥 即時一致がほぼ必須

    • 決済の「二重請求防止」💳🧷
    • 同じ注文IDの「二重確定防止」🧾🧷
  • 🟨 なるべく合っててほしい(ズレると困る)

    • 在庫の「残り1個」みたいな境界ケース📦⚠️
  • 🟩 遅れてOK(UXで吸収しやすい)

    • 「注文履歴に反映されるまで少し待つ」📜⏳
    • 「在庫表示の更新(数秒〜)」👀⏳

ここでの“勝ち筋”: 🟥は頑張って守る(設計で守る) 🟩はUXで守る(表示と言葉で守る)🎨✨


3.7 以後ずっと使う「イベント」も軽く決めておく📨✨

分散は「状態」だけじゃなくて「起きたこと(イベント)」で話すと強いよ💪🔥 ここでは “名前だけ” 先に置いとく!

イベント名(例)🏷️

  • OrderPlaced(注文受付)🧾
  • PaymentAuthorized(与信OK)💳✅
  • PaymentFailed(決済失敗)💳❌
  • StockReserved(在庫引当成功)📦📌✅
  • StockReservationFailed(在庫引当失敗)📦❌
  • OrderConfirmed(注文確定)🧾✅
  • OrderRejected(注文失敗)🧾❌

ここで大事なのは「命名の統一感」だけ!✨ 実装の細かいところは後の章でやるよ🧠🔧


3.8 AI(Copilot / Codex系)で “ユーザーストーリー” を整形する🤖✨

ここはAIの得意分野〜!😻 自分のアイデアを 読みやすい仕様 にしてもらおう📝💕

ユーザーストーリーの型(これで統一)🧾

  • 私は(誰として)
  • 〜したい(何を)
  • なぜなら(価値)

例(そのまま使える)💡

  • 私はお客さんとして、注文をしたい。なぜなら、商品を購入したいから。🛒
  • 私はお客さんとして、注文が処理中でも不安にならない表示がほしい。なぜなら、待っていいのか分からないから。⏳😌
  • 私はシステムとして、同じ注文が2回届いても二重請求しないようにしたい。なぜなら、お金の事故は致命的だから。💳🧷

AIに投げるプロンプト例(コピペOK)📋🤖

以下の箇条書きを、ユーザーストーリー形式(私は〜として、〜したい。なぜなら〜)に整形して。
さらに「受け入れ条件(Given/When/Then)」も3つずつ付けて。

(ここに自分のメモを貼る)
- 注文後は処理中表示
- 成功したら確定、失敗したら理由表示
- 二重送信でも二重請求しない
- 在庫が足りない場合は注文を失敗にする

3.9 2026年1月時点の “道具まわり” ミニ知識(安全に進めるため)🧰🛡️

この教材は実装もするから、ツール側の“今どうなってる?”も軽く押さえとこ〜👀✨

  • TypeScriptは 5.9 のリリースが案内されていて、公式のリリースノートも整備されてるよ📘✨ (Microsoft for Developers)
  • Node.jsは「Current」と「LTS」が並走していて、リリース情報は公式で更新されてるよ🟢📦(例:v25系がCurrent、v24系がActive LTSとして掲載) (nodejs.org)
  • VS Codeは、少なくとも 2026年1月のInsiders(v1.109) の更新情報が公開されてるよ🧪🆕 (Visual Studio Code)
  • そして大事な注意⚠️:VS Code拡張(特に“AIっぽい名前”)には 悪意ある拡張が混ざるリスク が報告されてるよ😱 → 入れる拡張は「提供元」「評判」「必要権限」をちゃんと見るクセをつけよ🛡️✨ (TechRadar)

3.10 この章の完成物(チェックリスト)✅✨

この章が終わったら、手元にこれがあればOK!🧠📦

  • ドメインの名詞リスト(Order/Payment/Inventory…)📖
  • Order/Payment/Reservation の状態(ステータス)✅❌⏳
  • 画面の状態遷移(処理中→確定/失敗)📱🧾
  • 「即時一致必須/遅れてOK」の仕分け🟥🟨🟩
  • ユーザーストーリー(AIで整形済み)📝🤖
  • イベント名のたたき台📨🏷️

3.11 よくあるミス(先に潰す)💥🧯

  • ❌ 「在庫を減らす」だけで考えちゃう → ✅ 予約(Reservation) を入れると世界が整理される📦📌
  • ❌ 画面が “成功/失敗” の2択しかない → ✅ 処理中(Pending) をちゃんと居場所として設計する⏳💗
  • ❌ 用語が毎回ブレる(注文=購入=オーダー…) → ✅ この章の用語を“辞書”として固定しよ📖✨

以上で、第3章は完成!🛒📦💳✨