R初めてのReact

Day 6小さなアプリを作って公開する — 現場の地図

Next.jsとルーティング — 複数画面の考え方

ReactにNext.jsが何を足すのかを理解し、「ファイル=ページ」の発想と複数画面(ルーティング)の考え方をつかむ。

ReactにNext.jsは何を足すのか

Reactは「画面の部品を作る」道具です。とても優秀ですが、それだけでは足りないものがあります。たとえば「/about を開いたらこのページ、/blog を開いたらあのページ」という画面の切り替え(ルーティング)や、サーバー側でデータを取ってくる機能です。これらをまとめて用意してくれるのがNext.js(ネクストジェイエス)というフレームワークです。

たとえるなら、Reactは「エンジン」、Next.jsは「エンジンを積んだ車体一式」です。エンジン単体では道を走れません。ハンドル(ルーティング)、燃料系(サーバー機能)、車体(ビルドや配信の仕組み)がそろって、はじめて公道を走れる1台になります。実務でReactを使うとき、その多くはNext.jsの上で動いています。

Reactだけ

部品は作れるが、画面の切り替えやサーバー機能は自分で寄せ集める必要がある

TSX
// 部品(コンポーネント)は作れる
function About() {
  return <h1>会社について</h1>;
}
// でも「/about で表示する」仕組みは別途用意が必要

Next.js

ファイルを置くだけでページになり、ルーティングやサーバー機能が最初から付いてくる

TSX
// app/about/page.tsx を置くだけで /about になる
export default function About() {
  return <h1>会社について</h1>;
}

ファイル = ページ という発想

Next.jsの現在の標準(App Router)では、フォルダの構造がそのままURLになります。app というフォルダの下に page.tsx を置くと、それが1つのページになります。フォルダ名がURLの一部です。この「ファイルを置く場所がURLを決める」という発想さえつかめば、複数画面のサイトの地図が頭に描けます。

  • app/page.tsx → /(トップページ)
  • app/about/page.tsx → /about
  • app/blog/page.tsx → /blog
  • ページの中身は、これまで学んだReactコンポーネントそのもの

画面から画面へ移動するときは、a タグの代わりに Link という部品を使います。Link を使うと、ページ全体を読み込み直さずに必要な部分だけ差し替わるので、切り替えが速く、体感がなめらかになります。これがSPA(シングルページアプリケーション)の考え方です。

TSX
import Link from "next/link";

export default function Nav() {
  return (
    <nav>
      <Link href="/">ホーム</Link>
      <Link href="/about">会社について</Link>
      <Link href="/blog">ブログ</Link>
    </nav>
  );
}
Link で画面を移動する。ページ全体を再読み込みしない

なぜ a タグではなく Link なのか

ふつうの a タグは、クリックするたびにページ全体をサーバーから読み込み直します(画面が一瞬白くなるあれ)。Link は必要な部分だけを差し替えるため、切り替えが速く、入力中の状態なども保たれます。速さと体感のなめらかさが、SPAの利点です。

よくある落とし穴: フォルダ名の綴りミス

URLはフォルダ名で決まるので、about を abuot と打つと /abuot でしか開けません。ページが「見つからない(404)」ときは、まずフォルダ名とファイル名(page.tsx)の綴りを疑いましょう。

AIにはこう聞く

「Next.js App Routerで /about と /blog の2ページを作りたい。どのフォルダに何を置けばいい?」と聞けば、フォルダ構成を示してくれます。手順の暗記より「ファイル=ページ」という発想を自分が持っていることが大事です。発想さえあれば、AIの答えが妥当か判断できます。

まとめると、Next.jsはReactに「ルーティング・サーバー機能・配信の仕組み」を足したフレームワーク。app の下に page.tsx を置けばページになり、移動は Link で行う。この地図を持てば、複数画面のサイト全体が見通せます。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

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

Q1

Next.jsがReactに主に足してくれるものはどれ?

Q2

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

Q3

「ファイル=ページ」という発想と、a タグではなく Link を使う理由を説明してください。

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