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

Next.jsのCatch-all Routes完全解説!初心者でもわかる[...slug]キャッチオールルーティング入門

Next.jsで [...slug] を使う基本(キャッチオール編)
Next.jsで [...slug] を使う基本(キャッチオール編)

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

生徒

「Next.jsでURLがたくさんあるページをまとめて作ることはできますか?」

先生

「はい、Next.jsにはCatch-all Routesという仕組みがあります。」

生徒

「Catch-all Routesって何ですか?難しそうです。」

先生

「大丈夫です。フォルダ名に[...slug]と書くだけで、複数の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パスをひとつのファイルでまとめて処理できるルーティング機能です。 ルーティングとは、URLに応じて表示するページを切り替える仕組みのことです。

例えば、ブログサイトで考えてみましょう。 blog travel japan や blog tech javascript など、カテゴリや記事によってURLがどんどん増えていきます。 このような場合に、毎回ファイルを作るのは大変です。

そこで登場するのが [...slug] です。 これはキャッチオールルートと呼ばれ、どんな階層のURLでもまとめて受け取ることができます。

2. [...slug]の基本的なフォルダ構成

2. [...slug]の基本的なフォルダ構成
2. [...slug]の基本的なフォルダ構成

Next.jsでは、appフォルダまたはpagesフォルダの中に特別な名前のフォルダを作ることでルーティングを設定します。

キャッチオールを使う場合は、次のようにフォルダを作ります。


app/blog/[...slug]/page.jsx

export default function BlogPage({ params }) {
  return (
    <div>
      <h1>ブログページ</h1>
      <p>パラメータ: {params.slug.join(" / ")}</p>
    </div>
  );
}

この場合、blogのあとに続くすべてのURLを受け取ることができます。 例えば blog/a や blog/a/b/c などです。

blog/travel/japan にアクセスすると 画面に ブログページ と表示され パラメータに travel japan が表示されます

3. slugとは何かをやさしく理解しよう

3. slugとは何かをやさしく理解しよう
3. slugとは何かをやさしく理解しよう

slugとは、URLの一部を表す文字列のことです。 例えば https example com blog travel の travel の部分がslugです。

キャッチオールの場合、slugは配列になります。 配列とは、複数の値をまとめて入れる箱のようなものです。

つまり blog a b c のようなURLでは、slugは a b c の三つが配列として渡されます。


export default function Page({ params }) {
  console.log(params.slug);

  return (
    <div>
      <h2>Slugの確認</h2>
      <p>{JSON.stringify(params.slug)}</p>
    </div>
  );
}
blog/a/b にアクセスすると 配列として a と b が表示されます

4. Optional Catch-all Routesとの違い

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

Next.jsにはOptional Catch-all Routesという仕組みもあります。 これは [[...slug]] と書きます。

通常の [...slug] は、少なくとも一つ以上のURLが必要です。 しかし [[...slug]] の場合は、何も指定しなくてもアクセスできます。


app/shop/[[...slug]]/page.jsx

export default function ShopPage({ params }) {
  return (
    <div>
      <h1>ショップページ</h1>
      <p>Slug: {params.slug ? params.slug.join(" / ") : "なし"}</p>
    </div>
  );
}
shop にアクセスすると Slugはなし と表示され shop/item にアクセスすると item と表示されます

5. 実際の活用例 ブログサイトでの応用

5. 実際の活用例 ブログサイトでの応用
5. 実際の活用例 ブログサイトでの応用

Next.jsのキャッチオールルーティングは、ブログサイトやニュースサイト、商品一覧ページなどでよく使われます。 カテゴリごと、記事ごとにURLが変わる場合でも柔軟に対応できます。


export default function BlogArticle({ params }) {
  const category = params.slug[0];
  const article = params.slug[1];

  return (
    <div>
      <h1>カテゴリ: {category}</h1>
      <p>記事: {article}</p>
    </div>
  );
}
blog/tech/react にアクセスすると カテゴリに tech 記事に react が表示されます

このように、Next.jsのルーティング機能を活用すると、柔軟なWebアプリケーションを構築できます。

6. 初心者がつまずきやすいポイント

6. 初心者がつまずきやすいポイント
6. 初心者がつまずきやすいポイント

初心者がよく混乱するのは、slugが文字列ではなく配列である点です。 一つしか値がない場合でも配列になります。

また、URLの順番がそのまま配列の順番になります。 そのため、どの位置に何が入るのかを事前に決めておくことが重要です。

Next.jsのCatch-all Routesを理解すると、大規模なWebサイトやアプリ開発で役立ちます。 ルーティングの仕組みをしっかり理解することで、Next.jsの実力を最大限に引き出すことができます。

まとめ

まとめ
まとめ

