リファクタリング教材アウトライン(全40章)💎✨
対象:C# 初級〜中級/リファクタ初めて/設計は超入門者👩🎓💕 前提:Windows🪟/Visual Studio 2026💻/.NET 10 + C# 14🌟/Git + GitHub🌿/AI拡張(GitHub Copilot / OpenAI系)🤖✨
Part 0:スタート準備(第1〜6章)🌱🧰
第1章:リファクタリングって何?(修正・改修との違い)🔧✨
- ねらい🎯:動作を変えずに内部を良くするを体に入れる
- 学ぶこと📚:保守性/可読性/技術的負債のイメージ
- ミニ演習📝:同じ動作のまま「読みやすく」する例を読む👀
- VS/AI活用💡:差分(Diff)を読む練習📌
第2章:安全に進める“4つの基本”(小さく・頻繁に・確認・戻せる)🛡️🔁
- ねらい🎯:事故らない作法を最初に固定
- 学ぶこと📚:小ステップ/常に動く/コミット粒度/レビュー習慣
- ミニ演習📝:1回の変更を「さらに半分」に分割✂️
- VS/AI活用💡:AI提案は“1コミットに収まる量”に制限する🤖📌
第3章:開発環境セットアップ(VS中心・VS Code補助)🧰💻
- ねらい🎯:迷わない標準環境を揃える
- 学ぶこと📚:Visual Studio/dotnet SDK/Git/テスト実行/AI拡張の導入
- ミニ演習📝:新規ソリューション作成→実行→デバッグ確認✅
- VS/AI活用💡:Copilot Chat(またはAI拡張)をIDE内で使える状態にする🤖✨
第4章:ソリューションとプロジェクトの“地図”を読む📁🗺️
- ねらい🎯:構成が分かると怖くなくなる
- 学ぶこと📚:Solution/Project/参照/NuGet/フォルダ設計
- ミニ演習📝:プロジェクトの依存関係を簡単にメモする📝
- VS/AI活用💡:AIに「この構成の役割を説明して」と頼む🤖
第5章:デバッガ基礎(読む力=最強)🔍🧠
- ねらい🎯:リファクタ前に“正しく理解”できるように
- 学ぶこと📚:ブレークポイント/ステップ実行/ウォッチ/例外で止める
- ミニ演習📝:分岐の実際の値を追いかける👀
- VS/AI活用💡:怪しい箇所をAIに要約させる(ただし実行結果で確認)🤖✅
第6章:Gitの基本(リファクタはGitが命)🌿📌
- ねらい🎯:「戻せる」安心で挑戦できる
- 学ぶこと📚:コミット/ブランチ/差分/小さなPRの考え方
- ミニ演習📝:「1リファクタ=1コミット」を体験する🔁
- VS/AI活用💡:AIにコミットメッセージ案を作らせる📝🤖
Part 1:安全ネット(テスト&自動チェック)(第7〜12章)🧪🛡️
第7章:テスト超入門(“壊してない”を機械で確認)✅🧪
- ねらい🎯:リファクタの保険を持つ
- 学ぶこと📚:AAA(Arrange-Act-Assert)/テストの粒度
- ミニ演習📝:小さな関数にテスト1本🎀
- VS/AI活用💡:AIにテスト雛形を作らせて、自分で期待値を決める🤖✅
第8章:テストが無いコードの始め方(Characterization Test)🕵️♀️📸
- ねらい🎯:既存挙動を“固定”してから触る
- 学ぶこと📚:入力→出力の観測/副作用がある場合の工夫
- ミニ演習📝:既存メソッドの挙動をテストで写す📌
- VS/AI活用💡:AIに「観測ポイント候補」を出させる🤖🔎
第9章:静的解析&警告の読み方(まずQuick Actions)🚦✨
- ねらい🎯:IDEの指摘を味方にする
- 学ぶこと📚:警告レベル/提案の意味/自動修正の使い所
- ミニ演習📝:警告を3つ減らす🔧
- VS/AI活用💡:AIに「この警告の意味」を短く説明させる🤖📚
第10章:フォーマットとEditorConfig(読みやすさの土台)🧼📏
- ねらい🎯:スタイルの迷いを減らす
- 学ぶこと📚:整形/命名規則/自動整形/保存時の整形
- ミニ演習📝:保存時整形を設定し、差分を小さくする📌
- VS/AI活用💡:AIが提案したコードもフォーマットで統一する🤖✨
第11章:ログの基礎(困った時に追えるように)🧾🔍
- ねらい🎯:不具合の原因に辿り着ける状態へ
- 学ぶこと📚:ログレベル/何を残すか/1行の情報量
- ミニ演習📝:失敗ケースのログを読みやすくする🪄
- VS/AI活用💡:AIに「ログに入れるべき情報」を列挙させる🤖📋
第12章:例外の基礎(まず“投げる・握る”のルール)💥🚧
- ねらい🎯:例外が暴れない入口を作る
- 学ぶこと📚:throwの場所/catchの場所/握りつぶし禁止
- ミニ演習📝:catchしてた場所を整理し、メッセージ改善🛠️
- VS/AI活用💡:AIに「どこでcatchするのが自然?」を相談する🤖
Part 2:IDEでできる基本リファクタ(第13〜20章)🛠️🌸
第13章:Rename(名前で8割決まる)🏷️✨
- ねらい🎯:意図が伝わるコードへ
- 学ぶこと📚:命名のコツ(動詞/名詞/否定を避ける)
- ミニ演習📝:変数名・メソッド名を5つ改善🌟
- VS/AI活用💡:AIに命名案を出させ、最終決定は人間がする🤖✅
第14章:Extract Method(長いメソッドを切る)✂️📦
- ねらい🎯:“段落”で分けて読めるように
- 学ぶこと📚:まとまり/副作用の位置/引数の増えすぎ注意
- ミニ演習📝:1メソッド→3メソッドに分割🧩
- VS/AI活用💡:AIに「切る場所候補」を提案させる🤖🔎
第15章:Extract Variable / Inline(式を読みやすく)🧠✨
- ねらい🎯:複雑な式に“名前”を付ける
- 学ぶこと📚:意味のある中間変数/インラインの見極め
- ミニ演習📝:条件式を中間変数で整理🪄
- VS/AI活用💡:AIに「変数名候補」を複数出させる🤖🏷️
第16章:Introduce Constant(マジックナンバー退治)🔢🧯
- ねらい🎯:意味の分からない数値・文字列を消す
- 学ぶこと📚:定数名/スコープ(private/public)
- ミニ演習📝:3つのマジック値を定数へ🏷️
- VS/AI活用💡:AIに「定数名の意味」を説明させる🤖📚
第17章:ガード節(早期return)でネストを減らす🚪🌟
- ねらい🎯:ifの階段をなくす
- 学ぶこと📚:早期return/例外との使い分け
- ミニ演習📝:ネスト2段→1段へ⬇️
- VS/AI活用💡:AIに「ガード節化した版」を出させ、差分で確認🤖📌
第18章:条件式の分解(Explain Condition)🧩📝
- ねらい🎯:読めない条件を“読める言葉”に
- 学ぶこと📚:否定条件を減らす/判定関数(Is〜)
- ミニ演習📝:複雑条件を2〜3個の判定関数へ✂️
- VS/AI活用💡:AIに「条件の意味の言語化」を頼む🤖🗣️
第19章:Nullable Reference Types 基礎(null事故を減らす①)🧷🙂
- ねらい🎯:nullの可能性を型で表す
- 学ぶこと📚:
?/警告の意味/ArgumentNullExceptionの使い所 - ミニ演習📝:nullable警告を減らしつつ挙動確認✅
- VS/AI活用💡:AIに「安全なnull対応案」を複数出させる🤖🧠
第20章:ファイル整理(using・名前空間・配置)📁🧼
- ねらい🎯:探しやすいプロジェクトへ
- 学ぶこと📚:フォルダ構成/命名規則/関連物を近くに置く
- ミニ演習📝:同じ目的の型をまとめて移動🚚
- VS/AI活用💡:AIに「今の配置の問題点」を指摘させる🤖🔎
Part 3:コードスメル入門(第21〜27章)👃📚
第21章:コードスメルとは?(違和感を言葉にする)😮🔎
- ねらい🎯:直すべきサインが見えるように
- 学ぶこと📚:長いメソッド/巨大クラス/重複/密結合/引数多すぎ
- ミニ演習📝:サンプルからスメルを5つ発見👀
- VS/AI活用💡:AIに「スメル候補」を列挙させる🤖📋
第22章:長いメソッド攻略(“読めない”の原因を分解)📜✂️
- ねらい🎯:まず“読める段落”へ
- 学ぶこと📚:抽出/名前付け/責務の混在をほどく
- ミニ演習📝:段落コメント→抽出メソッドに置換🪄
- VS/AI活用💡:AIに「分割案3パターン」を出させる🤖✨
第23章:重複の見極め(DRYの正しい使い方)🧠⚖️
- ねらい🎯:共通化しすぎで逆に読みにくくしない
- 学ぶこと📚:「同じ知識」だけまとめる/偶然の一致は放置
- ミニ演習📝:重複1つを統合し、名前で意図を固定🏷️
- VS/AI活用💡:AIに「共通化していいか?」を理由付きで出させる🤖📝
第24章:巨大クラスのサイン(責務が混ざってる)🏢➡️🏠🏠
- ねらい🎯:分割タイミングが分かる
- 学ぶこと📚:変更理由が多い/フィールドが多い/メソッドが散らかる
- ミニ演習📝:責務ラベル(入力/計算/出力など)を付ける🏷️
- VS/AI活用💡:AIに「責務の分類」を手伝わせる🤖🗂️
第25章:引数が多い(Long Parameter List / Data Clumps)🧳💦
- ねらい🎯:まとまりを“型”にする感覚を掴む
- 学ぶこと📚:Parameter Object/関連引数のグループ化
- ミニ演習📝:引数6個→1つの型にまとめる📦
- VS/AI活用💡:AIに「まとめる単位案」を出させる🤖🧠
第26章:密結合のサイン(参照が多すぎる)🧲🪶
- ねらい🎯:影響範囲を小さくする入口へ
- 学ぶこと📚:依存の数/責務の境界/呼び出し関係の整理
- ミニ演習📝:外部参照を1つ減らす🔧
- VS/AI活用💡:AIに「依存が強い箇所」を推定させる🤖🔎
第27章:コメントに頼りすぎ(コードで語る)💬➡️🧾
- ねらい🎯:説明コメントが要らない状態へ
- 学ぶこと📚:命名/小関数/ガード節で“説明をコード化”
- ミニ演習📝:コメント1つを削除するための改善🪄
- VS/AI活用💡:AIに「コメントをコードに置き換える案」を出させる🤖✨
Part 4:設計っぽい改善を“小さく”始める(第28〜34章)🏗️🌼
第28章:Extract Class 実践(分割のやり方)✂️🏠
- ねらい🎯:責務を分けて読みやすく
- 学ぶこと📚:移す順序(フィールド→メソッド)/境界の作り方
- ミニ演習📝:1クラスを2クラスに分割📦
- VS/AI活用💡:AIに「分割後のクラス名候補」を出させる🤖🏷️
第29章:Encapsulate Field(直接触らせない)🔒✨
- ねらい🎯:変更点を入口に集める
- 学ぶこと📚:プロパティ/private set/公開範囲
- ミニ演習📝:フィールド直参照→プロパティ経由へ🧷
- VS/AI活用💡:AIに「公開すべき最小範囲」を提案させる🤖📏
第30章:不変条件の入口(無効状態を作らない①)🚧✅
- ねらい🎯:壊れたデータを中に入れない
- 学ぶこと📚:生成時検証/ガード/例外メッセージ
- ミニ演習📝:コンストラクタや更新メソッドに検証追加🛡️
- VS/AI活用💡:AIに「検証ルール候補」を列挙させる🤖📋
第31章:Value Object 入門(無効状態を作らない②)💎📏
- ねらい🎯:住所・金額・期間などを“型で守る”
- 学ぶこと📚:record/不変/等価性/検証を型の中へ
- ミニ演習📝:MoneyやDateRangeを型にして混在を防ぐ💰📅
- VS/AI活用💡:AIに「Value Object化の候補」を探させる🤖🔎
第32章:switch とパターンマッチで分岐を整理(読みやすさ)🎛️✨
- ねらい🎯:if連鎖をスッキリさせる
- 学ぶこと📚:switch式/パターン/ガード(when)
- ミニ演習📝:if連鎖→switchへ置換🙂
- VS/AI活用💡:AIに「switch化した案」を作らせ、差分で確認🤖📌
第33章:分岐をStrategyへ(多態性の入口)🧠🧩
- ねらい🎯:分岐が増え続ける問題を止める
- 学ぶこと📚:interface/実装の差し替え/責務分離
- ミニ演習📝:分岐の1ケースをStrategyクラスに切り出す✂️
- VS/AI活用💡:AIに「クラス分割案」を出させる🤖🏗️
第34章:例外の境界(投げる・変換する場所を決める)🚧💥
- ねらい🎯:例外処理を“設計”として整える
- 学ぶこと📚:境界で変換(UI/API層で整形)/内部は前提を信頼
- ミニ演習📝:例外メッセージと型を整理して利用側を簡単にする🧹
- VS/AI活用💡:AIに「境界候補(どこでcatchするか)」を相談🤖🗺️
Part 5:テスタブル設計へ(依存をほどく)(第35〜39章)🧪🧩
第35章:エラーモデリング入門(例外 vs Result)🚦📦
- ねらい🎯:エラーを仕様として扱えるように
- 学ぶこと📚:例外が向く場面/Resultが向く場面/分類(入力不正・外部失敗など)
- ミニ演習📝:入力不正をResultで返す形にしてUI表示を整える🪄
- VS/AI活用💡:AIに「分類ラベル」を付けさせる🤖🏷️
第36章:newしない設計(DI超入門:手動注入)🎁🔁
- ねらい🎯:差し替え可能でテストしやすく
- 学ぶこと📚:interface/コンストラクタ注入/Fake実装
- ミニ演習📝:時計・乱数・外部呼び出しを差し替え可能に⏰🎲
- VS/AI活用💡:AIにFake実装の雛形を作らせる🤖✅
第37章:外部依存を包む(Adapter / WrapperでSeamを作る)🧤🔌
- ねらい🎯:HTTP/DB/ファイル等を“中心”に入れない
- 学ぶこと📚:ラッパーの責務/DTO変換/境界で吸収
- ミニ演習📝:外部呼び出しを1枚ラップしてモック可能にする✅
- VS/AI活用💡:AIに「ラッパーの最小API」を設計させる🤖📏
第38章:I/O境界分離①(入出力を薄くして中心を守る)🧁🎯
- ねらい🎯:純粋ロジックを真ん中に置く
- 学ぶこと📚:入力整形/ロジック/出力を分ける
- ミニ演習📝:Console/GUI/DB処理を薄くしてロジック抽出🧼
- VS/AI活用💡:AIに「中心ロジック候補」を探させる🤖🔎
第39章:非同期コードのリファクタ(async/await・キャンセル・タイムアウト)⚡🧵
- ねらい🎯:非同期でも読みやすく事故らない
- 学ぶこと📚:責務分離(待つ場所)/CancellationToken/例外伝播
- ミニ演習📝:asyncメソッドを短くし、キャンセル対応を入れる⏳✅
- VS/AI活用💡:AIに「非同期の落とし穴チェック」を出させる🤖📋
Part 6:総合演習(第40章)🏁✨
第40章:総合ケーススタディ(レガシー1本を安全に改善)🧗♀️💖
-
ねらい🎯:実務の流れで“最後までやり切る”
-
進め方📌:
- ①観測(Characterization Test)📸
- ②小さくリファクタ(Rename/Extract/ガード節)✂️
- ③設計寄せ(Extract Class/Value Object/境界分離)🏗️
- ④テスト&静的解析で確認✅🚦
- ⑤コミットを積む(1リファクタ=1コミット)🌿📌
-
ミニ演習📝:最後に「Before/After」を差分で説明できるようにする🗣️✨
-
AI活用ルール🤖🛡️:
- 依頼は小さく(1コミット分)
- 提案は必ず差分レビュー
- テストが通らない提案は採用しない
- “意図”は人間が決める
この教材で身につく到達イメージ(ゴール)🌈✨
- 1つの改善を 安全に小さく積める ✅
- コードスメルを 言語化して直せる 👃🛠️
- “設計っぽい改善”を やりすぎずに導入できる 🏗️🌼
- AIを 加速装置として安全に使える 🤖🛡️