1. ルーティングの設定方法
Next.js App Router は ファイルシステムベースのルーティング を採用している。
app/
ディレクトリ以下の構造がそのまま URL 構造になる。
基本ルーティング
-
app/page.tsx
→/
-
app/about/page.tsx
→/about
-
app/products/page.tsx
→/products
ネストルーティング
-
app/products/page.tsx
→/products
-
app/products/details/page.tsx
→/products/details
2. 特殊な役割を持つファイル名
App Router には、特定のファイル名が持つ「予約された意味」がある
ファイル名 | 役割 |
---|---|
page.tsx |
ページ本体(ルートに対応) |
layout.tsx |
ページ共通のレイアウト。子ルートを children としてラップ |
template.tsx |
共通レイアウト。遷移時に再レンダリング |
loading.tsx |
非同期処理中のローディングUI(Suspense) |
error.tsx |
レンダリングやフェッチエラー時の エラーページ |
not-found.tsx |
notFound() 実行時の 404 ページ |
head.tsx |
ページごとの <head> カスタマイズ |
route.ts |
APIルートの定義 |
3. ファイル構造とレンダリングの関係
ファイルとフォルダの構造が レンダリング時 の階層と一致する。
app/
├── layout.tsx # グローバルレイアウト
├── page.tsx # "/"
├── about/
│ ├── layout.tsx # "/about" 用レイアウト
│ └── page.tsx # "/about"
レンダリング順序:
app/layout.tsx → app/about/layout.tsx → app/about/page.tsx
4. 🔀 動的ルーティング
動的セグメントは、フォルダ名を角括弧で囲むことで作成できる
動的セグメントは、layout
、page
、route
、generateMetadata
関数にparams
propとして渡される
app/blog/[slug]/page.tsx → /blog/:slug
// app/blog/[slug]/page.tsx
export default function BlogPost({ params }) {
return <h1>{params.slug}</h1>;
}
静的生成のための generateStaticParams
generateStaticParams
関数は、動的ルートセグメントと組み合わせて使用することで、リクエスト時ではなくビルド時にルートを静的に生成できる。
export async function generateStaticParams() {
const posts = await fetchPosts();
return posts.map((post) => ({ slug: post.slug }));
}
5. プライベートフォルダ(アンダースコア _
)
アンダースコア _
で始まるフォルダはルーティングに含まれない。
app/
├── _components/
│ └── Header.tsx
用途例:
- UIロジックをルーティングロジックから分離する
- プロジェクト全体で内部ファイルを一貫して整理する
- コードエディタでファイルを整理およびグループ化する
- 将来のNext.jsファイル規約との潜在的な命名競合を回避する
6. ルートグループフォルダ
()
で囲まれたフォルダ名は、URL には影響しない。
URLパスの構造に影響を与えることなく、ルートセグメントやプロジェクトファイルを論理的なグループに整理することができる。
app/
├── (marketing)/
│ └── home/page.tsx # → /home
├── (dashboard)/
│ └── user/page.tsx # → /user
用途例:
- サイトのセクション、意図、チームごとにルートをグループ化する
- 同じルートセグメントレベルでネストされたレイアウトを有効にする
まとめ
概念 | 説明 |
---|---|
ルーティング構造 |
app/ 配下のディレクトリ構成が URL に対応 |
特殊ファイル |
page.tsx , layout.tsx , loading.tsx , error.tsx , など |
レンダリング構造 | フォルダ構造に基づいてレイアウトが適用される |
動的ルート |
[param] , generateStaticParams 対応 |
プライベート構造 |
_name フォルダで構造整理(ルーティング対象外) |
ルートグループ |
(name) フォルダでパスに影響を与えず構造管理 |