SOLID原則 TypeScript版 全28章アウトライン
「TypeScript初級〜中級」「SOLID初めて」「設計超入門」向けの、28章構成アウトラインだよ〜😊✨ 環境は Windows + VS Code 前提、そして GitHub Copilot / OpenAI Codex系のAI拡張が使える想定で作ってあるよ🤖💡
全体の進め方(ざっくり)🧭✨
-
毎章:「説明 → ちょい実装 → 振り返り」の流れで、ムリなく進む構成だよ🧸📝
-
章をまたいで育てる ミニプロジェクト を用意するよ🌱
- 例:「Campus Café 注文アプリ(超ミニ)」 ☕️📦
- 料金計算・クーポン・注文・在庫・通知…みたいに、SOLIDを当てやすい題材にするよ🎯
SOLID学習ロードマップ(全28章)📚✨
第1章:はじめに(設計ってなに?)🌸
- できるようになること:設計の目的が言える😊
- 学ぶこと:保守性・変更コスト・読めるコード👀
- ミニ課題:今の自分のコードの「困りごと」3つ書く📝
第2章:Windows + VS Code 開発環境セットアップ🛠️💻
- Node.js / npm、TypeScript、Git の基本セット✅
- VS Code拡張:ESLint / Prettier / GitHub Copilot🤖
- ミニ課題:TSプロジェクト作成&ビルド成功🎉
第3章:TypeScriptで「クラス設計」の最低限🏫✨
- class / interface / private / readonly の使いどころ🔐
- 「型で守る」って気持ちよさ💎
- ミニ課題:注文(Order)と商品(Product)を型で表現📦
第4章:設計の基本用語(超入門辞書)📖😊
- 責務、依存、抽象、凝集度、結合度、変更点…🔧
- ミニ課題:Orderまわりの「変更点」を想像する🤔
第5章:コードのニオイ入門(やばさを嗅ぎ分ける)👃💥
- 長すぎ関数、巨大クラス、if地獄、コピペ地獄😵
- ミニ課題:わざと「ニオイコード」を書いてみる🧪
第6章:テストと設計の関係(テストは味方)🧫✅
- 「テストしにくい=設計が苦しい」あるある😢
- Vitest/Jestで軽くテスト体験🧡
- ミニ課題:料金計算のテストを1本書く💰
第7章:リファクタリングの基本(安全に整える)🧼✨
- リファクタリング手順:小さく直す→動作確認🔁
- AIに頼るコツ:質問テンプレ・差分レビュー🤖🔍
- ミニ課題:命名と関数分割で読みやすくする✂️
第8章:SOLID全体マップ(迷子防止)🗺️🌟
- SOLIDは「変更に強くする5つのコツ」だよ💪
- どの原則も「未来の変更の痛み」を減らす🎯
- ミニ課題:今のミニプロジェクトの変更予定を想像🧠
第9章:SRP(単一責任)の基本🌷
- 「1つの理由でだけ変更される」ってどういうこと?🤔
- “責務”を言語化する練習🗣️
- ミニ課題:OrderServiceの責務を3つ列挙😅
第10章:SRPの分け方パターン(分割の型)🧩✨
- 分割軸:データ変換 / 永続化 / 表示 / ルール / 通信📡
- ミニ課題:料金計算・保存・表示を分ける設計メモ📝
第11章:SRP実戦(サービス分割してみよう)⚔️🔥
- OrderService → PriceCalculator / OrderRepository / ReceiptPrinter みたいに分割🧱
- ミニ課題:分割してテストが書きやすくなるのを体験✅
第12章:OCP(拡張に開く、修正に閉じる)🚪✨
- 「機能追加で既存コードを壊しにくくする」考え方🛡️
- ミニ課題:クーポン種類が増える未来を想像🎟️
第13章:OCPの王道:戦略パターンで差し替え🧠🔁
- if/switchで増殖する前に「差し替え口」を作る✨
- ミニ課題:CouponPolicyを差し替え可能にする🎯
第14章:抽象化の「さじ加減」🍰⚖️(やりすぎ防止のOCP)
- 抽象化は「変更点が見えたら」やるのがコツ👀
- ミニ課題:「何を抽象にするべきか」判断練習🤔
第15章:OCP実戦(料金計算を拡張できる形へ)💰🧾
- 学割・雨の日割・セット割…追加しても地獄にならない😊
- ミニ課題:割引追加を“既存修正ほぼゼロ”でやる🎉
第16章:LSP(置換可能性)ってなに?🔁🧩
- 「親として扱えるなら、子でも壊れない」✨
- TSでも起きる!継承/実装の落とし穴🕳️
- ミニ課題:置換できない例を1つ作る😈
第17章:LSP違反の典型パターン集(あるある)📛
- 例:例外を増やす、前提条件を強める、意味を変える💥
- ミニ課題:「子で挙動が変わりすぎ」ケースを見つける🔍
第18章:LSPの解決:継承より合成(合体だ!)🧱🤝
- できるだけ「部品を組み合わせる」設計へ🔧
- ミニ課題:継承をやめて部品クラスに置き換える✨
第19章:LSP実戦(型で守る置換可能性)🧠🛡️
- interface設計と、ユニットテストで置換性チェック✅
- ミニ課題:同じテストが全実装で通るか確認🎯
第20章:ISP(インターフェース分離)入門✂️😊
- 「使わないメソッドを持たされる地獄」から救う🆘
- ミニ課題:巨大interfaceを分割案にする📝
第21章:ISPの分割テク(役割ごとに薄く)🧻✨
- Read/Write分離、Query/Command分離、用途別分離🎯
- ミニ課題:Repositoryを読み取り用と更新用に分ける📚✍️
第22章:ISP実戦(注文通知まわりを整理)🔔📦
- Email通知/アプリ通知/ログ…「必要なものだけ」依存する✨
- ミニ課題:Notifierを分割して依存を軽くする🪶
第23章:DIP(依存性逆転)入門(偉い人に依存しない)🙅♀️👑
- 高レベル(重要ロジック)が低レベル(詳細)に振り回されない💡
- ミニ課題:PriceCalculatorがDBに依存してたら直す😵
第24章:DI(依存性注入)でDIPを実装する💉✨
- コンストラクタ注入・ファクトリ注入・手動DIでOK👌
- (余裕があれば)軽めのDIライブラリ紹介も🧰
- ミニ課題:実装差し替え(本番/テスト)を体験🎭
第25章:SOLID統合リファクタ(全部つなげる)🧶🌈
- SRP→OCP→LSP→ISP→DIPの順に整える流れ🔁
- AI活用:リファクタ案を出させて“人が採用判断”する👩💻🤖
- ミニ課題:Before/Afterを比較して、読みやすさを言語化📝✨
第26章:卒業制作① 仕様づくり&土台設計(設計のスタートライン)🧠📐
-
ゴール:作るものを決めて、変更に強い土台を用意するよ🏗️✨
-
やること
-
ミニプロジェクト題材決定(例:Campus Café 注文アプリ☕️📦)
-
要件を「ユーザーストーリー」にする👩🎓📝
-
例:
- 「注文できる」
- 「割引が適用される」
- 「支払い方法が増える」
- 「通知手段が増える」
-
-
変更点を先に洗い出し(SOLIDの“当てどころ”探し)🔎✨
-
モジュール境界の下書き(責務分割)✂️🧩
- domain(ルール)
- app(ユースケース)
- infra(保存/外部)
-
-
成果物🎁
- 仕様メモ(箇条書きでOK)📝
- 初期フォルダ構成(src/domain, src/app, src/infra…みたいに)📁
- “差し替えポイント候補”一覧(Discount / Payment / Notifier など)🔁
第27章:卒業制作② 実装&テスト(SOLIDを当てながら作る)🛠️✅
-
ゴール:機能を増やしつつ、壊れにくい形で伸ばすよ🌱✨
-
やること
- SRP:責務が混ざったら分割(計算、保存、表示、通知…)✂️
- OCP:割引や支払いを「追加しやすく」する(Strategyで差し替え)🎟️💳
- LSP:差し替えても挙動が壊れない(共通テストで守る)🧩🔒
- ISP:巨大interface禁止、用途ごとに薄くする🧻✨
- DIP/DI:上位ロジックが下位詳細に依存しない(注入する)💉🤖
-
成果物🎁
- 最低限のユースケースが動く(注文→合計→保存→通知)📦🔔
- テストが数本ある(料金計算、割引、支払い差し替え等)✅
- “追加機能”を1つ入れる(例:学割追加、PayPay追加、通知追加など)🎉
第28章:卒業制作③ 仕上げ&設計レビュー(Before/Afterで強くなる)🏁🔍✨
-
ゴール:自分で「設計の良し悪し」を説明できるようになるよ👩🎓💬
-
やること
-
設計レビュー観点チェック✅
- クラス/モジュールの責務は1つ?(SRP)
- 新機能追加で既存修正が少ない?(OCP)
- 差し替え実装が壊さない?(LSP)
- interfaceが肥大化してない?(ISP)
- 依存の向きがキレイ?(DIP)
-
Before/After比較(最初の“ニオイコード”と見比べる)👃➡️🌸
-
AI活用の振り返り(どこが役に立って、どこが危ないか)🤖⚠️
-
最終提出物づくり📦
- README(使い方、構成、SOLID適用ポイント)📄✨
- 変更しやすいポイントの説明(図があると最強)🗺️
-
-
成果物🎁
- 自分の言葉でSOLID適用点を説明できる🎤😊
- “機能追加しても崩れない”手応えを持って卒業🎓🎉