Next.js App Routerのルーティング概念とファイルベースルーティングの仕組みを理解する
app
ディレクトリ内のフォルダ構造がそのまま URL パスになります。これを**ファイルシステムベースルーティング**と呼びます。
app
ディレクトリが根(ルート)となり、各ディレクトリが枝分かれして階層を形成app/blog/
以下のすべてのディレクトリとファイルは、blog のサブツリー/
で区切った際の、それぞれの部分がセグメントです
/blog/hello-world
の場合、blog
とhello-world
がそれぞれセグメントapp
ディレクトリがルート/
部分app/blog/[slug]/
は、その下にディレクトリがなければリーフ/blog/hello-world
の場合、hello-world
がリーフセグメント[slug]
)page.tsx
は、そのディレクトリを Web ページとして表示可能にする特別なファイルです。例えば、app/about/page.tsx
があれば/about
という URL でアクセスできますが、page.tsx
ファイルがないディレクトリは、URL としてアクセスできません。
page.tsx
またはpage.js
が必要page
という名前にする(index
ではない)[]
で囲むことで、Dynamic Route を作成できます。角括弧内の名前が、パラメータ名として使用されます:
slug
(スラッグ)は、URL に使用される人間が読みやすい識別子です。通常、記事のタイトルなどを以下のように変換したものを指します:
/blog/nextjs-getting-started-2025
[slug]
は慣例的な名前ですが、[id]
、[postId]
、[name]
など、任意の名前を使用できます。
アクセス例:
/blog/first-post
→ params.slug = "first-post"
/blog/hello-world
→ params.slug = "hello-world"
/shop/electronics/laptop
layout.tsx
は、複数のページで共有される UI を定義するファイルです。ネスト可能で、子ルートに自動的に適用されます。
children
は、現在のレイアウトの子要素(ページやネストされたレイアウト)を表します。これにより、レイアウトの継承が実現されます。