メインコンテンツまでスキップ

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適用点を説明できる🎤😊
    • “機能追加しても崩れない”手応えを持って卒業🎓🎉