第15章 ミニ題材決定:カフェ注文アプリ ☕🧾✨
ここからは「小さく作って、あとで差し替えて強さを体感する」フェーズに入るよ〜!😆💪 題材は カフェの注文(Order) に決定!☕🍰
15.1 今日のゴール 🎯✨
この章でやることは「作るアプリの仕様を、シンプルに決め切る」ことだよ🙂📌 ヘキサゴナルは “題材の決め方”で学びやすさがめっちゃ変わる から、ここは丁寧にいこう〜!
15.2 今回つくるミニアプリの姿 ☕🧾

できること(最小の要件)✅
- 注文を作成する(Create Order)🧾✨
- 注文一覧を表示する(List Orders)📋👀
最初は InMemory で完成 → あとでDBに差し替える 🔁🧠
- まずは メモリに保存(InMemory) で「動くもの」を完成させる😆
- その後、DBに差し替えて「Coreが変わらない!」を体験する🛡️✨
15.3 なぜ「カフェ注文」がヘキサに向いてるの?🥰🔷
この題材、ヘキサの“おいしい所”が全部入ってるの🍯✨
- UIは変えやすい:Web APIでも、将来は画面アプリでもOK(入口が変わる)🚪🔁
- 保存先が変わりやすい:InMemory → DB(出口が差し替わる)🗄️🔁
- 業務ルールが入れやすい:数量・金額・合計計算など(Coreが主役になれる)🏠💖
15.4 用語ミニ辞書(この題材の“言葉”)📖✨
ここが地味に超大事!😳 “言葉が揃う”と、設計がスルスル進むよ〜!
- Order(注文):注文そのもの🧾
- OrderItem(注文明細):注文内の1行(商品+数量)🧁×2 みたいなやつ
- MenuItem(メニュー商品):ラテ、チーズケーキ等☕🍰
- Money(金額):金額を表す値(できれば型で守る)💰🔒
- Total(合計):OrderItemの合計金額🧮✨
15.5 ユースケース(やりたいこと)を“文章”で固める 🧠📝
UC1:注文作成(Create Order)🧾✨
- 店員さんが「商品」と「数量」を入れる
- システムは合計金額を計算して、注文として保存する
- 注文IDを返す(控え番号みたいな感じ)🎫
UC2:注文一覧(List Orders)📋👀
- 今日の注文が見られる
- 並び順は「新しい順」でOK(最初はシンプルで!)😊
15.6 “業務ルール”を最小だけ入れる(Coreが主役になるコツ)🏠💖
ルールゼロだと「ただのCRUD」になって、ヘキサの良さが出にくいの😭 だから、軽めのルールを入れて“Core感”を出そう!
おすすめの最小ルール例👇(このくらいで十分!)✨
- 数量は 1以上(0個注文は変だよね🥺)
- 注文は アイテムが1つ以上ないと作れない
- 合計金額は 単価×数量の合計で自動計算🧮
- 価格はマイナス禁止(当たり前ルールを型で守ると気持ちいい)💰🚫
15.7 画面やAPIのイメージ(入口の形)🌐🚪
将来差し替える前提だから、まずは分かりやすく Web API を想定しておくね🙂✨ (後でCLIにしても、画面にしても、入口のAdapterを替えるだけ〜!🔁)
注文作成(例:POST /orders)🧾
{
"items": [
{ "menuItemId": "latte", "quantity": 2 },
{ "menuItemId": "cheesecake", "quantity": 1 }
]
}
返すもの(例)👇
{
"orderId": "a3f1c0d0-4e8b-4d1b-8a25-2a7c2c2e9c2f",
"total": 1650,
"currency": "JPY"
}
注文一覧(例:GET /orders)📋
[
{
"orderId": "a3f1c0d0-4e8b-4d1b-8a25-2a7c2c2e9c2f",
"total": 1650,
"currency": "JPY",
"items": [
{ "menuItemId": "latte", "quantity": 2, "unitPrice": 550 },
{ "menuItemId": "cheesecake", "quantity": 1, "unitPrice": 550 }
]
}
]
15.8 この題材をヘキサに落とすとこうなる 🔷🔌✨
「どれがPortでどれがAdapter?」を、ここで軽く当てておくよ〜!
Inbound(外 → 中)⬅️
- Web API Controller(Adapter):HTTPを受け取る🌐
- UseCase(Port):
CreateOrder/ListOrdersを呼べる約束📝
Outbound(中 → 外)➡️
- Repository(Port):保存したい・一覧ほしい、という約束🗄️📝
- InMemoryRepository(Adapter):メモリに保存する実装🧠📦
- (後で)DbRepository(Adapter):DBに保存する実装🗃️⚙️
この形にしておくと、のちの DB差し替え が超気持ちいいよ😆🔁
15.9 “まずInMemoryで完成”が最強な理由 🧠🔥
- DBを先にやると、設定・接続・移行・例外が増えて初心者が溺れがち😵💫🌊
- 先にInMemoryで完成すると、**設計の良さ(差し替え)**だけに集中できる😌✨
- その後DBに変えると、**「え、Coreいじらないの?」**が体験できて感動する🥹🛡️
15.10 AIの使いどころ(この章で使うと楽)🤖✨
AIはね、仕様の言語化と例の生成に使うのが超ラク!💖
おすすめプロンプト例 🪄
- 「カフェ注文アプリの最小ユースケースを2つに絞って、入力/出力DTO案を出して」
- 「Order / OrderItem / Money の最小クラス設計を提案して(業務ルールも少し)」
- 「InMemoryで保存するRepository実装の雛形をC#で作って」
⚠️注意:AIは勢いでDB都合をCoreに混ぜがち! **“DTO変換やDBモデルはAdapter側”**は人間が守ってね🚦🧼
15.11 ミニ演習(この章のうちに決めちゃおう)📝✨
次の3つを、自分の言葉でメモできたら勝ち!😆💪
- 注文作成の入力に必要な項目は?(itemsだけで足りる?)🧾
- 注文の一覧で返したい情報は?(totalは返す? itemsは返す?)📋
- 最小ルールを何にする?(数量1以上、アイテム1つ以上…など)🔒
15.12 チェックリスト ✅✨
- できることが 「注文作成」「注文一覧」 に絞れてる😌
- “業務ルール”が ちょびっと入ってる(Coreが主役になれる)🏠💖
- 最初は InMemoryで完成 → あとでDB差し替えの流れが見えてる🔁
- 「入口(Inbound)」と「出口(Outbound)」のイメージがついた🔌✨
おまけ:今の「最新基盤」メモ(さらっと)🧠✨
いまの最新は **.NET 10(LTS)**で、C#も C# 14 が最新だよ〜!📌✨ C# 14 は .NET 10 上で動く前提になってるよ。(Microsoft Learn) ASP.NET Core も .NET 10 で色々強化されてて、Minimal APIのバリデーション対応なんかも入ってるよ。(Microsoft Learn)
次の章(第16章)では、いよいよプロジェクトを作って「動く土台」を用意するよ〜!🪟⚙️💖