カテゴリ: Next.js 更新日: 2026/04/08

Next.jsのCatch-all Routesとは?動的URLを一括で扱う方法を初心者向けに徹底解説

Next.jsのCatch-all Routesとは?動的URLを一括で扱う方法
Next.jsのCatch-all Routesとは?動的URLを一括で扱う方法

先生と生徒の会話形式で理解しよう

生徒

「Next.jsのCatch-all Routesって何ですか?動的URLって難しそうです。」

先生

「Catch-all Routesは、複数のURLパターンを一つのファイルでまとめて処理できる仕組みです。」

生徒

「一つのファイルで全部まとめられるんですか?」

先生

「はい。ブログやカテゴリーのように階層が増えるページでとても便利です。具体的な書き方を見ていきましょう。」

1. Next.jsのCatch-all Routesとは?

1. Next.jsのCatch-all Routesとは?
1. Next.jsのCatch-all Routesとは?

Next.jsのCatch-all Routesとは、複数のパスをまとめて受け取ることができるルーティング機能です。ルーティングとは、URLとページを結びつける仕組みのことです。たとえば、example.com/blogやexample.com/blog/reactのように、URLの後ろに文字が続く場合があります。

通常の動的ルートでは、blog/[id].jsのように一つの値だけを受け取ります。しかしCatch-all Routesを使うと、blog/react/nextjs/beginnerのように複数の階層をまとめて処理できます。これにより、ブログ記事一覧、カテゴリー、タグページなどを柔軟に作成できます。

イメージとしては、大きな箱にいろいろな形の荷物をまとめて入れるようなものです。どんな形でも一度受け取り、中身を確認してから処理します。

2. 基本の書き方とファイル構成

2. 基本の書き方とファイル構成
2. 基本の書き方とファイル構成

Next.jsでCatch-all Routesを作るには、角括弧を三つ使います。pagesフォルダの中にblogというフォルダを作り、その中に[...slug].jsというファイルを作成します。この三点リーダーが、複数の値を受け取る合図です。


import { useRouter } from "next/router";

export default function BlogPage() {
  const router = useRouter();
  const { slug } = router.query;

  return (
    <div>
      <h1>ブログページ</h1>
      <p>取得したパラメータ: {JSON.stringify(slug)}</p>
    </div>
  );
}
URLが/blog/react/nextjsの場合、画面には["react","nextjs"]と表示されます。

ここで出てくるパラメータとは、URLの中から取り出せる値のことです。slugは配列として受け取ります。配列とは、複数のデータを順番に並べて保存できる箱のようなものです。

3. 動的URLを一括で扱うメリット

3. 動的URLを一括で扱うメリット
3. 動的URLを一括で扱うメリット

Catch-all Routesを使う最大のメリットは、ページを大量に作らなくてよいことです。たとえば、商品カテゴリー、地域別ページ、日付別アーカイブなど、階層が増えるサイトではファイル数が増えがちです。

しかしCatch-all Routesを使えば、一つのファイルでまとめて管理できます。条件分岐を使えば、URLの内容によって表示を変えられます。


import { useRouter } from "next/router";

export default function Page() {
  const router = useRouter();
  const { slug } = router.query;

  if (!slug) {
    return <p>読み込み中です</p>;
  }

  if (slug.length === 1) {
    return <h2>カテゴリー: {slug[0]}</h2>;
  }

  if (slug.length === 2) {
    return <h2>カテゴリー: {slug[0]} / 記事: {slug[1]}</h2>;
  }

  return <h2>それ以上の階層です</h2>;
}
URLの階層の数によって表示内容が変わります。

このように、配列の長さを確認することで、ページの役割を分けられます。

4. Optional Catch-all Routesとの違い

4. Optional Catch-all Routesとの違い
4. Optional Catch-all Routesとの違い

Next.jsにはOptional Catch-all Routesという仕組みもあります。これは[[...slug]].jsのように二重の角括弧を使います。違いは、URLが空でもページを表示できる点です。


import { useRouter } from "next/router";

export default function OptionalPage() {
  const router = useRouter();
  const { slug } = router.query;

  if (!slug) {
    return <h1>トップページです</h1>;
  }

  return <h1>パス: {slug.join(" / ")}</h1>;
}
URLが/blogでも/blog/reactでも両方に対応できます。

通常のCatch-all Routesは最低一つの値が必要ですが、Optionalは値がなくても動作します。用途に応じて使い分けることが重要です。

5. getStaticPathsと組み合わせる方法

5. getStaticPathsと組み合わせる方法
5. getStaticPathsと組み合わせる方法

Next.jsでは静的生成という仕組みがあります。これはあらかじめHTMLを作っておく方法です。Catch-all Routesでも利用できます。


export async function getStaticPaths() {
  return {
    paths: [
      { params: { slug: ["react"] } },
      { params: { slug: ["react", "nextjs"] } }
    ],
    fallback: false
  };
}

export async function getStaticProps({ params }) {
  return {
    props: {
      slug: params.slug
    }
  };
}

export default function StaticPage({ slug }) {
  return <h1>{slug.join(" / ")}</h1>;
}
指定したパスだけが事前に生成されます。

静的生成を使うと表示が高速になります。特にブログやニュースサイトで活躍します。

6. 実際の活用例と注意点

6. 実際の活用例と注意点
6. 実際の活用例と注意点

