なぜReactを使うのか
このページで学ぶこと
- 素のHTML/JS だけでは何が辛いかがわかる
- React がどんな問題を解決するかがわかる
- Next.js と React の関係がわかる
- Next.js プロジェクトのセットアップ方法がわかる
なぜ必要か(読む時間: 3〜4分)
素のHTML/JSでTodoアプリを作ると…
「Web・プログラミング基礎」でHTML/CSS/JSを学びました。
では、「ボタンを押したらTodoリストが増える」というアプリを素のJSで作るとどうなるでしょうか。
<!-- index.html -->
<ul id="todo-list"></ul>
<input id="input" type="text" />
<button onclick="addTodo()">追加</button>
<script>
function addTodo() {
const input = document.getElementById('input')
const li = document.createElement('li')
li.textContent = input.value
document.getElementById('todo-list').appendChild(li)
input.value = ''
}
</script>これくらいなら書けます。でも、機能が増えてきたら?
- 「完了したTodoはグレーにする」
- 「Todoを削除できる」
- 「未完了の件数を上部に表示する」
- 「完了済みだけフィルタリングする」
コードはすぐ複雑になります。「どのDOMがどの状態を持っているか」を追いかけるのが辛くなり、バグが増えます。
Reactが解決すること
React の考え方はシンプルです:
「データ(state)が変わったら、UIを自動的に更新する」
手動でDOMを操作する必要がなくなります。
素のJS: データが変わる → 自分でDOMを探して書き換える(手動)
React: データが変わる → UIが自動で再描画される(自動)コンポーネントという考え方
React では、UIをコンポーネントという部品に分けて作ります。
ページ全体
├── ヘッダーコンポーネント
├── Todoリストコンポーネント
│ ├── Todoアイテムコンポーネント(×何個も)
│ └── ...
└── フッターコンポーネント部品ごとに独立して作れるので、複雑なUIでも管理しやすくなります。
React と Next.js の関係
| 説明 | |
|---|---|
| React | UIを作るためのライブラリ。コンポーネント・state などの仕組みを提供する |
| Next.js | Reactをベースに作られたフレームワーク。ルーティング・SSR・APIルートなど実用的な機能が揃っている |
React だけでもアプリは作れますが、Next.js を使うとルーティングや API サーバーの機能が最初から使えて便利です。
とんペディアでは Next.js 16 の App Router を使います。
Next.jsプロジェクトをセットアップしよう
ステップ1: プロジェクトを作成する
ターミナルを開いて、以下のコマンドを実行してください。
cd ~/Desktop
npx create-next-app@latest my-appいくつか質問が出るので、以下のように答えてください。
Ok to proceed? (y) ... y
√ Would you like to use the recommended Next.js defaults? » No, customize settings
√ Would you like to use TypeScript? ... No (←この章ではJavaScriptで学ぶため)
√ Which linter would you like to use? » Biome (←Linter (コードの品質をチェックするツール) は Biome を使用)
√ Would you like to use React Compiler? ... Yes (←Webサイトのパフォーマンスを自動調整してくれるツール)
√ Would you like to use Tailwind CSS? ... No (←あとで追加する)
√ Would you like your code inside a `src/` directory? ... No (←この章では `src/` なしの構成で学ぶ)
√ Would you like to use App Router? (recommended) ... Yes (←必ずYesを選ぶ!)
√ Would you like to customize the import alias (`@/*` by default)? ... No (←デフォルトのままでOK)
√ Would you like to include AGENTS.md to guide coding agents to write up-to-date Next.js code? ... Yes (←AIが参照するためのガイドを含めるか。YesでOK)ステップ2: 開発サーバーを起動する
まずは、先ほど作成したプロジェクトを VSCode で開いてみましょう。
cd my-app
code .VSCode が起動したらターミナルを起動(Windowsは Ctrl + Shift + @、Macは Ctrl + “)して、以下のコマンドを実行してください。
npm run devhttp://localhost:3000 をブラウザで開いて、Next.js のデフォルト画面が表示されれば成功です。
Windows環境でWindowsファイアウォールの警告が出た場合は、とりあえず「キャンセル」で構いません。 開発サーバーに他の端末からアクセスしたい場合は「許可」をクリックしてください。
ステップ3: フォルダ構成を確認する
my-app/
├── app/ ← ページやレイアウトを置く場所(App Router)
│ ├── layout.js ← 全ページ共通のレイアウト
│ ├── page.js ← / にアクセスしたときに表示されるページ
│ └── globals.css ← 全ページで使用されるCSS
├── public/ ← 画像などの静的ファイル (そのまま配信したいファイルを置く場所)
├── package.json
├── AGENTS.md ← AIが参照するためのガイド
└── next.config.mjsステップ4: page.js を書き換えてみる
app/page.js を開いて、中身を全部消して以下に書き換えてみましょう。
// app/page.js
export default function Home() {
return (
<main>
<h1>こんにちは、React!</h1>
<p>Next.js のセットアップが完了しました。</p>
</main>
)
}ブラウザが自動でリロードされ、「こんにちは、React!」と表示されれば Next.js のセットアップは成功です!
JSの中に HTMLっぽいものが書ける?
これは JSX という記法です。JavaScriptの中にHTMLライクなコードが書けます。
実際にはJavaScriptに変換されて実行されますが、見た目はHTMLに近いので直感的に書けます。
確認しよう
-
npx create-next-app@latestでプロジェクトを作成した -
npm run devで開発サーバーが起動した -
app/page.jsを書き換えて、ブラウザに反映された
AIに聞いてみよう
「ReactのVirtual DOMとは何ですか?初心者向けに説明してください」