第17章:総合演習(完成)+ふりかえり(MVCが身についたか確認)🎓🌸
いよいよ最終章〜!✨ この章は 「動く」→「気持ちよく動く」→「人に説明できる」 まで仕上げて、CampusTodo を“作品”にします📚✅
1) この章のゴール🎯✨
ゴールはこの3つだけ覚えればOKだよ〜☺️💕
- CampusTodo 完成版にする✅
- MVCの責務(だれが何してるか)を言語化できる🗣️🧠
- **読みやすく整える(リファクタ+テスト+README)**🧹🧪📘
2) まずは「完成チェックリスト」✅🧾(ここが超大事!)
機能✅
- 追加(add)
- 一覧(list)
- 完了(done)
- 編集(edit)
- 削除(delete)
- 検索(search / list --q)🔍
- 並び替え(期限/重要度など)↕️
- 保存(終了→再起動しても残る)💾
つくり(MVC + Service + Repository)🧩
- View は 表示だけ(ルールや更新を持たない)🎨
- Controller は 入力→指示(交通整理)🚦
- Service は 処理の中心(Controllerを太らせない)🥗
- Repository は 保存の担当(外部と接続)🧲
- Model は ルールを守る(不変条件)🛡️
品質🧪
- Model or Service のテストが数本ある(正常/異常/境界値)📏
- 例外で落ちずに、やさしいメッセージが出る😌🚨
- 変数名・クラス名が納得できる(読める)👀✨
3) 仕上げ機能①:検索を入れて「使える感」爆上げ🔍✨

おすすめ仕様(シンプルでOK)🍀
search <keyword>:タイトルに含まれるものだけ出す- もしくは
list --q <keyword>(どっちでもOK)
ポイント:検索は Controller が頑張りすぎないで、Service に「検索して〜」ってお願いする形にしよう☺️🫶
Service側のイメージ(超ざっくり)🧠
public IReadOnlyList<TodoItem> Search(string keyword)
{
keyword = (keyword ?? "").Trim();
if (keyword.Length == 0) return GetAll(); // 仕様:空なら全部でもOK
return _repo.GetAll()
.Where(x => x.Title.Contains(keyword, StringComparison.OrdinalIgnoreCase))
.ToList();
}
StringComparison.OrdinalIgnoreCaseで大文字小文字ゆるく検索できて優しい😊✨
Viewはどうする?🎨
検索結果の表示は View に任せるだけでOK📋 (Viewは “見せ方” のプロなので、ここで頑張る💪)
4) 仕上げ機能②:並び替えで「気持ちよさ」UP↕️✨
まずはこの2つが鉄板🥇
- 期限が近い順(DueDate asc)⏰
- 重要度が高い順(Priority desc)🔥
例:Serviceで list を作る時にオプションとして受け取る感じ👇
public IReadOnlyList<TodoItem> GetList(ListOptions opt)
{
var items = _repo.GetAll().AsEnumerable();
if (!string.IsNullOrWhiteSpace(opt.Keyword))
items = items.Where(x => x.Title.Contains(opt.Keyword, StringComparison.OrdinalIgnoreCase));
if (opt.OnlyOpen)
items = items.Where(x => !x.IsDone);
items = opt.SortBy switch
{
SortBy.DueDate => items.OrderBy(x => x.DueDate),
SortBy.Priority => items.OrderByDescending(x => x.Priority),
_ => items
};
return items.ToList();
}
ListOptions は ViewModel じゃなくて “問い合わせ用の型” って感覚でOKだよ〜🧺✨(Modelを汚さないのがえらい👏)
5) 最終リファクタ:MVCの“責務”を整えて完成形へ🧹✨
ここは「設計の超入門者」が一番伸びるとこ!🌱
5-1) “依存の向き” 最終点検🔁🚦
- Controller → Service → Repository ✅
- View → ViewModel ✅
- Model →(Controller/Service/View/Repository)に依存しない ✅(基本ね!)
5-2) よくある「最終章あるある」😇
- Controller に処理が増えてる(Fat Controller)🍔 → Service に寄せよう🥗
- View に if が増えてる(表示ロジック地獄)🎨💥 → ViewModel 側で整形しよう🧺
- Repository があちこちで呼ばれてる🧲💦 → Service 経由に統一しよう✨
5-3) フォルダ構成を整える📁✨(例)
Models/Services/Repositories/Views/ViewModels/Controllers/
名前が揃うだけで、理解速度が一気に上がるよ〜🚀💕
6) テスト:最終章は「守り」を最低限つけて完成🛡️🧪✨
テストは欲張らなくてOK! 「壊れたら困るところだけ」 守ろう☺️
守る優先順位🥇
- Modelの不変条件🛡️
- Serviceの検索/並び替え/更新処理🔁
- Repository(ファイル保存)は最低限でもOK💾
ちなみに xUnit は v3 が .NET 8 以降をサポートしてて、CLIやVSでも扱えるよ〜🧪✨ (xUnit.net)
7) READMEを作って「作品」にする📘✨(超重要!)
提出物として強いのはここ!💪
READMEテンプレ(そのまま使ってOK)🧁
# CampusTodo 🧁✅
## できること
- Todoの追加 / 一覧 / 完了 / 編集 / 削除
- 検索 / 並び替え
- 保存(再起動しても残る)
## 使い方(コマンド例)
- add "レポート" --due 2026-01-20 --priority High
- list
- search "レポート"
- done 2
## アーキテクチャ(MVC)
- Controller:入力を受け取って Service に指示する
- Service:アプリの処理の中心(検索・更新など)
- Model:Todoのデータとルール(不変条件)
- View:表示だけ担当
- Repository:保存/読み込み担当(差し替え可能)
## フォルダ構成
(ここにツリーを書いてOK)
## テスト
- Model:タイトル空欄NG のテスト
- Service:検索と並び替えのテスト
これがあるだけで「説明できる人」感が出るよ〜!✨
8) “MVCの責務”を1枚メモにする📝✨(口で説明できる最強アイテム)

