TS初めてのTypeScript

Day 5React/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 のページです。

TSX
// app/page.tsx
// このファイルが置いてあるだけで / でアクセスできる
export default function HomePage() {
  return (
    <main>
      <h1>ようこそ</h1>
      <p>これはトップページです</p>
    </main>
  );
}
app/page.tsx がトップページ(/)になる
  1. app/page.tsx → / (トップ)
  2. app/about/page.tsx → /about
  3. app/blog/page.tsx → /blog
  4. ページの中身は、これまで学んだReactコンポーネントそのもの

サーバーコンポーネントとクライアントコンポーネント

App Routerでは、コンポーネントは初期状態ではサーバーコンポーネントです。これは「サーバー側で実行され、できあがったHTMLだけがブラウザに届く」種類です。データベースやAPIキーなど、外に見せたくないものを安全に扱え、表示も速いのが利点です。ただし、useStateやonClickのような「ブラウザで動く機能」は使えません。

useStateやクリックイベントを使いたいときは、ファイルの先頭に "use client" と書いてクライアントコンポーネントにします。こちらはブラウザ側で動くので、状態やイベントを扱えます。前のレッスンのCounterのような対話的な部品はこちらです。

TSX
// このファイルの先頭に書く。ダブルクォートも含めてこの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" をつけると状態やイベントが使える

エラーになる

サーバーコンポーネント(use clientなし)でuseStateを使っている

TSX
// 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>;
}

正しい

対話的な部品はクライアントに切り出す。表示は速いサーバー側のまま

TSX
// 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に噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

Next.jsのApp Routerで /about というURLのページを作るには、どのファイルを用意する?

Q2

コンポーネントで useState や onClick を使いたいのに使えない。まず確認すべきことは?

Q3

サーバーコンポーネントとクライアントコンポーネントの違いと使い分けを説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。