← inaro.devAI駆動開発 学習ツール
基礎

動的ルート

なぜ学ぶか: ブログ記事が100本あるとして、100個のフォルダは作れません。「1つのファイルで無数のページを作る」のが動的ルートです。角カッコのフォルダ名という、知らないと読めない記法を種明かしします。

まずはこの例を見てみましょう

src/app/blog/[slug]/page.tsx
                    ↑
        [slug] = 「何でも入る枠」のフォルダ名

/blog/hello   にアクセス → このページが表示され、slug は "hello"
/blog/nextjs  にアクセス → 同じページが表示され、slug は "nextjs"

角カッコのフォルダが「可変の枠」。実際に何が入ったかはparamsで受け取ります。

[名前]=URLの可変部分

例のとおり、[slug]フォルダのページは/blog/○○のどんなURLでも表示されます。

paramsで「何が入ったか」を受け取る

ページはparamsから実際の値(helloなど)を受け取り、その値でデータを探して表示します。

「一覧+詳細」はほぼこの形

/blog/[slug]/users/[id] — 一覧から詳細へ、という構造はほぼ動的ルートで作られます。このlearnアプリのトピックページも同じ仕組みです。

コード例

// app/blog/[slug]/page.tsx
// /blog/hello にアクセス → params は { slug: "hello" }
export default async function BlogPost({
  params,
}: {
  params: Promise<{ slug: string }>;
}) {
  const { slug } = await params; // 最近の Next.js では await が必要

  return (
    <article>
      <h1>記事: {slug}</h1>
    </article>
  );
}

期待される出力

(/blog/hello にアクセスした場合)
記事: hello

このlearnアプリも/topics/[topicId]という動的ルートで、1つのファイルから99トピック分のページを作っています。

ステップ 1 / 2

※ カリキュラムの内容はAIが生成しており、誤りが含まれる場合があります。正確な情報は公式ドキュメント等でご確認ください。