Catch-all Routesは、ブログ、商品詳細、カテゴリー一覧、タグ検索など幅広く使われます。動的ルーティングを理解することで、複雑なサイト構成もシンプルに作れます。

ただし注意点もあります。URLの設計を最初に決めておかないと、後から変更が大変になります。また、配列の扱いに慣れていないと混乱することがあります。

初心者の方は、まず通常の動的ルートを理解してからCatch-all Routesに進むと理解しやすいです。Next.jsのルーティングの仕組みをしっかり理解することで、柔軟で拡張性の高いWebアプリケーションを作れるようになります。

まとめ

まとめ
まとめ

今回はNext.jsのCatch all Routesについて、動的URLを一括で扱う方法を基礎から丁寧に整理しました。Next.jsのルーティングはファイルベースで構成されており、pagesフォルダの構造がそのままURL構造になります。その中でもCatch all Routesは、複数階層の動的ルーティングを一つのファイルでまとめて管理できる非常に強力な仕組みです。

通常の動的ルートでは一つのパラメータしか受け取れませんが、三点リーダーを使ったCatch all Routesでは、複数のパスを配列として受け取ることができます。これにより、ブログ記事、カテゴリー、タグ、商品詳細、地域別ページなど、階層構造を持つWebアプリケーションを効率よく構築できます。特にNext.jsでブログを作成する場合や、大規模サイトでURL設計を柔軟にしたい場合に大きな効果を発揮します。

また、Optional Catch all Routesを使えば、URLが空の場合にも対応できるため、トップページと下層ページを同一ファイルで処理できます。Next.jsの動的ルーティングを深く理解することで、SEOに強い構造設計や、拡張性の高いアプリケーション設計が可能になります。URL設計はWebサイトの土台です。最初にしっかり考えることで、後の運用や機能追加が非常に楽になります。

さらに、getStaticPathsやgetStaticPropsと組み合わせることで、静的生成にも対応できます。静的生成を活用すると表示速度が向上し、ユーザー体験の向上につながります。Next.jsのCatch all Routesと静的生成を組み合わせることで、高速で構造が明確なWebサイトを実現できます。動的URL、配列パラメータ、条件分岐、静的生成といったキーワードは、Next.jsを学ぶうえで非常に重要です。

サンプルプログラムの振り返り


import { useRouter } from "next/router";

export default function SummaryPage() {
  const router = useRouter();
  const { slug } = router.query;

  if (!slug) {
    return <h2>トップページです</h2>;
  }

  return (
    <div>
      <h2>現在のパス</h2>
      <p>{slug.join(" / ")}</p>
    </div>
  );
}
URLに応じて表示内容が変わり、階層構造を一つのファイルで管理できます。

このように、Next.jsのCatch all Routesは動的URLをまとめて扱うための重要な機能です。複数階層のルーティングを効率化し、ページ管理をシンプルにします。Next.js初心者の方でも、配列という考え方とURL設計を理解すれば、必ず使いこなせるようになります。動的ルーティング、Catch all Routes、Optional Catch all Routes、静的生成、getStaticPaths、getStaticPropsといった概念を組み合わせることで、柔軟で高速なWebサイトを構築できます。

先生と生徒の振り返り会話

生徒

Next.jsのCatch all Routesは、複数の動的URLをまとめて処理できる仕組みだと分かりました。slugが配列になるところが大切なのですね。

先生

その通りです。配列として受け取れるので、URLの階層に応じて表示を切り替えられます。これが動的ルーティングの強みです。

生徒

Optional Catch all Routesを使えば、URLが空でも対応できることも理解できました。ブログやカテゴリー構造に便利ですね。

先生

はい。さらに静的生成と組み合わせれば、高速で構造の整ったサイトが作れます。Next.jsのルーティング設計を理解することは、Webアプリケーション開発の基礎力を高めることにつながります。

生徒

動的URL設計、配列の扱い、静的生成の流れまで理解できました。これでNext.jsのCatch all Routesが怖くなくなりました。

先生

素晴らしいです。基礎をしっかり押さえれば、複雑なURL設計も整理して考えられるようになります。これからも一つずつ積み重ねていきましょう。

関連記事:

関連記事なし

カテゴリの一覧へ
新着記事
New1
React
Reactで学ぶ型安全なフォーム入力のState管理!初心者でも安心して作れる入力フォーム
New2
Next.js
Next.jsの環境変数(エンバイロンメントヘンスウ)の設定を完全ガイド!初心者でもわかる.envの使い方
New3
Next.js
Next.jsのCatch-all Routesとは?動的URLを一括で扱う方法を初心者向けに徹底解説
New4
Next.js
Next.jsのDynamic Routes完全解説!初心者でもわかるNext.jsの動的ルートの仕組み
人気記事
No.1
Java&Spring記事人気No1
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.2
Java&Spring記事人気No2
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.3
Java&Spring記事人気No3
React
Reactの学習ロードマップ!初心者が最短で習得する流れを完全ガイド
No.4
Java&Spring記事人気No4
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.5
Java&Spring記事人気No5
React
React Context APIの値を更新する方法!useStateと組み合わせてデータを動かす初心者ガイド
No.6
Java&Spring記事人気No6
Next.js
Next.js CSRとISRの使い分けを初心者向けに解説!具体例でわかるNext.jsのレンダリング方法
No.7
Java&Spring記事人気No7
React
React useReducerとContext APIを組み合わせた本格的な状態管理ガイド
No.8
Java&Spring記事人気No8
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介