【第17回】手で画面を書き換える限界を知る|フレームワークが要る理由(嫁子が教えるTS講座)

今回のゴール

ここから第4部(フロントエンド)です。前回(TypeScriptへの書き換え)で第3部は終わりました。全体の流れは講座の目次へ。


嫁子: 第4部からは、たぶんあなたが「Webアプリを作る」と聞いて想像してたものに近づくよ。

ただ今日は道具の紹介じゃなくて、なんでその道具が生まれたのかの話をするね。ここを飛ばすと、Next.jsが「よく分からないけど皆が使ってるもの」のままになっちゃうから。


① 第2部で作ったアプリの、どこが限界だったか

第10回の買い物メモを思い出してください。品物を追加するたびに、こう書いていました。

items.push({ name: name, done: false });
render();

データを変えたあと、自分で render() を呼んでいます。呼び忘れたら、データは増えているのに画面は古いままです。エラーも出ません。

品物3つのアプリなら覚えていられます。ところが画面に「残り件数」「合計金額」「未購入だけのリスト」「並び替え」が加わると、データを変える場所も画面を直す場所も増えていきます。

アプリの規模 データを変える場所 忘れずに更新すべき箇所
買い物メモ(第10回) 3か所 1か所(render)
現実のアプリ 数十か所 十数か所

「呼び忘れ」が起きる確率は、掛け算で増えていきます。


② 命令的に書くか、宣言的に書くか

第2部のやり方は、手順を一つずつ命令する書き方でした。

// 命令的:どうやって画面を変えるかを、全部書く
list.textContent = "";
items.forEach((item) => {
  const li = document.createElement("li");
  li.textContent = item.name;
  list.appendChild(li);
});

Reactでは、こう書きます。

// 宣言的:どういう画面であるべきかだけ書く
<ul>
  {items.map((item) => <li key={item.name}>{item.name}</li>)}
</ul>

違いは手順を書いているか、結果を書いているかです。上は「空にして、作って、くっつけて」と手順を並べています。下は「items の中身がそのまま li として並んだ状態」と、あるべき姿だけを書いています。

そして items が変わると、画面は自動で追いつきます。render() に相当する呼び出しは要りません。

嫁子: 料理で言うとね。命令的は「レシピの手順書」、宣言的は「完成写真」なの。

手順書だと、途中で材料が変わったとき全部書き直しでしょ。完成写真を渡す方式なら、材料が変わっても写真の指定はそのままでいい。差分を考えるのは道具の仕事、っていう分担だね。


③ Reactが実際にやっていること

「自動で追いつく」と言っても、魔法ではありません。裏では第9回でやったDOM操作が動いています。

Reactは、データが変わるたびに「本来こうあるべき画面」を計算し直し、いま表示されている画面と見比べて、違う部分だけを書き換えます。

だから第9回であなたが手でやっていた作業は消えたわけではなく、書く人が人間から機械に変わっただけです。

ここが「第9回をやった意味」です。中で何が起きているか想像できると、うまく動かないときに「これはデータ側の問題か、表示側の問題か」を切り分けられます。


④ ReactとNext.jsの関係

名前が2つ出てきて混乱しやすいので、整理します。

役割 たとえるなら
React 画面を部品に分けて、データと同期させる仕組み エンジン
Next.js Reactを使ってサイトを作るための、周辺一式 車

Reactだけでは、ページの切り替え(ルーティング)や、サーバー側の処理、公開用のファイル生成といったものが付いてきません。それらを最初から用意してあるのがNext.jsです。

この講座がNext.jsを選ぶ理由は3つあります。

嫁子: 「ReactとNext.jsどっちを学べばいいの?」ってよく聞かれるけど、並んでいる選択肢じゃないんだよね。

Next.jsを使う=Reactも使ってる、なの。だから今日から出てくるコードは、両方が混ざってる状態だと思っておいて。


⑤ 何が楽になり、何が増えるのか

正直に両面を書いておきます。

楽になること

増えること

小さなツール1つなら、第9回のやり方のほうが速いこともあります。判断の目安は「画面に出る情報が、データの変化で何か所も変わるかどうか」です。

嫁子: 全部これで作れ、とは言わないよ。ページ1枚の計算ツールなら、素のJavaScriptで十分なこともあるからね。

ただ、AIに任せるなら話が変わるの。AIが得意なのは、みんなが使っている型に乗ったコードだから。Next.jsの標準的な構成で頼んだほうが、返ってくるものの質は上がるよ。


つまずきポイント

「フレームワーク」という言葉に身構えなくて大丈夫です。やっていることは、面倒な繰り返しを肩代わりする仕組みの集まりです。

第2部・第3部の知識はそのまま使います。配列も関数も型も、そのまま出てきます。新しく覚えるのは書き方の枠組みだけです。


今回のまとめ


次にやること

次回はNext.js を動かすです。実際にプロジェクトを作って、ブラウザで表示するところまでやります。

今回の宿題:AIに「なぜReactが必要なのか、DOM操作と比べて説明して」と聞いてみてください。今日読んだ内容と照らして、説明が腑に落ちるかどうかを確かめるのが目的です。

嫁子: 同じ質問を人にもAIにもぶつけて、答えを見比べるのって良い勉強法だと思う。

今日の回を読んだあとなら、返ってきた説明の良し悪しが分かるはずだよ。それができたら、もう「ただ読む人」ではないからね。