依存性逆転(DIP)詳細アウトライン(全19章)📘✨
第1章:はじめに|DIPってどんな子?🤝🌱
- この教材でできるようになること🎯
- DIPの一言まとめ(上位が下位に振り回されない)🙅♀️
- ざっくり例:支払い方法変更(クレカ→PayPay等)でも中身を守る💳➡️📱
第2章:そもそも「依存」って何?🔗👀✨
- import / new / 直接呼び出しが作る依存🧷
- 依存が増えると何が困る?(修正が怖い・テストがつらい)😢🧪
- 「依存を見つけるチェックポイント」📝
第3章:設計の超ミニ前提|“上位”と“下位”の感覚🧠🪜✨
- 上位:やりたいこと(業務ルール)💡
- 下位:道具(DB/HTTP/ファイル/時間)🧰
- “変更されやすいのは下位”あるある🌪️
第4章:DIPが必要になる「あるある地獄」🔥😵
- DB変更で業務ロジックが壊れる🗄️💥
- API仕様変更でアプリ全体が巻き添え🌐💥
- テストが無理ゲーになって諦める🙈🧪
第5章:まずは失敗例を読む(DIPなし)🙅♂️📉
- 上位が下位を直接 new してる例😵
- 変更点がどこまで波及するか追跡👣
- 「このコード、どこが“怖い”?」を言語化🗣️
第6章:DIPの定義をやさしく(2つのルール)📜✨
- ルール①:上位モジュールは下位モジュールに依存しない🙅♀️
- ルール②:どっちも“抽象”に依存する🧩
- 「抽象ってなに?」の入口だけ先に🔑
第7章:TypeScriptでの「抽象」入門(interface / type 超基礎)🧩📘✨
- interface / type の役割(契約を書く)✍️
- “形(構造)”で縛れるTypeScriptの強み💪
- 最低限の書き方(この教材で使う範囲)✅
第8章:抽象の作り方|「ふるまい」を先に決める🧠🧩✨
- “何をしたいか”でメソッドを決める(HowじゃなくWhat)🎯
- 良い命名:〜Repository / 〜Client / 〜Gateway など📛
- 「抽象が大きすぎる/小さすぎる」問題の入口⚖️
第9章:ポート(境界)を作ろう|Repositoryパターン入門🚪🗄️✨
- “外の世界”に触れるところを境界に押し出す🚧
- 例:UserRepository / OrderRepository の責務🎁
- “永続化の詳細”を隠すってこういうこと🙈
第10章:依存の向きを逆転させる(図で理解)🔄📈✨
- 依存の矢印はどこに向ける?🏹
- 「内側=方針」「外側=詳細」🏠🌍
- よくある配置ミス(抽象が外側にいる等)😵💫
第11章:DIPをコードで完成させる(差し替えできる形)🔁🧱✨
- interfaceに対して実装クラスを用意👩🔧
- 上位コードは interface のみ参照でOK🙆♀️
- “差し替え可能性”の確認ポイント✅
第12章:DIってなに?DIPとの関係を整理🤝💉✨
- DIP:設計ルール(依存の向き)🧭
- DI:実装テク(依存を外から渡す)🧺
- 「混同しない!」ためのミニまとめ📝✨
第13章:手動DI(コンストラクタ注入)をやってみよう💉🧱✨
- new を内部でしないスタイルへ🚫🆕
- コンストラクタ注入の基本形(超定番)🏗️
- “組み立て場所”はどこが良い?(main/entry)🚪
第14章:境界の種類①|HTTP / 外部APIクライアント🌐📡
- 例:PaymentClient / ShippingClient 🚚💳
- “通信の失敗”は下位の事情(上位に漏らしすぎない)⚠️
- 返り値の設計(成功/失敗をどう扱う?)🙂/😢
第15章:境界の種類②|Clock(時間)を抽象化する⏰✨
- なぜ時間が敵になるの?(テストが地獄)😵🧪
- IClock / now() みたいな最小の抽象🧩
- “再現できる時間”でテストが一気に楽に🎉
第16章:境界の種類③|ファイル/設定/環境変数📁⚙️
- 設定値を直読みしない(process.env直参照の注意)⚠️
- ConfigProvider 的な境界で吸収🧩
- Windows開発でありがちなパス問題も境界で隠す🪟🧹
第17章:テストが簡単になる!Fake/Stubで体験🧪🧸✨
- “本物なし”で動くのが最強💪
- Fake実装を作って差し替える流れ🔁
- テストの目的は「仕様を守る」こと📌
第18章:やりすぎ注意!DIPの落とし穴と適用判断⚠️🐍
- 何でもinterface化しない(読みづらくなる)😵
- いつ導入する?(変更頻度・外部I/O・テスト必要度)👀
- KISS/YAGNIとの仲良しバランス⚖️😊
第19章:ミニプロジェクトで総復習(実務っぽく)🏁🎁✨
-
題材例:注文処理(Order)📦
- 支払い:Card/PayPayを差し替え💳📱
- 通知:Email/Slackを差し替え📩💬
- 時間:Clockで固定⏰
-
手順:DIPなし→問題発見→DIP化→テストまで🛠️✨
-
最終チェックリスト✅
- 上位は詳細を知らない?🙆♀️
- 抽象は上位側にある?📌
- 差し替えできる?テストできる?🔁🧪
おまけ(各章に入れると学習がスムーズな“固定セット”)🍀📌
各章の最後にこれを付けると、女子大生向けでも迷子になりにくいよ😊✨
- まとめ(3行)🧾
- ミニ演習(1〜2問)✍️
- AIに聞く用プロンプト例🤖💬(“丸投げ”じゃなく“比較させる”)