レイアウトとページの作成方法
Next.jsではファイルシステムベースのルーティングを使用しており、フォルダとファイルを使ってルートを定義できます。このページでは、レイアウトとページの作成方法、およびそれら間のリンク方法について説明します。
ページの作成
ページとは、特定のルートでレンダリングされるUIです。ページを作成するには、app
ディレクトリ内にpage
ファイルを追加し、Reactコンポーネントをデフォルトエクスポートします。例えば、インデックスページ(/
)を作成する場合:

レイアウトの作成
レイアウトとは、複数のページ間で共有されるUIです。ナビゲーション時、レイアウトは状態を保持し、インタラクティブなまま再レンダリングされません。
layout
ファイルからReactコンポーネントをデフォルトエクスポートすることでレイアウトを定義できます。このコンポーネントは、ページまたは別のレイアウトとなるchildren
プロップを受け取る必要があります。
例えば、インデックスページを子として受け取るレイアウトを作成するには、app
ディレクトリ内にlayout
ファイルを追加します:

上記のレイアウトはルートレイアウトと呼ばれ、app
ディレクトリのルートで定義されています。ルートレイアウトは必須で、html
タグとbody
タグを含める必要があります。
ネストされたルートの作成
ネストされたルートとは、複数のURLセグメントで構成されるルートです。例えば、/blog/[slug]
ルートは3つのセグメントで構成されます:
/
(ルートセグメント)blog
(セグメント)[slug]
(リーフセグメント)
Next.jsでは:
- フォルダはURLセグメントにマッピングされるルートセグメントを定義するために使用されます
- ファイル(
page
やlayout
など)はセグメントに対して表示されるUIを作成するために使用されます
ネストされたルートを作成するには、フォルダを互いに入れ子にします。例えば、/blog
のルートを追加するには、app
ディレクトリ内にblog
というフォルダを作成します。そして、/blog
を公開可能にするために、page.tsx
ファイルを追加します:

フォルダをさらにネストすることで、ネストされたルートを作成できます。例えば、特定のブログ投稿のルートを作成するには、blog
内に新しい[slug]
フォルダを作成し、page
ファイルを追加します:

フォルダ名を角括弧で囲む(例:[slug]
)ことで、動的ルートセグメントを作成し、データから複数のページを生成できます。例:ブログ投稿、商品ページなど。
レイアウトのネスト
デフォルトでは、フォルダ階層内のレイアウトもネストされており、children
プロップを介して子レイアウトをラップします。特定のルートセグメント(フォルダ)内にlayout
を追加することでレイアウトをネストできます。
例えば、/blog
ルートのレイアウトを作成するには、blog
フォルダ内に新しいlayout
ファイルを追加します。

上記の2つのレイアウトを組み合わせると、ルートレイアウト(app/layout.js
)がブログレイアウト(app/blog/layout.js
)をラップし、それがブログ(app/blog/page.js
)とブログ投稿ページ(app/blog/[slug]/page.js
)をラップします。
動的セグメントの作成
動的セグメントを使用すると、データから生成されるルートを作成できます。例えば、個々のブログ投稿ごとに手動でルートを作成する代わりに、ブログ投稿データに基づいてルートを生成する動的セグメントを作成できます。
動的セグメントを作成するには、セグメント(フォルダ)名を角括弧で囲みます:[segmentName]
。例えば、app/blog/[slug]/page.tsx
ルートでは、[slug]
が動的セグメントです。
動的セグメントについてさらに学びましょう。
ページ間のリンク
<Link>
コンポーネントを使用してルート間をナビゲートできます。<Link>
はNext.jsに組み込まれたコンポーネントで、HTMLの<a>
タグを拡張し、プリフェッチとクライアントサイドナビゲーションを提供します。
例えば、ブログ投稿のリストを生成するには、next/link
から<Link>
をインポートし、href
プロップをコンポーネントに渡します:
<Link>
はNext.jsアプリケーションでルート間をナビゲートする主要かつ推奨される方法です。ただし、より高度なナビゲーションにはuseRouter
フックも使用できます。