TL;DR

Next.js の、ファイルシステムに基づくルーター。app ディレクトリのフォルダとファイルでルートを定義し、Server Components、Suspense、Server Functions など React の新しい機能を使う。

なぜ必要か

Next.js のルーターには、App Router と Pages Router(pages ディレクトリ)の 2 つがあり、ドキュメントも分かれている。App Router では、レイアウト、読み込み中の UI、エラー時の UI などを決まった名前のファイルとして置くだけで、React の仕組みに組み込める。create-next-app でも App Router を使うかを最初に聞かれ、推奨されている。

仕組み

app ディレクトリのフォルダが URL Segment を定め、フォルダを入れ子にするとセグメントも入れ子になる。ルートが公開されるのは、そのフォルダに page か route のファイルがあるときだけである。そのため、ルートのフォルダにほかのファイルを置いても、誤ってルーティングされない(コロケーション)。

特別なファイルには、layout、page、loading、not-found、error、global-error、route、template、default がある。これらは layout、template、error(Error Boundary)、loading(Suspense の境界)、not-found、page の順に入れ子でレンダリングされ、子のセグメントは親のセグメントの中に入る。

フォルダ名の書き方でも挙動を変えられる。

  • [slug]: パスパラメータを持つ Dynamic Routes
  • (group): URL に影響させずにルートをまとめる Route Groups
  • _folder: ルーティングの対象から外す Private Folder
  • @slot: Parallel Routes の名前付きスロット
  • (.)folder など: 別のルートを今のレイアウトの中に表示する Intercepting Routes

例

パスURL
app/layout.tsx全ルートを包む
app/page.tsx/
app/blog/page.tsx/blog
app/blog/[slug]/page.tsx/blog/my-post
app/(shop)/cart/page.tsx/cart

関連

出典