Day 6・小さなアプリを作って公開する — 現場の地図
Next.jsとルーティング — 複数画面の考え方
ReactにNext.jsが何を足すのかを理解し、「ファイル=ページ」の発想と複数画面(ルーティング)の考え方をつかむ。
ReactにNext.jsは何を足すのか
Reactは「画面の部品を作る」道具です。とても優秀ですが、それだけでは足りないものがあります。たとえば「/about を開いたらこのページ、/blog を開いたらあのページ」という画面の切り替え(ルーティング)や、サーバー側でデータを取ってくる機能です。これらをまとめて用意してくれるのがNext.js(ネクストジェイエス)というフレームワークです。
たとえるなら、Reactは「エンジン」、Next.jsは「エンジンを積んだ車体一式」です。エンジン単体では道を走れません。ハンドル(ルーティング)、燃料系(サーバー機能)、車体(ビルドや配信の仕組み)がそろって、はじめて公道を走れる1台になります。実務でReactを使うとき、その多くはNext.jsの上で動いています。
Reactだけ
部品は作れるが、画面の切り替えやサーバー機能は自分で寄せ集める必要がある
// 部品(コンポーネント)は作れる
function About() {
return <h1>会社について</h1>;
}
// でも「/about で表示する」仕組みは別途用意が必要Next.js
ファイルを置くだけでページになり、ルーティングやサーバー機能が最初から付いてくる
// 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(シングルページアプリケーション)の考え方です。
import Link from "next/link";
export default function Nav() {
return (
<nav>
<Link href="/">ホーム</Link>
<Link href="/about">会社について</Link>
<Link href="/blog">ブログ</Link>
</nav>
);
}なぜ 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に噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
Next.jsがReactに主に足してくれるものはどれ?
Next.js(App Router)で /blog というページを作るには、どのファイルを用意する?
「ファイル=ページ」という発想と、a タグではなく Link を使う理由を説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。