Pages Router
別名: ページルーター / pages ディレクトリ / pages directory
Next.js が pages/ ディレクトリで提供する従来のルーティング方式。
ファイル名がそのまま URL になり、getServerSideProps などのデータ取得関数と _app / _document による共通化を使う。
App Router とは同じプロジェクトに共存できる。
公開:
定義
Pages Router は、Next.js が pages/ ディレクトリで提供する従来のルーティング方式です。pages/ 配下に置いたファイルのパスがそのまま URL になり、default export したコンポーネントがページとして描画されます。App Router が登場する前から使われてきた方式で、現在も引き続きサポートされています。
詳細
ページは既定でクライアント側にも配られるコンポーネントで、サーバー側のデータ取得は決まった名前の関数を export して行います。getServerSideProps はリクエストごと、getStaticProps はビルド時、getStaticPaths は動的セグメントの事前生成に使います。
全ページ共通の処理は pages/_app.tsx、HTML の外枠は pages/_document.tsx が担当します。
pages/
_app.tsx ← 全ページ共通のラッパー
index.tsx ← /
blog/
[slug].tsx ← /blog/:slug
api/
hello.ts ← /api/hello(API Routes)<title> などのメタ情報は next/head の <Head> で差し込みます。
App Router の metadata オブジェクトは Pages Router では読まれません。
API は pages/api/ の API Routes が担当し、App Router の Route Handler とは書き方が異なります。
よくある誤解
- App Router が来たので使えなくなった: 廃止されておらず、同じプロジェクトで
app/と併用できます。
ただし同じ URL を両方で定義することはできません。 app/向けの書き方がそのまま動く:metadataexport・"use client"・Server Component は App Router の仕組みで、pages/配下では効きません。
関連
新しい方式は App Router、App Router 側の API 定義は Route Handler を参照してください。
両方式の取り違えで起きる症状は Next.js の metadata が反映されない にまとめています。