腐敗防止層(ACL)教育コンテンツ:20章 詳細アウトライン 🧼🧱✨
1章:ACLってなに?“翻訳係”のイメージをつかもう 🗣️🌍
- ACL(Anti-Corruption Layer)とは何か(超やさしく)
- 「外部のクセ」が内側に入ると起きる事故例😱
- 今日のゴール:ACLの役割を言葉で説明できるようにする🎯
2章:この教材のゴールと“全体の地図”を先に見よう 🗺️✨
- 何を作る?:外部APIを2つ使う小さなアプリ題材🎓
- どこにACLが入る?(内側/外側/境界の図)📦🚪
- 最終成果物:外部DTOが内側に漏れない構造✅
3章:Windows+VS Code+TypeScript(2026)の最小セットアップ 🧰🪟
- Node.js(LTS想定)+ TypeScript最新安定版
- VS Code拡張(ESLint/Prettier/テスト/Git/AI)🧩
- “生成AIを使う前提”の進め方(ルール)🤖🧠
4章:設計が超入門でもOKな「境界」と「関心の分離」🚪🧱
- SoC(関心の分離)を超シンプルに
- 「内側=自分のルール」「外側=相手の都合」✨
- ACLは境界に置く“通訳+防波堤”🌊🛡️
5章:題材紹介:学内アプリ(例)と外部APIの“クセ”を確認 🎓🧾
-
例:学食ポイント(ドメイン)🍱
-
外部API例:
- 学生情報:古い命名+コード値が謎👻
- 決済:エラー仕様が厳しい🏦
-
“クセの種類”をリスト化(命名/コード/欠損/単位/時刻…)📝
6章:まず失敗例を見る(外部DTOが侵食する地獄)🕳️😵
-
外部DTOをそのまま内部で使う例(あえてやる)
-
起きる問題:
- 命名が汚染される😇
- 変更で内側が壊れる💥
- テストがつらい🧪💦
-
ここで「ACLの必要性」を体感する章🔥
7章:最低限のドメインモデリング(Entity/ValueObject超入門)🧩📌
- Entity:IDで同一性(StudentIdなど)🪪
- ValueObject:値に意味(Money/Pointなど)💴✨
- “ドメインに入っていい言葉”を決める(辞書づくり)📚
8章:不変条件(Invariants)を“入口で守る”ってどういうこと?🚫🔒
- 例:「ポイントは0以上」「金額は正」など
- ルールが散ると事故る(ifだらけ地獄)🌀
- 入口(生成・更新)で保証する作り方✅
9章:ACLをどこに置く?配置パターンと責任範囲 🧱🛡️
-
ACLの仕事は「翻訳」と「防御」✨
-
置き場所のパターン:
- 外部Clientの直後
- Adapter層としてまとめる(Ports & Adapters)🔌
-
何をACLに含める/含めない(線引き)✍️
10章:Ports & Adapters超入門(interfaceで“外を差し替え”)🔌🧱
- DIPをやさしく:内側は抽象に依存する🧠
StudentDirectoryPort/PaymentPortみたいな形で- テストがラクになる理由も先に理解する🧪✨
11章:ACLの核① マッピングの基本(DTO→ドメイン)🔁📦
-
DTOは外の都合、ドメイン型は内の都合✨
-
変換の基本形:
- DTO受け取る
- 整形する
- ドメイン型を作る
-
「変換関数の置き場所」と命名ルール📝
12章:ACLの核② 命名変換・構造変換(読みやすさ爆上げ)🧾➡️📘
stu_kbn→studentTypeみたいな翻訳- ネスト構造の差を吸収(DTOは深い、ドメインは平ら等)🧱
- “内側に残る言葉”の品質を上げる✨
13章:ACLの核③ コード値・列挙・区分の変換(謎コード撲滅)🔤🧹
"1"|"2"を意味あるenumへ(例:UNDERGRAD/GRAD)🎓- 不明コードが来たらどうする?(方針)🤔
- 変換テーブルの管理の仕方🗃️
14章:外部データを信用しない① パース(整形)の設計 🧽🔍
- “整形”の例:trim、全角半角、文字→数値、日時文字列など
- パースをACLに置く理由(内側を汚さない)🧼
- どこまで直す?直しすぎ問題も注意⚠️
15章:外部データを信用しない② バリデーション(検証)の設計 ✅🧪
-
何をチェックする?(必須、範囲、形式、長さ)
-
失敗時の扱い:
- 落とす(エラー)
- 代替値
- 保留(扱えないデータとして隔離)🚦
-
“境界で落とす”の大切さ🧯
16章:エラーモデリング① 外部エラーとドメインエラーの分離 🧊🔥
- 外部:HTTP、タイムアウト、レート制限、500…🌩️
- ドメイン:学生がいない、残高不足、期限切れ…📘
- 同じ「失敗」でも意味が違うのを理解する🧠
17章:エラーモデリング② 変換(翻訳)とリトライ可否の設計 🔁⏱️
- 外部エラー→ドメイン向けの形へ変換(境界の責任)🧱
- リトライしていい失敗/ダメな失敗
- “結果の型”を揃えて扱いやすくする📦✨
18章:テスト① マッピングのユニットテスト(最強に効く)🧪🔥
- DTO→ドメインのテスト観点
- 正常系:代表ケースを少数で押さえる✅
- “内側の不変条件”が守られるか確認🔒
19章:テスト② 異常系・境界値・外部変更検知(壊れない設計へ)🧨🧱
- 欠損、未知コード、変な型、桁あふれ、null…😇
- フィクスチャ(外部レスポンスサンプル)を残す📦
- 外部が変わったら“テストが先に気づく”仕組み🚨
20章:仕上げ:観測+AI活用+ミニプロジェクトで完成 🎓🏁📈🤖
-
観測(ログ/相関ID/失敗理由)をACLに入れる📈🔍
-
AI活用の実戦:
- 変換関数の下書き生成
- テストケース案の大量生成🧪
- でもドメインルールは人間が監督🛡️
-
最終課題:
- 外部API2つをACLで包む
- 内側はドメイン型だけで完結✨
- チェックリストで卒業✅🎉