Day 5・React/Next.jsの超入門
Next.js App Router超入門
page.tsxでページを作り、サーバーコンポーネントとクライアントコンポーネントの違いを理解する。
Next.jsは「Reactで本物のWebサイトを作る」ための土台
Reactだけでは、ページの切り替え(ルーティング)やサーバー側の処理など、実際のWebサイトに必要な部品が足りません。それらをまとめて用意してくれるのがNext.js(ネクストジェイエス)です。現在の標準は(App Router)という方式で、フォルダの構造がそのままURLになるのが特徴です。
ルールはシンプルです。app というフォルダの下に page.tsx という名前のファイルを置くと、それが1つのページになります。フォルダ名がURLの一部になります。たとえば app/page.tsx はトップページ、app/about/page.tsx は /about のページです。
// app/page.tsx
// このファイルが置いてあるだけで / でアクセスできる
export default function HomePage() {
return (
<main>
<h1>ようこそ</h1>
<p>これはトップページです</p>
</main>
);
}- app/page.tsx → / (トップ)
- app/about/page.tsx → /about
- app/blog/page.tsx → /blog
- ページの中身は、これまで学んだReactコンポーネントそのもの
サーバーコンポーネントとクライアントコンポーネント
App Routerでは、コンポーネントは初期状態ではサーバーコンポーネントです。これは「サーバー側で実行され、できあがったHTMLだけがブラウザに届く」種類です。データベースやAPIキーなど、外に見せたくないものを安全に扱え、表示も速いのが利点です。ただし、useStateやonClickのような「ブラウザで動く機能」は使えません。
useStateやクリックイベントを使いたいときは、ファイルの先頭に "use client" と書いてクライアントコンポーネントにします。こちらはブラウザ側で動くので、状態やイベントを扱えます。前のレッスンのCounterのような対話的な部品はこちらです。
// このファイルの先頭に書く。ダブルクォートも含めてこの1行
"use client";
import { useState } from "react";
export default function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
{count}
</button>
);
}エラーになる
サーバーコンポーネント(use clientなし)でuseStateを使っている
// app/page.tsx ← use client がない
import { useState } from "react";
export default function Page() {
const [n, setN] = useState(0); // エラー
return <button onClick={() => setN(n + 1)}>{n}</button>;
}正しい
対話的な部品はクライアントに切り出す。表示は速いサーバー側のまま
// app/page.tsx (サーバー) は表示だけ担当
import Counter from "./Counter"; // Counter 側に "use client"
export default function Page() {
return (
<main>
<h1>ホーム</h1>
<Counter />
</main>
);
}なぜ2種類に分かれているのか
全部をブラウザで動かすと、送るコードが増えて表示が遅くなり、APIキーのような秘密も漏れやすくなります。基本はサーバー側で作り、ボタンや入力など「操作が必要な部分」だけをクライアントに切り出す。この分担で、速さと安全さを両立します。
AIにはこう聞く
「Next.js App Routerで /about ページを作りたい。どのフォルダに何を置く?」や「このコンポーネントで useState を使うと Error。原因は?」と聞くと、use client の付け忘れなど定番の原因を教えてくれます。型と "use client" の有無を自分で確認できれば、AIの提案の正しさを判断できます。
覚えることは2つ。フォルダに置いた page.tsx がページになること、そして状態やイベントを使う部品だけ先頭に "use client" をつけること。ここまでで、型で守られたReact/Next.jsの入り口に立てました。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
Next.jsのApp Routerで /about というURLのページを作るには、どのファイルを用意する?
コンポーネントで useState や onClick を使いたいのに使えない。まず確認すべきことは?
サーバーコンポーネントとクライアントコンポーネントの違いと使い分けを説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。