Dynamic RoutesとRoute Groups
[slug] dynamic segments、(folder)によるroute groups、parallel routesを作成します。
「Dynamic RoutesとRoute Groups」はCoddyKit上の無料React Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
動的セグメント
フォルダ名を角括弧で囲むと、動的セグメントを作成できます。その値は、ページに渡されるparamsから取得できます。
// app/products/[id]/page.tsx
export default function ProductPage({ params }: { params: { id: string } }) {
return <h1>Product {params.id}</h1>;
}
// → /products/123 → params.id = '123'型付きParams
URL内のParamsは常に文字列です。数値IDとして扱う場合は、明示的にパースしてください。
export default async function PostPage({ params }: { params: { slug: string } }) {
const post = await getPostBySlug(params.slug);
if (!post) notFound();
return <article>{post.content}</article>;
}キャッチオールセグメント
[...slug]を使用すると、任意の数のパスセグメントに一致させられます。その値は文字列の配列です。
// app/docs/[...path]/page.tsx
export default function DocsPage({ params }: { params: { path: string[] } }) {
// /docs/react/hooks → params.path = ['react', 'hooks']
return <DocViewer path={params.path} />;
}オプショナルキャッチオール
[[...slug]]はルートセグメントにも一致します。オプションのパスプレフィックスに便利です。
// app/[[...lang]]/page.tsx
// Matches /, /en, /en/about, /fr/products/123
export default function Page({ params }: { params: { lang?: string[] } }) {
const lang = params.lang?.[0] ?? 'en';
return <div lang={lang}>...</div>;
}generateStaticParams
generateStaticParams()をエクスポートすると、ビルド時に動的ルートを事前レンダリングし、パラメーターの組み合わせごとに静的HTMLを生成できます。
export async function generateStaticParams() {
const posts = await getPosts();
return posts.map(p => ({ slug: p.slug }));
}
// → builds /blog/hello-world, /blog/react-tips etc. staticallyルートグループ — (folder)
フォルダ名を括弧で囲むと、ルートグループを作成できます。URLセグメントを追加せずにファイルを整理できます。
// File structure:
// app/(marketing)/about/page.tsx → /about
// app/(marketing)/blog/page.tsx → /blog
// app/(app)/dashboard/page.tsx → /dashboard
// (marketing) and (app) don't appear in URLs共有レイアウトを持つルートグループ
各ルートグループには独自のlayout.tsxを配置できます。URLをネストせずに、セクションごとに異なるレイアウトを適用できます。
// app/(marketing)/layout.tsx — marketing shell
// app/(app)/layout.tsx — authenticated app shell
// Both groups share app/layout.tsx as the root並列ルート — @slot
フォルダ名の先頭に@を付けると、スロットを作成できます。スロットは親レイアウト内で同時にレンダリングされます。モーダル、分割画面、タブなどに便利です。
// app/@modal/login/page.tsx
// app/layout.tsx
export default function RootLayout({ children, modal }) {
return (
<div>
{children}
{modal} {/* renders @modal/login/page.tsx side by side */}
</div>
);
}インターセプトルート — (..)
(..)記法を使用すると、ルートをインターセプトしてインラインでレンダリングできます。たとえば、新しいページへ移動する代わりに写真をモーダルで開けます。
// Soft navigation shows modal:
// app/@modal/(..)/photos/[id]/page.tsx
// Hard navigation shows full page:
// app/photos/[id]/page.tsx動的ルートメタデータ
動的ルートで非同期のgenerateMetadata関数をエクスポートすると、ルートのParamsに基づいてページごとのSEOタグを設定できます。
export async function generateMetadata({ params }: { params: { id: string } }) {
const product = await getProduct(params.id);
return { title: product.name, description: product.description };
}確認問題
Next.jsのApp Routerでフォルダ名を括弧で囲むと、どうなりますか?
まとめ
[id]は動的セグメントを作成し、[...slug]はすべてのサブパスをキャッチし、[[...slug]]はそれらをオプションにします。(name)を使ったルートグループは、URLに影響を与えずにコードを整理し、グループごとのレイアウトを可能にします。ビルド時の事前レンダリングにはgenerateStaticParamsを使用します。
よくある質問
「Dynamic RoutesとRoute Groups」レッスンは無料ですか?
はい。「Dynamic RoutesとRoute Groups」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「Dynamic RoutesとRoute Groups」で何を学びますか?
[slug] dynamic segments、(folder)によるroute groups、parallel routesを作成します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Dynamic RoutesとRoute Groups」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- App Routerのファイル規約
- Next.jsのServer ComponentsとClient Components
- Dynamic RoutesとRoute Groups
- Metadata APIとApp RouterのSEO