第9章 今回の題材を決める(ToDoミニ)📝🍰
![hex_ts_study_009[(./picture/hex_ts_study_009_adapters_implementation.png)
(ここから「実作業」に入るよ〜!😊💻✨)
9.1 なんで “ToDoミニ” が題材にちょうどいいの?🎯💕
ヘキサゴナル(Ports & Adapters)を体験するには、題材が 小さくて、あとから育てられる のがいちばん良いのね🌱✨ ToDoはまさにそれ!
ToDoが強い理由💪✨
- ルールが作れる(=ドメインが育つ)🧠💖 例:タイトル空NG、完了の二重適用NG…など
- 入口(CLI→HTTP)を差し替えても“中心”は変わらないを体験できる🔁😆
- DBやファイル保存に差し替えるのも分かりやすい💾📄
- テストが書きやすい(中心だけなら爆速!)🧪⚡
9.2 今日作る “ToDoミニ” の範囲を決めよう🧁📌
まずは 機能を3つだけ に絞るよ〜(ここ大事!)✂️✨
機能(最小セット)✅
- 追加(Add)➕📝
- 一覧(List)📋👀
- 完了(Complete)✅🎉
これだけで「ユースケース」「状態」「永続化」「差し替え」が全部練習できるのが嬉しいポイントだよ😊💕
9.3 “ルール” を先に決めるのがコツだよ🛡️✨
ToDoアプリって、ただのCRUDに見えるけど… ルールを入れると一気に“設計の練習”になるの😊💖
今回のミニアプリのルールはこんな感じにしよう👇
ルール案(ドメインの芯)🧠🧷
- タイトルは空文字ダメ🙅♀️(空白だけもダメ)
- タイトルは前後の空白をトリムしてから扱う✂️
- 完了は二重適用できない(同じToDoを2回完了にしない)🚫✅✅
- IDは必ず存在する(作るときに付く)🆔✨
この「完了の二重適用禁止」って、実は 冪等性(idempotency) の入り口にもなるよ〜🚪✨ (のちの章で“APIの設計”にも効いてくるやつ!)
9.4 まず “言葉” を揃えよう📚💕(地味に最重要!)
設計が混乱する一番の原因って、じつは「言葉がブレること」なんだよね😵💫💥 なのでこの章でミニ辞書を固定しちゃう📌✨
このアプリの用語🗂️
- Todo:やること1件(id / title / completed)
- title:表示する文字列(空NG)
- completed:完了状態(true/false)
- completeする:未完了 → 完了にする操作(2回目はエラー)
9.5 ユースケースの “入口” をまだ決めない理由💖(I/O後回し!)
ここがヘキサゴナルの気持ちよさの核心だよ〜😊✨
今はこう考える:
- 入口(CLI / HTTP / 画面)は “あとで何でも付け替えられる” 🚪🔁
- だから先に作るべきは 中心(ルール&ユースケース) 🧠🛡️
- 入口や保存先は、中心が決まってから “差し込み” すればOK🔌🧩
I/O後回しのメリット🎁✨
- 「どのUIにする?」で迷って止まらない🚫🌀
- テストが最短で書ける🧪⚡(中心だけなら外部依存ゼロ!)
- 仕様変更(たとえばWeb化)しても中心が壊れにくい🔧💕
9.6 仕様を “3つのカード” にして固定しよう🃏✨
この章の成果物は「コード」じゃなくて、超ミニ仕様書(カード) にしよう😊📝 (これが次章以降の設計の地図になるよ🗺️✨)
🃏カード1:AddTodo(追加)➕
- 入力:title(文字列)
- 成功:新しいTodoができる(idが付く)
- 失敗:titleが空(または空白だけ)ならエラー
🃏カード2:ListTodos(一覧)📋
- 入力:なし(まずは全部返す)
- 成功:Todoの配列(id/title/completed)
- 並び順:とりあえず追加順でOK(あとで変えられる)
🃏カード3:CompleteTodo(完了)✅
-
入力:id
-
成功:completedがtrueになる
-
失敗:
- 対象が無い → エラー
- すでに完了 → エラー(ルール違反)
9.7 そのまま貼れる「README用ミニ仕様」📝🎀
次の章でプロジェクト作るとき、最初にREADMEに貼ると迷子にならないよ😊✨ (このままコピペOK!)
# Todoミニ(Hexagonal体験用)
## 機能
- AddTodo: タイトルを指定してTodoを追加する
- ListTodos: Todoの一覧を取得する
- CompleteTodo: 指定したTodoを完了にする
## ルール(ドメイン)
- titleは空文字/空白だけ禁止(trim後に判定)
- 完了は二重適用禁止(完了済みにもう一度Completeしない)
- Todoは必ずidを持つ
## 期待するエラー
- ValidationError: titleが不正
- NotFoundError: idが見つからない
- DomainError: 完了二重適用などルール違反
9.8 AI拡張の “安全な使い方” だけ先に決めよ🤖🧠✨
AIはめっちゃ便利だけど、この章でAIに任せていいのは「文章化」までが安全だよ⚠️😊 「何を作るか」「ルールは何か」は、あなたの頭で決めるのが勝ち🏆✨
おすすめプロンプト(そのまま使ってOK)📝🤖
- 「上の仕様をGiven-When-Then形式の受け入れ条件にして」
- 「エラーケースを漏れなく列挙して」
- 「用語集を短く整理して」
9.9 2026年の“いま”の道具メモ🧰✨(安全運用の小ネタ付き)
- Nodeは v24系がLTS で、2026-01-13に 24.13.0(セキュリティリリース) が出てるよ🔐✨ (Node.js)
- npmは 11.8.0 が最新(2026-01-21公開)だよ📦🚀 (NPM)
- TypeScriptは npm上だと 5.9.3 が最新扱い(直近の安定ライン)🟦✨ (NPM)
- TypeScript公式は「6.0は5.9→7.0の橋渡し」と説明してるよ🌉 (Microsoft for Developers)
- VS Codeは「1.108が利用可能」と案内されてて、Updatesページで追えるよ🧩✨ (Visual Studio Code)
- ついでに注意⚠️:最近は“怪しいリポジトリを開かせる攻撃”も話題になってるから、知らないrepoは信頼(Trust)する前に中身チェックが安心だよ🕵️♀️🔍 (TechRadar)
9.10 まとめ:この章でできたこと🎁💖
- 題材を “ToDoミニ” に固定した📝🍰
- 機能を3つに絞った(Add / List / Complete)✅
- ルール(中心の芯)を先に決めた🛡️✨
- READMEに貼れるミニ仕様まで用意した📌🎀
次の章から、いよいよプロジェクト作って「動く!」まで持っていくよ〜🚀😊