Skip to main content

リファクタリング教材アウトライン(全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を 加速装置として安全に使える 🤖🛡️