今回はNext.jsのCatch-all Routesについて、初心者にも理解しやすい形で整理しました。Next.jsはReactを基盤としたフレームワークであり、ファイルベースルーティングが大きな特徴です。その中でもCatch-all Routesは、複数階層のURLを一つのページファイルで受け取ることができる非常に強力な機能です。

特にブログサイトやニュースサイト、商品一覧ページのように、カテゴリや記事ごとにURLが増えていくWebアプリケーションでは、ルーティング設計が重要になります。Next.jsのappディレクトリやpagesディレクトリで [...slug] というフォルダ名を使うことで、可変長のURLパラメータを配列として受け取ることができます。この仕組みにより、動的ルーティングを柔軟に実装できるようになります。

slugはURLの一部を表す文字列であり、Catch-all Routesでは配列として扱われます。例えば blog tech react のようなURLでは、techとreactが配列として渡されます。この配列を利用することで、カテゴリと記事を分離したり、階層構造を解析したりすることが可能です。Next.jsのルーティングと動的ルートを正しく理解することは、Web開発においてとても重要な基礎力になります。

また、Optional Catch-all Routesである [[...slug]] を使えば、URLパラメータが存在しない場合にも対応できます。これはトップページと下層ページを同一ファイルで管理したい場合に便利です。Next.jsのキャッチオールルーティングを活用することで、コードの重複を防ぎ、保守性の高い設計を実現できます。

さらに重要なのは、配列の順番と意味を事前に設計することです。URL設計は検索エンジンにも影響を与えるため、カテゴリ構造やパス設計を明確にしておくことが大切です。Next.jsのCatch-all Routesを理解することは、SEOに強いサイト構築にもつながります。適切なURL設計、明確な階層構造、読みやすいスラッグを意識することで、ユーザーにも検索エンジンにも理解しやすいサイトになります。

最後に、実際のコード例をもう一度確認しておきましょう。Catch-all Routesでは、params.slugが配列として渡されることを前提に実装します。


export default function CatchAllSummary({ params }) {
  const segments = params.slug || [];

  return (
    <div>
      <h2>Catch-all Routes確認</h2>
      <p>階層数: {segments.length}</p>
      <ul>
        {segments.map((item, index) => (
          <li key={index}>{item}</li>
        ))}
      </ul>
    </div>
  );
}
blog design ui ux にアクセスすると 階層数が三と表示され design ui ux が一覧表示されます

このようにNext.jsのCatch-all Routesは、動的ルーティング、配列パラメータ処理、URL設計、ブログ構築、商品ページ管理など、さまざまな場面で活躍します。Next.js入門者にとっては少し難しく感じるかもしれませんが、基本を理解すれば非常に便利な機能です。ReactとNext.jsの基礎を押さえながら、キャッチオールルーティングを実践で使いこなしていきましょう。

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

生徒

「Next.jsのCatch-all Routesは、複数のURLをまとめて処理できる仕組みなんですね。slugが配列になるところがポイントだと理解しました。」

先生

「その通りです。Next.jsの動的ルーティングでは、URL設計と配列の扱いが重要です。特にブログや商品ページではとても役立ちます。」

生徒

「Optional Catch-all Routesを使えば、URLがなくても対応できるのも便利ですね。トップページと下層ページをまとめられるのが分かりました。」

先生

「よく理解できていますね。Next.jsのCatch-all Routesを使いこなせれば、柔軟で拡張性の高いWebアプリケーションが作れます。これからも実際にコードを書きながら学習を続けていきましょう。」

カテゴリの一覧へ
新着記事
New1
Next.js
Next.jsで[[...slug]]を使ったオプショナルキャッチオールルートの完全ガイド!初心者でもわかるNext.jsルーティング
New2
Next.js
Next.jsのCatch-all Routes完全解説!初心者でもわかる[...slug]キャッチオールルーティング入門
New3
React
Reactでkey属性にインデックスを使う際の注意点を初心者向けに解説
New4
React
ReactのuseEffectでタイマー処理を実装する方法を徹底解説!初心者でもできるReactフック入門
人気記事
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
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
React
Reactの学習ロードマップ!初心者が最短で習得する流れを完全ガイド
No.5
Java&Spring記事人気No5
Next.js
Next.js自動ルーティングを初心者向けに解説!Next.jsのページ遷移の基本を理解する
No.6
Java&Spring記事人気No6
React
React Context APIの分割方法を解説!パフォーマンスを高めるベストプラクティス
No.7
Java&Spring記事人気No7
Next.js
Next.js CSRとISRの使い分けを初心者向けに解説!具体例でわかるNext.jsのレンダリング方法
No.8
Java&Spring記事人気No8
React
React Context APIの値を更新する方法!useStateと組み合わせてデータを動かす初心者ガイド