第1章:MVCってなに?まず“分ける理由”をつかもう🧠✨
1) この章のゴール🎯
この章が終わったら、あなたが 自分の言葉で こう言えるようになるのがゴールだよ〜💬✨
- MVCって、Model / View / Controller の役割分担だよね〜👯♀️
- “分ける”と、UI変更とか機能追加が ラクになる理由が説明できる💪
- Todoアプリ(CampusTodo)を見て、どれがModel/View/Controllerか ざっくり仕分けできる🧺✅
2) まず「混ぜる」と何が起きる?😇💥
最初にありがちなやつ👇 1ファイルに全部書くと、最初は速いけど…後からつらい😂
- 画面をちょっと変えたら、保存処理が壊れる😵
- バリデーション直したら、表示が崩れる😵💫
- 「どこ触ればいいの?」が毎回迷子🧭💦
たとえば、こういう“ごちゃ混ぜ”の未来が来がち👇

// 例:やりたいこと全部ここに書いちゃう(つらいやつ😇)
addButton.onclick = () => {
const title = input.value.trim();
if (title === "") {
error.textContent = "入力してね";
return;
}
todos.push({ id: Date.now(), title, done: false });
localStorage.setItem("todos", JSON.stringify(todos));
list.innerHTML = ""; // 表示もここで全部…
for (const t of todos) {
const li = document.createElement("li");
li.textContent = t.title;
list.appendChild(li);
}
};
このコード、何が問題かというと…
- UI(DOM操作)
- ルール(空欄NG)
- データ(todos)
- 保存(localStorage)
…が ぜんぶ一緒 で、どれかを変えると連鎖で壊れやすいの🥲💣
3) MVCってなに?ひとことで言うと…🧩✨
MVCは、UIまわりの作り方でよく使われる「設計パターン」だよ〜📚 Model / View / Controller に分けて、役割をごちゃ混ぜにしないのがポイント✨ MDNも「UI・データ・制御ロジックを分ける」って説明してるよ。(MDN Web Docs)
4) 3人チームで考えると超わかりやすい👯♀️👯♀️👯♀️

🧺 Model(モデル):データとルール担当📦🛡️
- Todoのデータ(例:
title,done)を持つ - ルール(例:タイトル空欄NG)を守る
- 画面のこと(DOM)を知らないのが大事🙅♀️
イメージ: 「課題メモの台帳係」📒✨(中身とルールを守る担当)
🎨 View(ビュー):見た目担当👀✨
- 画面に描く(DOMを作る/更新する)
- 見た目の調整(並べ方、文言、色など)
- ルール判断や保存はやらない(やり始めると太る🐷💦)
イメージ: 「掲示板係」📌(見やすく貼り出す担当)
🚦 Controller(コントローラ):交通整理担当🎮➡️🧠
- ボタン押した!入力された!…みたいな イベントを受ける
- Modelに「追加して〜」「完了切り替えて〜」ってお願いする
- その結果を View に「表示更新して〜」ってお願いする
イメージ: 「受付&指示係」🗣️(人の動きに合わせて指示する担当)
5) CampusTodoをMVCで仕分けしてみよう📝✅
CampusTodo(課題メモ)なら、こんな感じで分けられるよ〜🌸
- Model:Todoの配列、
addTodo()、toggleDone()、(あとで)ルール🛡️ - View:一覧を描画する、エラー表示する、入力欄をクリアする🎨
- Controller:クリックや送信イベントを受けて、Model更新→View再描画🚦
6) MVCが“回る”ってこういうこと🌀✨
超ざっくりの流れはこれ👇
- ユーザーが操作(クリック/入力)👆
- Controller が受け取る🚦
- Model を更新する📦
- View が Model の状態を表示する🎨
MDNでも、Model/View/Controllerの役割がこう整理されてるよ。(MDN Web Docs)
7) ミニ演習🧪:Todoの処理を3つに分解してみよう✂️✨
ここ、手を動かすと一気に理解できるよ〜🙌💕
演習A:仕分けゲーム🧺✅
次の「やりたいこと」を、Model / View / Controller に振り分けてみてね✍️
- ①「追加ボタンが押された」
- ②「入力が空欄ならエラーを出す」
- ③「Todoを配列に追加する」
- ④「一覧を画面に表示する」
- ⑤「保存する(あとでやる予定)」
ヒント💡
- 「押された/受け取った」は Controller
- 「データ増やす/ルール守る」は Model
- 「見せる/描く」は View
演習B:1本の処理をMVCに分割して“擬似コード”で書く📝
(まだプロジェクト作ってなくてもOK👌)
// Model(データ・ルール)
const model = {
todos: [] as { id: number; title: string; done: boolean }[],
add(title: string) {
// ルールはここに寄せたい(例:空欄NG)
this.todos.push({ id: Date.now(), title, done: false });
}
};
// View(表示だけ)
const view = {
render(todos: { id: number; title: string; done: boolean }[]) {
// DOMに描画(詳細は次章以降でOK)
},
showError(message: string) {
// エラー表示だけ
}
};
// Controller(イベント→指示)
function onAddClicked(inputText: string) {
if (inputText.trim() === "") {
view.showError("入力してね🥺");
return;
}
model.add(inputText.trim());
view.render(model.todos);
}
ポイントはこれだけ覚えればOK👍✨ 「Controllerが受けて、Modelを更新して、Viewが表示」 🌀
8) AI相棒の使い方🤖💡(この章でめっちゃ効くやつ)
GitHub Copilot には「提案」「チャット」「編集支援」など色々あるよね。(GitHub Docs) この章では “理解の補助” に使うのが超おすすめ🫶✨
そのまま使えるプロンプト例🎪
- 「MVCを学園祭に例えて、女子大生向けにやさしく説明して!絵文字多めで!」🎪💖
- 「この処理(貼り付ける)をModel/View/Controllerに分けるとしたら、どこに何を書く?」🧺✅
- 「Viewに入れちゃダメな処理って何?初心者がやりがちなミスも教えて」🙅♀️💦
AIの答えを“丸呑み”しないコツ🍬⚠️
- 出てきた提案に対して、**「それModelの責務?」**って毎回ツッコミを入れる😼✨
- 迷ったら 責務の境界 だけ相談する(実装は自分で)💪
9) よくある落とし穴あるある🐣💥(先に知ると勝ち)
- Viewが 保存 を始める(Viewが外部に触ると壊れやすい)💾❌
- Modelが DOM を触る(Modelは画面を知らない方が強い)🖥️❌
- Controllerがなんでもやって 太る(次の章以降で“痩せさせ方”やるよ🥗)🍔➡️🥗
10) まとめ🎀
- MVCは 役割分担:Model(データ/ルール)・View(表示)・Controller(交通整理)✨ (MDN Web Docs)
- “分ける”と、変更に強くなる💪
- CampusTodoは MVCの練習題材にちょうどいい📚✅
- AI相棒は「理解の補助」と「仕分けレビュー」に使うと最強🤖✨ (GitHub Docs)
🔎ちょい最新メモ(2026の空気感)🆕✨
- TypeScript は npm 上で 5.9.3 が最新として案内されてるよ。(npm)
- TypeScriptチームは、将来的な高速化のために ネイティブ実装(TypeScript 7 Native Preview) も進めてるよ(大規模プロジェクトでビルド時間が大幅短縮の報告も)。(Microsoft Developer)
- VS Code 側も Copilot 体験を整理して「Copilot Chat 側に統合していく」流れがあるよ。(Visual Studio Code)
次の第2章では、いよいよ CampusTodo を動かす準備に入るよ〜🚀🧑💻✨