Next.jsのApp Routerで画面ごとにlayout.tsxを使い分ける:Route Groups
Next.jsのApp Routerで画面ごとにlayout.tsxを使い分ける:Route Groups

Next.jsのApp Routerで画面ごとにlayout.tsxを使い分ける:Route Groups

Next.jsでWebサイトを作成していると、画面によってヘッダーやフッターなどを変更したくなることがあると思います。

具体的には、ログイン画面やフォーム画面、そしてメインのコンテンツ….全て同じヘッダーやフッターを使い回すことができればいいですが、案件によっては変更が求められることがあります。

その場合に、urlを条件にコンポーネントを出し分けることがもできますが、ページが増えるほどに条件が増え、複雑になりがちです。

そんな悩みを解決してくれるのが、今回ご紹介する**Route Groups(ルートグループ)**です。

この記事では、Route Groupsの基本的な概念から、具体的な使い方、メリット・デメリットまでを分かりやすく解説します。

Route Groupsとは?

Route Groupsは、URLの構造に影響を与えずに、appディレクトリ内のルート(ページやレイアウト)を整理し、ページ毎にlayout.tsxを割り当てることができます。

具体的には、フォルダ名を括弧 () で囲むことで、そのフォルダをルートグループとして定義します。

Bash

app/
├── (marketing)/
│   ├── layout.tsx  // (marketing)グループ専用のレイアウト
│   ├── page.tsx      // URLは /
│   └── about/
│       └── page.tsx  // URLは /about
│
├── (shop)/
│   ├── layout.tsx  // (shop)グループ専用のレイアウト
│   ├── products/
│   │   └── page.tsx  // URLは /products
│   └── cart/
│       └── page.tsx  // URLは /cart
│
└── layout.tsx      // ルートレイアウト


上記の例では、(marketing)と(shop)という2つのルートグループを作成しています。

app/(marketing)/page.tsx のURLは /marketing ではなく / になります。

app/(shop)/products/page.tsx のURLは /shop/products ではなく /products になります。

このように、括弧で囲まれたフォルダ名はURLのパスセグメントとしては無視されるのが最大の特徴です。これにより、URL構造をクリーンに保ったまま、ファイル構成を自由に整理できます。

Route Groupsを使う場面

では、具体的にどのような場面でRoute Groupsが役立つのでしょうか。主なユースケースを3つご紹介します。

特定のセクションで異なるレイアウトを適用したい場合

最も一般的な使い方です。例えば、サイトの主要部分と、認証関連(ログイン、新規登録)ページでヘッダーやフッターのデザインを変えたい場合などに非常に便利です。

例:認証ページ用のレイアウトを作成する

Bash

app/
├── (main)/
│   ├── layout.tsx  // ヘッダー・フッター付きのメインレイアウト
│   ├── page.tsx      // URL: /
│   └── dashboard/
│       └── page.tsx  // URL: /dashboard
│
├── (auth)/
│   ├── layout.tsx  // ロゴのみのシンプルな認証用レイアウト
│   ├── login/
│   │   └── page.tsx  // URL: /login
│   └── signup/
│       └── page.tsx  // URL: /signup
│
└── layout.tsx


この構成により、/loginや/signupにアクセスしたときだけ、(auth)/layout.tsx が適用され、それ以外のページでは (main)/layout.tsx が適用される、といった制御が可能になります。

機能やチームごとにファイルを整理したい場合

アプリケーションを機能単位でグループ化することで、プロジェクトの見通しが格段に良くなります。

(marketing): LPやブログなど、マーケティング関連のページ

(app): 実際のアプリケーションのメイン機能(ダッシュボードなど)

(support): ヘルプページやお問い合わせフォーム

このように分割することで、関心の分離が明確になり、特にチームでの開発効率が向上します。

③ 複数のルートレイアウトを作成したい場合
少し高度な使い方ですが、同じ階層に複数のルートレイアウト(やタグを含むレイアウト)を作成したい場合にも利用できます。

例えば、サイト全体とLPでタグに設定する内容(言語設定など)を変えたい場合に、それぞれのルートグループ内にルートレイアウト(layout.tsx)を配置することで実現できます。

3. メリット・デメリット

Route Groupsは非常に便利ですが、もちろん良い点ばかりではありません。メリットとデメリットをしっかり理解しておきましょう。

メリット
プロジェクトの整理整頓: 関連するルートを物理的に同じフォルダにまとめることで、プロジェクトの構造が直感的で分かりやすくなります。

URL構造の維持: ファイルを整理してもURLが変わらないため、SEOやユーザー体験に影響を与えません。

柔軟なレイアウト適用: セクションごとに独立したレイアウトを簡単に適用でき、UIコンポーネントの共通化と分離を両立できます。

競合の回避: 同じURLパスを持つがレイアウトが異なるページを、グループを分けることで共存させられます。

デメリット
ディレクトリ階層の深化: Route Groupsを多用しすぎると、フォルダの階層が深くなり、かえってファイルを探しにくくなる可能性があります。

概念の理解: Next.jsやApp Routerの初心者は、なぜ括弧付きのフォルダがURLに影響しないのか、という概念を理解するのに少し時間がかかるかもしれません。

基本的にはメリットの方が大きいですが、「何のためにグループ化するのか」という目的を明確にし、無計画に使いすぎないことが重要です。

4. まとめ

Route Groupsは、Next.jsのApp Routerを使いこなす上で欠かせない機能の一つです。

括弧 () でフォルダを囲むと、URLパスから除外される

特定のセクションだけでレイアウトを切り替えたり、機能ごとにファイルを整理したりするのに最適

URLをクリーンに保ちながら、開発者が管理しやすいプロジェクト構造を実現できる

最初は少し戸惑うかもしれませんが、一度この便利さを知ると手放せなくなります。ぜひあなたのNext.jsプロジェクトにもRoute Groupsを取り入れて、より快適な開発環境を構築してみてください。

関連記事