最後にこれを作ると、理解が定着するよ☺️💕
1枚メモの例📝
- Model:正しい状態を守る(タイトル空欄NG、期限の扱いなど)🛡️
- View:見た目(一覧の整形、色/記号、表示の工夫)🎨
- Controller:入力を解釈して、どの処理を呼ぶか決める🚦
- Service:アプリのユースケース(追加、完了、検索、並び替え)を実行🧠
- Repository:保存先(ファイル/DB)とやり取りする💾
9) AI活用(最終章の勝ちパターン)🤖🏆✨
Visual Studio の Copilot Chat は、VSのバージョンによってはインストーラーの推奨コンポーネントとして“統合体験”で入るよ〜(17.10以降の話)🤝 (Microsoft Learn) あと、VS上で Copilot を使う条件として VS 2022 17.8+ が案内されてるよ🪟🧠 (GitHub Docs)
最終章で使うと強いプロンプト集🧠💡
- 「このController、太りすぎてない?Serviceに移す候補を列挙して」🍔➡️🥗
- 「このメソッド名、意図が伝わる命名案を10個」🪄
- 「検索と並び替えの境界値テスト案を出して」📏🧪
- 「READMEをこのプロジェクト構成で下書きして(短めで)」📘
- 「MVCの責務を初心者向けに3パターンで説明して」🗣️✨
使い方のコツ:出力をそのまま採用せず、“自分の言葉”に直すと一気に身につくよ☺️🫶
10) ふりかえりクイズ(これ答えられたら勝ち🎉)🧠✨
- 「検索」は Controller と Service、どっちに置くのが自然?理由も言える?🔍
- View に if が増えてきた。どう直す?🎨
- Repository を Controller から直接呼ぶのはなぜ微妙?🧲
- Model の不変条件ってなに?例を1つ言える?🛡️
- 「このアプリのMVC責務」を30秒で説明できる?⏱️🗣️
11) 仕上げの“最新”メモ(今この瞬間の基準)🧾✨
-
.NET は .NET 10.0 が “latest” 扱いで、10.0.2 が 2026-01-13 リリースになってるよ💎 (Microsoft)
-
ついでに
global.jsonを置くと「環境差で動かない」を減らせるよ〜(SDK版固定)🧷- .NET 10.0 SDK は **10.0.102(2026-01-13)**が案内されてるよ📌 (Microsoft)
-
Visual Studio は **Visual Studio 2026(Version 18.x)**のリリースノートが公開されてるよ🛠️✨ (Microsoft Learn)
最終成果物(提出セット)🎁✨
- ✅ CampusTodo 完成版
- ✅ README(使い方+構造説明)📘
- ✅ MVC責務 1枚メモ📝
- ✅ テスト数本(Model/Service中心)🧪
必要なら次のメッセージで、**あなたの今のCampusTodoの構成(フォルダ構成 or クラス一覧)**を貼ってくれたら、 「最終章のチェックリスト」に沿って “どこをどう直すと完成形になるか” を、超具体で一緒に仕上げるよ〜☺️💪💖