Next.js App Routerの特殊ファイル規約とその使い方を理解する
app
ディレクトリ内の特定のファイル名が予約されており、それぞれが特別な機能を提供します。これにより、ルーティング、レイアウト、エラーハンドリングなどが宣言的に実装できます。
page.tsx
は、そのディレクトリを公開可能な URL として定義します。このファイルがないディレクトリは、URL としてアクセスできません。
layout.tsx
は、複数のページで共有される UI を定義します。子ルートに自動的に適用され、ページ遷移時も再レンダリングされません。
/dashboard/analytics
ページは以下の順序でレイアウトが適用されます:
app/layout.tsx
) - 全体の HTML 構造app/dashboard/layout.tsx
) - ダッシュボード共通 UIapp/dashboard/analytics/layout.tsx
) - 分析セクション固有 UIapp/dashboard/analytics/page.tsx
) - 実際のページ/dashboard/analytics
にアクセスした場合の HTML 構造:
loading.tsx
は、ページやセグメントのロード中に表示される UI を定義します。React Suspense を使用して自動的に適用されます。
error.tsx
は、エラーが発生した際のフォールバック UI を提供します。
フォールバック(Fallback)とは自動的に React Error Boundary でラップされます。
何らかの問題が発生した時に代替として表示される UI のことです。通常の処理が失敗した場合に「代わりに」表示されるコンテンツを指します。
not-found.tsx
は、特定のルートセグメントが見つからない場合に表示されます。
template.tsx
は、layout.tsx
と似ていますが、ページ間を移動する際(ナビゲーション時)に新しいインスタンスが作成されます。
<Link>
や <a>
タグをクリックして別のページに移動router.push()
や router.replace()
などを実行ファイル | ページ遷移時の動作 | 状態の保持 | 使用場面 |
---|---|---|---|
layout.tsx | コンポーネントが再利用される | 状態が保持される | ナビゲーション、サイドバーなど永続的なUI |
template.tsx | 新しいインスタンスが作成される | 状態がリセットされる | ページ遷移アニメーション、毎回リセットしたい状態 |
route.tsx
は、API エンドポイントを定義します。HTTP メソッドに対応する関数をエクスポートします。
route.ts
(または route.js
)ファイルは app
ディレクトリ内のどこにでも配置できますが、実際の動作は配置場所によって異なります:
配置場所 | URL | 動作 | 推奨度 |
---|---|---|---|
app/api/hello/route.ts | /api/hello | API エンドポイントとして動作 | ✅ 推奨 |
app/hello/route.ts | /hello | API エンドポイントとして動作 | ⚠️ 非推奨 |
route.ts
と page.ts
は同じディレクトリに共存できませんapp/hello/route.ts
がある場合、app/hello/page.ts
は作成できませんapp/api/
配下に配置することが強く推奨されますapi/
配下を推奨middleware.ts
は、リクエストが完了する前にコードを実行します。
default.js
は、並行ルートで初回ロード時やリロード時にマッチするセグメントがない場合のフォールバック(代替コンテンツ)を提供します。
global-error.tsx
は、ルートレイアウトでのエラーをキャッチします。production 環境でのみ有効です。
favicon.ico
、robots.txt
)sitemap.ts
、opengraph-image.tsx
).tsx
で生成