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

全体の章立て:高凝集・低結合(C#超入門)17章アウトライン📚✨

第1章:AI支援の使い方(この教材の共通ルール)🤖✨

  • ねらい🎯:AIを“便利に使って、振り回されない”状態になる

  • 主な内容📚

    • AIは「案出し」が得意💡(分割案、命名案、テスト観点)
    • 最終判断は人間🧠✅(責務混在🍲/依存増えすぎ🔗をチェック)
    • 1章につきプロンプトは1〜2個まで🎀(情報過多防止)
  • ハンズオン🛠️

    • 同じコードに対して「AIの案」を1回だけ出させ、採用/不採用の理由を書く📝
  • AIプロンプト🤖

    1. 「このコードの責務を3つに分ける案を、クラス名付きで提案して」
    2. 「その案は責務の混在や依存増加がない?危ない点を3つ指摘して」

第2章:まず“変更が怖い”を体験する😱➡️😄

  • ねらい🎯:高凝集・低結合が必要な理由を体感する

  • 主な内容📚

    • 変更が波及するコードの典型例💥
    • 「直したら別の場所が壊れる」原因の正体👀
  • ハンズオン🛠️

    • 1ファイルに詰め込んだサンプルを変更してみて、壊れた箇所を記録📒
  • AIプロンプト🤖

    1. 「このコードで“変更が怖いポイント”を5つ、理由つきで指摘して」

第3章:用語をやさしく理解(凝集/結合)📚✨

  • ねらい🎯:「良い/悪い」を説明できるようになる

  • 主な内容📚

    • 高凝集=同じ目的でまとまってる🎯
    • 低結合=必要以上に他へ依存しない🔗
    • “結合ゼロ”が正義ではない🙅‍♀️(適量がある)
  • ハンズオン🛠️

    • いくつかのクラス例を見て「凝集/結合」を感覚で判定するクイズ🧩
  • AIプロンプト🤖

    1. 「このクラスの責務を一文で説明して(短く!)」

第4章:設計の判断軸は「変更理由」🧠✨

  • ねらい🎯:分け方の基準を覚える(“好み”で分けない)

  • 主な内容📚

    • 変更理由が同じものをまとめる🧲
    • UI/業務ロジック/外部I/O(DB・API・ファイル)を混ぜない🚪
  • ハンズオン🛠️

    • サンプル要件から「変わりそうな点」を3つ書き出し→境界を引く🗺️
  • AIプロンプト🤖

    1. 「この機能の“変更理由”を想定して5つ挙げて(UI/業務/I/Oで分類)」

第5章:ニオイ図鑑① God Class(何でも屋)🧟‍♀️💦

  • ねらい🎯:巨大クラスを見抜けるようになる

  • 主な内容📚

    • God Classの症状(メソッド多すぎ・関心ごと混在)😵
    • 分割の第一歩:責務ラベル🏷️
  • ハンズオン🛠️

    • 1クラスを「責務ラベル」で色分けして、分割候補を作る🎨
  • AIプロンプト🤖

    1. 「このクラスを責務ごとにグルーピングして、分割後のクラス名案も出して」

第6章:ニオイ図鑑② 混ぜるな危険(UI・業務・DB)🍲💥

  • ねらい🎯:「混在」が何を壊すか理解する

  • 主な内容📚

    • UI変更で業務が壊れる/DB変更で画面が壊れる…の地獄😱
    • “境界”を作ると安心になる😌
  • ハンズオン🛠️

    • UI/業務/DBの処理を3つの箱に仕分けする📦📦📦
  • AIプロンプト🤖

    1. 「このコードを UI / 業務 / I/O に分類して、混ざってる箇所を指摘して」

第7章:高凝集①「責務で切る」✂️🎯

  • ねらい🎯:クラスを“役割”で分けられるようになる

  • 主な内容📚

    • 1クラス1テーマ(ただし細かすぎ注意)⚖️
    • 「誰の責任?」で迷った時の考え方🧠
  • ハンズオン🛠️

    • 大きめクラスを2〜3クラスに分割し、公開メソッドを最小にする🔒
  • AIプロンプト🤖

    1. 「分割後のクラスの責務をそれぞれ一文で説明して」

第8章:高凝集②「データと振る舞いを近づける」🏠✨

  • ねらい🎯:バグが入りにくい“まとまり”を作れるようになる

  • 主な内容📚

    • “データだけのクラス”が増える問題📦
    • ルール(計算・検証)をデータの近くへ寄せる🧷
  • ハンズオン🛠️

    • 金額・割引・期限などのルールを、適切なクラスへ移す💰⏳
  • AIプロンプト🤖

    1. 「この検証ロジックはどこに置くのが自然?理由つきで候補を3つ」

第9章:高凝集③「命名で設計する」🏷️💖

  • ねらい🎯:名前で責務をハッキリさせる

  • 主な内容📚

    • Manager/Utilが増えたら黄色信号🚦
    • メソッド名は“意図”を表す(何を保証する?)🗣️
  • ハンズオン🛠️

    • いまいちな名前をリネームして、責務が透ける状態にする✨
  • AIプロンプト🤖

    1. 「このクラス/メソッドの命名案を10個。責務が伝わる順に並べて」

第10章:低結合の入口「依存」を見える化👀🔗

  • ねらい🎯:どこが密着してるか把握できる

  • 主な内容📚

    • new / static / 具体クラス参照=依存が強くなりやすい📌
    • 依存の矢印を書くだけで危険箇所が見える🕸️
  • ハンズオン🛠️

    • 依存関係図(簡易でOK)を描いて、変更が波及しそうな線を探す🖊️
  • AIプロンプト🤖

    1. 「このコードの依存関係を文章で説明して(どこが変更に弱い?)」

第11章:低結合① まずは「引数で渡す」🎁✨

  • ねらい🎯:“中で作らない”感覚を身につける

  • 主な内容📚

    • 依存を外から渡す(メソッド引数/コンストラクタ引数)📦
    • 小さな一歩で結合が下がる😌
  • ハンズオン🛠️

    • newしている箇所を外に出して、引数で受け取るように変更する🔁
  • AIプロンプト🤖

    1. 「この new を外に出すなら、引数に何を渡す設計が良い?」

第12章:低結合② interfaceで差し替え(超入門)🔌✨

  • ねらい🎯:「交換できるって気持ちいい!」を体験する

  • 主な内容📚

    • interface=契約(約束)📜
    • Clock/Logger/Repositoryみたいな“外側”が第一対象⏰🪵💾
  • ハンズオン🛠️

    • IClock(現在時刻)を差し替えて、テストしやすくする⏰➡️🧪
  • AIプロンプト🤖

    1. 「この依存を interface 化するとしたら、最小限のメソッドは何?」

第13章:低結合③ DI(依存性注入)※コンテナ無し💉✨

  • ねらい🎯:DIの本質(差し替え)を理解する

  • 主な内容📚

    • コンストラクタ注入が基本👶
    • “組み立て場所”を作る(超やさしいComposition Root)🏗️
  • ハンズオン🛠️

    • Program側で依存を組み立てて渡すだけのDIを完成させる✅
  • AIプロンプト🤖

    1. 「この構成で“組み立て役”はどこに置くのが自然?理由も」

第14章:結合の種類① フラグ引数をやめる🚩💦

  • ねらい🎯:制御結合(分岐だらけ)を減らせる

  • 主な内容📚

    • bool引数で挙動が変わる=責務が混ざりやすい🍲
    • 解決:メソッド分割/方針(Strategyっぽく)🧩
  • ハンズオン🛠️

    • フラグ引数を「別メソッド」または「方針オブジェクト」に置き換える🔁
  • AIプロンプト🤖

    1. 「このフラグ分岐を分割する案を3つ(メリデメつき)」

第15章:結合の種類② static依存(便利だけど代償)⚡💣

  • ねらい🎯:staticの“効きすぎ”をコントロールできる

  • 主な内容📚

    • staticは差し替えが苦手=テストと変更に弱い🧪💦
    • 解決:ラッパー化→interface化(必要な時だけ)🔌
  • ハンズオン🛠️

    • static呼び出しをラッパークラスに移し、差し替え可能にする🔁
  • AIプロンプト🤖

    1. 「この static 依存を弱める最小変更案を出して(段階的に)」

第16章:モジュール境界(迷子防止の構造づくり)📁🧭🔒

  • ねらい🎯:プロジェクトが大きくなっても崩れない土台を作る

  • 主な内容📚

    • まずはフォルダ分け+配置ルール(小さく始める)📏
    • 公開面を絞る(public/internalの考え方を超入門で)🔒
    • UI/業務/I/Oの置き場所を固定する📦
  • ハンズオン🛠️

    • サンプルを「UI」「Application」「Domain」「Infrastructure」に仕分け(超ざっくりでOK)🗂️
  • AIプロンプト🤖

    1. 「この機能を4つの箱(UI/App/Domain/Infra)にどう仕分ける?理由も」

了解〜😊🎀 じゃあ 第16章=構造づくり(迷子防止の土台)第17章=総まとめミニプロジェクト に分けた、**ちゃんとした全体章立て(17章)**を出すね✨ (Windows+Visual Studio前提🪟🛠️/必要ならVS Code補足OK/AI支援前提🤖)


全体の章立て:高凝集・低結合(C#超入門)17章アウトライン📚✨

第1章:AI支援の使い方(この教材の共通ルール)🤖✨

  • ねらい🎯:AIを“便利に使って、混乱しない”状態になる

  • 主な内容📚:案出しはAI💡/最終判断は人間🧠✅(責務混在🍲・依存増加🔗をチェック)/1章1〜2プロンプト🎀

  • ハンズオン🛠️:AI案を採用/不採用に分けて理由を書く📝

  • AIプロンプト🤖

    1. 「責務を3つに分ける案をクラス名つきで」
    2. 「その案は責務混在/依存増になってない?危険点3つ」

第2章:まず“変更が怖い”を体験する😱➡️😄

  • ねらい🎯:なぜ高凝集・低結合が必要か体感する

  • 主な内容📚:変更が波及する典型例💥/壊れ方のパターン

  • ハンズオン🛠️:小変更でどこが壊れるか記録する📒

  • AIプロンプト🤖

    1. 「変更が怖いポイントを5つ、理由つきで指摘して」

第3章:用語をやさしく理解(凝集/結合)📚✨

  • ねらい🎯:「良い/悪い」を言葉にできる

  • 主な内容📚:高凝集=目的でまとまる🎯/低結合=依存が必要最小🔗/結合ゼロは目標じゃない🙅‍♀️

  • ハンズオン🛠️:短いコード例で“凝集/結合”判定クイズ🧩

  • AIプロンプト🤖

    1. 「このクラスの責務を一文で説明して(短く)」

第4章:設計の判断軸は「変更理由」🧠✨

  • ねらい🎯:分け方の基準を覚える(好みで分けない)

  • 主な内容📚:変更理由が同じものをまとめる🧲/UI・業務・外部I/Oを混ぜない🚪

  • ハンズオン🛠️:要件から「変わりそうな点」→境界線を引く🗺️

  • AIプロンプト🤖

    1. 「この機能の変更理由を5つ挙げて(UI/業務/I/Oで分類)」

第5章:ニオイ図鑑① God Class(何でも屋)🧟‍♀️💦

  • ねらい🎯:巨大クラスを見抜いて分割の入口に立つ

  • 主な内容📚:症状の見分け方👀/責務ラベルで分解🏷️

  • ハンズオン🛠️:色分け→分割候補クラスを作る🎨

  • AIプロンプト🤖

    1. 「責務でグルーピングして、分割後のクラス名案も出して」

第6章:ニオイ図鑑② 混ぜるな危険(UI・業務・DB)🍲💥

  • ねらい🎯:混在が“変更の地獄”を生む理由を理解

  • 主な内容📚:UI変更で業務が壊れる/DB変更で画面が壊れる😱

  • ハンズオン🛠️:UI/業務/I/Oを3箱に仕分け📦📦📦

  • AIプロンプト🤖

    1. 「このコードをUI/業務/I/Oに分類して、混在箇所を指摘して」

第7章:高凝集①「責務で切る」✂️🎯

  • ねらい🎯:クラスを“役割”で分けられるようになる

  • 主な内容📚:1クラス1テーマ(細かすぎ注意⚖️)/公開メソッドを絞る🔒

  • ハンズオン🛠️:大きいクラスを2〜3クラスへ分割する🧩

  • AIプロンプト🤖

    1. 「分割後クラスの責務をそれぞれ一文で説明して」

第8章:高凝集②「データと振る舞いを近づける」🏠✨

  • ねらい🎯:ルールの置き場所で迷わなくなる

  • 主な内容📚:データだけクラス問題📦/検証・計算を近くへ🧷

  • ハンズオン🛠️:金額/期限などのルールを適切な場所へ移す💰⏳

  • AIプロンプト🤖

    1. 「この検証ロジックの置き場所候補を3つ、理由つきで」

第9章:高凝集③「命名で設計する」🏷️💖

  • ねらい🎯:名前で責務を“見える化”する

  • 主な内容📚:Manager/Util増殖の危険🚦/意図が伝わる名前🗣️

  • ハンズオン🛠️:リネームで責務が透ける状態へ✨

  • AIプロンプト🤖

    1. 「命名案を10個。責務が伝わる順に並べて」

第10章:低結合の入口「依存」を見える化👀🔗

  • ねらい🎯:密着ポイントを把握する

  • 主な内容📚:new/static/具体参照が強結合になりやすい📌/依存の矢印🕸️

  • ハンズオン🛠️:簡易依存図を書いて“危険な線”を探す✍️

  • AIプロンプト🤖

    1. 「依存関係を文章で説明して。変更に弱い順も教えて」

第11章:低結合① まずは「引数で渡す」🎁✨

  • ねらい🎯:“中で作らない”感覚を身につける

  • 主な内容📚:メソッド引数/コンストラクタ引数の使い分け📦

  • ハンズオン🛠️:new を外へ追い出し、引数で受け取る🔁

  • AIプロンプト🤖

    1. 「このnewを外に出すなら、何を引数にすべき?」

第12章:低結合② interfaceで差し替え(超入門)🔌✨

  • ねらい🎯:差し替え可能の気持ちよさを体験する

  • 主な内容📚:interface=契約📜/外側(時計・ログ・DBなど)から始める⏰🪵💾

  • ハンズオン🛠️:IClockなどを差し替えて動作を変える🔄

  • AIプロンプト🤖

    1. 「最小のinterface設計(メソッド最小)を提案して」

第13章:低結合③ DI(依存性注入)※コンテナ無し💉✨

  • ねらい🎯:DIの本質(差し替え)を理解して使える

  • 主な内容📚:コンストラクタ注入が基本👶/組み立て役(簡易Composition Root)🏗️

  • ハンズオン🛠️:Program側で依存を組み立てて注入する✅

  • AIプロンプト🤖

    1. 「この構成の“組み立て役”をどこに置くのが自然?理由も」

第14章:結合の種類① フラグ引数をやめる🚩💦

  • ねらい🎯:責務混在を生む分岐を減らす

  • 主な内容📚:boolで挙動が変わる=混ざりやすい🍲/分割・方針化🧩

  • ハンズオン🛠️:フラグ→別メソッド or 方針オブジェクトへ🔁

  • AIプロンプト🤖

    1. 「このフラグ分岐の改善案を3つ(メリデメつき)」

第15章:結合の種類② static依存(便利だけど代償)⚡💣

  • ねらい🎯:staticの“効きすぎ”をコントロールできる

  • 主な内容📚:差し替えできない=テストと変更に弱い🧪/ラッパー→interface化🔌

  • ハンズオン🛠️:static呼び出しをラッパーに閉じ込める📦

  • AIプロンプト🤖

    1. 「static依存を弱める最小変更案を段階的に出して」

第16章:モジュール境界(迷子防止の土台づくり)📁🧭🔒

  • ねらい🎯:プロジェクトが大きくなっても崩れない“置き場所ルール”を作る

  • 主な内容📚

    • フォルダ/名前空間のルール(小さく始める)📏
    • UI / Application / Domain / Infrastructure の箱分け📦
    • 公開面を絞る(public/internalの超入門)🔒
    • 依存の向き:内側(Domain)を守る🛡️
  • ハンズオン🛠️

    • 既存コードを4箱へ仕分けして「依存の矢印」が自然になるように整える✍️➡️
  • AIプロンプト🤖

    1. 「この機能を4箱(UI/App/Domain/Infra)にどう仕分ける?理由も」
    2. 「依存の向きが変になりそうな箇所を指摘して」

第17章:総まとめミニプロジェクト(設計→実装→最小テスト)💪🎉

  • ねらい🎯:学んだことを“自分の手で”再現できるようにする

  • 主な内容📚

    • 17A:設計だけ(責務・依存矢印・クラス一覧)🗺️
    • 17B:実装(高凝集・低結合を崩さず進める)🛠️
    • 17C:最小テスト(I/O差し替え1本だけでもOK)🧪
  • ハンズオン🛠️

    • 題材例:備品貸出📦/学食注文🍛/ToDo+締切通知✅(どれか1つ)
    • まず“設計が合格ライン”に達してから実装へ進む(迷子防止)🧭
  • AIプロンプト🤖

    1. 「この設計案に“責務混在”と“依存増えすぎ”がないか、危険点TOP5」
    2. 「最小テスト1本で守るべき仕様(壊れやすい所)を提案して」