レイヤードアーキテクチャ(TypeScript版)詳細アウトライン:全20章 🏗️✨
対象:TypeScript初級〜中級/レイヤード初めて/設計超入門者😊 環境:Windows+VS Code+Copilot/Codex等あり🤖💡
第1章:ごちゃ混ぜ地獄から脱出しよう😵💫➡️😊
-
ねらい🎯:レイヤードが必要な“痛み”を体感する
-
学ぶこと📚
- UI/HTTP/DB/型が混ざると何が起きる?💥
- 「変更が怖い」「テストできない」「どこ直すの?」問題
-
ミニ演習🧩:ごちゃ混ぜコードの“困りポイント探し”🔎
-
AI活用🤖:コードを貼って「責務が混ざってる箇所」を指摘してもらう
-
チェック✅:混ざってる理由を言葉にできた?
第2章:TypeScriptで設計するときの“3つの軸”🧭✨
-
ねらい🎯:TS特有の注意点を先に押さえる
-
学ぶこと📚
- 型(compile時)と検証(run時)は別もの⚠️
- importの依存が設計を壊しやすい📦
anyは最終兵器(できれば封印)😇
-
演習🧩:「型だけあるのに壊れる例」をイメージする
-
AI活用🤖:
any/曖昧型の置き換え候補を提案してもらう -
チェック✅:型と実行時検証の違いが説明できる?
第3章:レイヤードの地図を作る🗺️🧱
-
ねらい🎯:4層の役割を“言葉で”決める
-
学ぶこと📚
- Presentation:入力受付・表示・HTTP/画面イベント🎛️
- Application:ユースケース(手順・調整)🎮
- Domain:ルールと概念(核)💎
- Infrastructure:DB/外部APIなど“外側の都合”🚪
-
演習🧩:題材(ToDo等)を各層に仕分けしてみる
-
AI活用🤖:機能説明を渡して「各層に置くべき候補」を出してもらう
-
チェック✅:各層が“やらないこと”も言える?
第4章:依存の向きを固定する(import事故を防ぐ)➡️🚧
-
ねらい🎯:レイヤード崩壊の一番の原因を先に封じる
-
学ぶこと📚
- 依存ルール:外側→内側はOK、内側→外側はNG🙅♀️
- 「DomainがDBをimportしちゃった」事故💥
- “禁止importの例”と“OKな例”を理解
-
演習🧩:依存ルール表(OK/NG表)を作る✅
-
AI活用🤖:リポジトリ構成を渡して「違反importを推理」してもらう
-
チェック✅:なぜその依存がNGか説明できる?
第5章:VS Code+2026 TSの土台づくり🛠️✨
-
ねらい🎯:学習が進む“安全な環境”を用意する
-
学ぶこと📚
- strict寄りの設定で「早めに気づく」🔒
- フォーマット&Lintで“揉めない”🧼
- パス別名(読みやすいimport)🧵
-
演習🧩:最小のテンプレ構成を作る
-
AI活用🤖:設定ファイルの意図を説明してもらう(理解チェック)
-
チェック✅:strictのメリットを言える?
第6章:題材を決めて、最小要件でスタート🌱😊
-
ねらい🎯:YAGNIで“盛りすぎ”防止
-
学ぶこと📚
- 題材例:ToDo/読書ログ/推し活支出メモ📚💸
- 最小要件:追加・一覧・完了(まずこれだけ)👌
- 受け入れ条件(できた判定)✅
-
演習🧩:ユーザーストーリーを3つだけ書く✍️
-
AI活用🤖:要件を渡して「分けるべき責務」を提案してもらう
-
チェック✅:要件が増えそうになったら止められる?
第7章:Domain入門① “不変条件”を型で守る🔒💎
-
ねらい🎯:壊れない中心(ドメイン)を作る
-
学ぶこと📚
- 不変条件:空はダメ、範囲外はダメ、矛盾はダメ🙅♀️
- “作るときに検証して固定する”発想✨
readonlyや “生成関数”の感覚
-
演習🧩:タイトル空禁止、金額マイナス禁止などを設計
-
AI活用🤖:不変条件の漏れを列挙してもらう
-
チェック✅:“無効な状態を作れない”って言える?
第8章:Domain入門② Entity/ValueObject をやさしく分ける🎀
-
ねらい🎯:バグりやすい値を“固める”
-
学ぶこと📚
- Entity:IDで追う(ToDoItemなど)🪪
- ValueObject:値そのもの(Money/Periodなど)💰📅
- どこにルールを書くと読みやすい?📖
-
演習🧩:VO候補を3つ見つけるゲーム🎮
-
AI活用🤖:DTO化しがちな設計を“VO化”案として出してもらう
-
チェック✅:VOを作るメリットが言える?
第9章:Domain入門③ 状態と遷移をキレイにする🔁✨
-
ねらい🎯:業務フローの抜け漏れを減らす
-
学ぶこと📚
- 状態(例:未完了/完了)と許可される操作
- “できない操作”を明示する(早めに止める)🛑
-
演習🧩:状態遷移表を1枚作る🗒️
-
AI活用🤖:遷移の抜け漏れチェックを依頼
-
チェック✅:禁止遷移を説明できる?
第10章:Application入門① ユースケース(手順書)を作る🎮📋
-
ねらい🎯:操作の入口を整理する
-
学ぶこと📚
- ユースケース=「何をしたい?」の単位
- Command/Queryの気持ち(更新と参照を混ぜない)🔁
- Domainを呼ぶ順番・結果のまとめ
-
演習🧩:「ToDoを追加する」「一覧を見る」をユースケースにする
-
AI活用🤖:ユースケース名の命名案を出してもらう
-
チェック✅:Domainに手順を書かない理由が言える?
第11章:Application入門② DTOと境界変換(Mapping)🧩📦
-
ねらい🎯:“画面/HTTP都合”をDomainに持ち込まない
-
学ぶこと📚
- 入力DTO/出力DTO/Domainモデルは別物🙂
- 変換をどこに置く?(境界でやる)🚪
- “変換だらけで迷子”を防ぐ整理術🧹
-
演習🧩:入力DTO→Domain→出力DTOの流れを図にする🗺️
-
AI活用🤖:変換が肥大化してないかレビューしてもらう
-
チェック✅:DTOとDomainを混ぜない自信ある?
第12章:Port(interface)で依存を逆転する🔌➡️✨
-
ねらい🎯:DBや外部APIに引きずられない中心を作る
-
学ぶこと📚
- Repositoryや外部サービスを interface として定義
- Applicationは「抽象」を呼ぶ(DIPの入口)
- interfaceの責務を小さく保つコツ✂️
-
演習🧩:保存用interfaceを1つ作る(読み/書き最小)
-
AI活用🤖:interfaceが大きすぎないかチェック
-
チェック✅:「実装は外側」の意味を言える?
第13章:Infrastructure入門① 永続化(DB/Storage)を外側に閉じ込める🗄️🚪
-
ねらい🎯:保存方法が変わっても中心が壊れない
-
学ぶこと📚
- DB/Storageは詳細、Domainは知らない🙈
- Repository実装で吸収する📦
- “保存形式”と“ドメイン”の変換ポイント
-
演習🧩:インメモリ実装→DB実装に差し替える想像🔁
-
AI活用🤖:永続化の責務が漏れてないか確認
-
チェック✅:どこまでがInfrastructureの責務?
第14章:Infrastructure入門② 外部APIを“翻訳”する📡🈂️
-
ねらい🎯:外部のクセをDomainに入れない
-
学ぶこと📚
- 外部DTO⇔Domain型の翻訳(ACLっぽい考え)
- タイムアウト、失敗、リトライの扱いの基本⏱️
- 設定値(APIキー等)の扱い🔐
-
演習🧩:外部レスポンス→Domainへの変換ルールを書く
-
AI活用🤖:失敗ケースを網羅してもらう
-
チェック✅:外部都合をDomainに混ぜてない?
第15章:Composition Root(組み立て場所)を決める🏗️🧩
-
ねらい🎯:依存の組み立てを迷子にしない
-
学ぶこと📚
- どこで実装を差す?(入口でまとめて組む)
- “どこでもnew/生成”をやめる
- DIコンテナは“必要になってから”でもOK😊
-
演習🧩:依存の配線図を描く🧵
-
AI活用🤖:配線が循環してないかチェックしてもらう
-
チェック✅:組み立て場所が1つに集まってる?
第16章:Presentation層(HTTP/画面)を薄くする🎛️✨
-
ねらい🎯:UIが太るのを防ぐ(Controller肥大化防止)
-
学ぶこと📚
- 入力→検証→ユースケース呼ぶ→結果返す、だけ👍
- 表示用の整形はPresentationの責務
- エラー表示の作法(ユーザーに優しく)💌
-
演習🧩:ハンドラを“薄くする”リファクタ
-
AI活用🤖:「この処理、Applicationに移す?」相談
-
チェック✅:Presentationがビジネスルールを持ってない?
第17章:入力バリデーション(実行時チェック)🛡️✅
-
ねらい🎯:型だけでは守れない世界を守る
-
学ぶこと📚
- 入力は信用しない(HTTP/フォーム)😇
- Presentationで弾く/Domainで弾くの線引き🧱
- “エラーメッセージの設計”もここで
-
演習🧩:無効入力のパターン表を作る📋
-
AI活用🤖:バリデーション漏れチェック
-
チェック✅:境界で守る意識ができた?
第18章:エラー設計(例外地獄を卒業)⚠️🌤️
-
ねらい🎯:壊れ方を“仕様”にする
-
学ぶこと📚
- Domainエラー/インフラエラー/想定外を分ける🧩
- どこで握る?どこで変換する?🤝
- ユースケースの戻し方(成功/失敗の表現)
-
演習🧩:代表エラーを分類する(表を作る)🗂️
-
AI活用🤖:分類の妥当性レビュー
-
チェック✅:例外を投げっぱなしにしてない?
第19章:テスト設計(レイヤードのご褒美🍰)🧪✨
-
ねらい🎯:1人開発でも品質を落とさない
-
学ぶこと📚
- Domain:ユニットテストが最強に書きやすい💎
- Application:fake/mockでユースケース検証🧸
- Infrastructure:統合テストは“少数精鋭”🔧
-
演習🧩:テストピラミッドを自分の言葉で描く🗺️
-
AI活用🤖:テスト観点の漏れを洗い出す
-
チェック✅:どの層をどのテストで守るか言える?
第20章:運用&成長(壊れない仕組みづくり)🌱🏗️🤖
-
ねらい🎯:プロジェクトが大きくなっても崩れない
-
学ぶこと📚
- 依存ルールを自動で守る(lint/CIの発想)🏰
- 観測の最小セット(ログ、相関ID、重要イベント)📈🪵
- モジュール分割の入口(機能で区切る/境界を守る)🧩
- AI活用の型:設計レビュー、違反検出、リファクタ提案🤖✨
-
演習🧩:運用チェックリストを作る✅
-
AI活用🤖:PRレビューの観点テンプレを作ってもらう
-
チェック✅:守る仕組み(自動化)を1つ入れられる?