メインコンテンツまでスキップ

Route Groups

app ディレクトリ内では、通常入れ子構造のフォルダが URL パスにマッピングされます。しかし、フォルダを Route Group としてマークすることで、そのフォルダがルートの URL パスに含まれないようにできます。

これにより、URL パスの構造に影響を与えずに、ルートセグメントとプロジェクトファイルを論理的なグループに整理することができます。

Route groups は以下の用途に役立ちます:

規約

Route group は、フォルダ名を括弧で囲むことで作成できます:(folderName)

URL パスに影響を与えずにルートを管理する

URL に影響を与えずにルートを管理するには、関連しているルートをまとめておくためのグループを作成します。括弧内のフォルダは URL から省略されます(例えば、(marketing)(shop) など)。

Route Group を使ったルートの整理Route Group を使ったルートの整理

(marketing)(shop) 内のルートが同じ URL 階層を共有しているとしても、それぞれのグループ内に layout.js ファイルを追加することで異なるレイアウトを作成できます。

複数のレイアウトを持つ Route Group複数のレイアウトを持つ Route Group

特定のセグメントをレイアウトに選択する

特定のルートをレイアウトに選択するには、新しい Route Group(例:(shop))を作成し、同じレイアウトを共有するルートをそのグループに移動します(例:accountcart)。グループ外のルートはレイアウトを共有しません(例:checkout)。

オプトインレイアウトを持つ Route Groupオプトインレイアウトを持つ Route Group

特定ルートにローディングスケルトンを選択する

loading.js ファイルを使って特定のルートに ローディングスケルトン を適用するには、新しい Route Group(例:/(overview))を作成し、そのグループ内に loading.tsx を移動します。

Route グループ内に loading.tsx と page.tsx が含まれるフォルダ構造Route グループ内に loading.tsx と page.tsx が含まれるフォルダ構造

これで、loading.tsx ファイルはダッシュボード → 概要ページにのみ適用され、他のダッシュボードページには影響を与えずに URL パスの構造も影響しません。

複数の root レイアウトを作成する

複数の root レイアウト を作成するには、トップレベルの layout.js ファイルを削除し、各 Route Group 内に layout.js ファイルを追加します。これは、UI や体験が完全に異なるセクションにアプリケーションを分割するのに便利です。それぞれの root レイアウトに <html><body> タグを追加する必要があります。

複数の root レイアウトを持つ Route Group複数の root レイアウトを持つ Route Group

上記の例では、(marketing)(shop) はそれぞれ自身の root レイアウトを持っています。


Good to know:

  • Route Groups の命名は、組織のためのものであり、それ自体に特別な意味はありません。URL パスには影響を与えません。
  • Route Group を含むルートは、他のルートと同じ URL パスに解決 されないようにする必要があります。 例えば、Route Groups は URL 構造に影響を与えないため、(marketing)/about/page.js(shop)/about/page.js はどちらも /about に解決してエラーを引き起こします。
  • 複数の root レイアウトをトップレベルの layout.js ファイルなしで使用する場合、ホームの page.js ファイルは Route Groups のひとつに定義する必要があります。例えば:app/(marketing)/page.js
  • 複数の root レイアウト間をナビゲートすることは、(クライアントサイドのナビゲーションとは対照的に)完全なページロード を引き起こします。例えば、app/(shop)/layout.js を使用している /cart から、app/(marketing)/layout.js を使用している /blog へナビゲートすると完全なページロードが発生します。これは 複数の root レイアウトにのみ 適用されます。