Menu

プロジェクト構造と編成

このページでは、Next.jsにおけるフォルダとファイルの規則の概要と、プロジェクトを整理するためのヒントを提供します。

フォルダとファイルの規則

トップレベルフォルダ

トップレベルフォルダは、アプリケーションのコードと静的アセットを整理するために使用されます。

Route segments to path segments
appApp Router
pagesPages Router
public提供される静的アセット
srcオプションのアプリケーションソースフォルダ

トップレベルファイル

トップレベルファイルは、アプリケーションの設定、依存関係の管理、ミドルウェアの実行、監視ツールの統合、環境変数の定義などに使用されます。

Next.js
next.config.jsNext.jsの設定ファイル
package.jsonプロジェクトの依存関係とスクリプト
instrumentation.tsOpenTelemetryと計装ファイル
middleware.tsNext.jsリクエストミドルウェア
.env環境変数
.env.localローカル環境変数
.env.production本番環境の環境変数
.env.development開発環境の環境変数
.eslintrc.jsonESLintの設定ファイル
.gitignoreGitで無視するファイルとフォルダ
next-env.d.tsNext.js用のTypeScript宣言ファイル
tsconfig.jsonTypeScriptの設定ファイル
jsconfig.jsonJavaScriptの設定ファイル

ルーティングファイル

layout.js .jsx .tsxレイアウト
page.js .jsx .tsxページ
loading.js .jsx .tsxローディングUI
not-found.js .jsx .tsxNot found UI
error.js .jsx .tsxエラーUI
global-error.js .jsx .tsxグローバルエラーUI
route.js .tsAPIエンドポイント
template.js .jsx .tsx再レンダリングされるレイアウト
default.js .jsx .tsx並列ルートのフォールバックページ

ネストされたルート

folderルートセグメント
folder/folderネストされたルートセグメント

動的ルート

[folder]動的ルートセグメント
[...folder]キャッチオールルートセグメント
[[...folder]]オプショナルキャッチオールルートセグメント

ルートグループとプライベートフォルダ

(folder)ルーティングに影響を与えずにルートをグループ化する
_folderフォルダとすべての子セグメントをルーティングから除外する

並列ルートとインターセプトルート

@folder名前付きスロット
(.)folder同じレベルでインターセプト
(..)folder1レベル上でインターセプト
(..)(..)folder2レベル上でインターセプト
(...)folderルートからインターセプト

メタデータファイルの規則

アプリアイコン

favicon.icoファビコンファイル
icon.ico .jpg .jpeg .png .svgアプリアイコンファイル
icon.js .ts .tsx生成されたアプリアイコン
apple-icon.jpg .jpeg, .pngAppleアプリアイコンファイル
apple-icon.js .ts .tsx生成されたAppleアプリアイコン

Open GraphとTwitter画像

opengraph-image.jpg .jpeg .png .gifOpen Graph画像ファイル
opengraph-image.js .ts .tsx生成されたOpen Graph画像
twitter-image.jpg .jpeg .png .gifTwitter画像ファイル
twitter-image.js .ts .tsx生成されたTwitter画像

SEO

sitemap.xmlサイトマップファイル
sitemap.js .ts生成されたサイトマップ
robots.txtRobotsファイル
robots.js .ts生成されたRobotsファイル

コンポーネント階層

ルートセグメントの特殊ファイルで定義されたReactコンポーネントは、特定の階層でレンダリングされます:

  • layout.js
  • template.js
  • error.js(Reactエラー境界)
  • loading.js(Reactサスペンス境界)
  • not-found.js(Reactエラー境界)
  • page.jsまたはネストされたlayout.js
Component Hierarchy for File Conventions

ネストされたルートでは、セグメントのコンポーネントは親セグメントのコンポーネントの内部にネストされます。

Nested File Conventions Component Hierarchy

プロジェクトの整理

フォルダとファイルの規則以外に、Next.jsはプロジェクトファイルの整理と配置について特定の意見を持っていません。しかし、プロジェクトの整理を助けるためのいくつかの機能を提供しています。

コロケーション(併置)

appディレクトリでは、ネストされたフォルダがルート構造を定義します。各フォルダはルートセグメントを表し、URLパス内の対応するセグメントにマッピングされます。

しかし、ルート構造はフォルダを通じて定義されますが、ルートセグメントにpage.jsまたはroute.jsファイルが追加されるまで、ルートは公開アクセス可能ではありません

A diagram showing how a route is not publicly accessible until a page.js or route.js file is added to a route segment.

また、ルートが公開アクセス可能になった場合でも、page.jsまたはroute.jsによって返されるコンテンツのみがクライアントに送信されます。

A diagram showing how page.js and route.js files make routes publicly accessible.

これは、プロジェクトファイルを誤ってルーティング可能にすることなく、appディレクトリ内のルートセグメント内に安全に併置できることを意味します。

A diagram showing colocated project files are not routable even when a segment contains a page.js or route.js file.

補足:

プライベートフォルダ

フォルダ名の先頭にアンダースコアを付けることで、プライベートフォルダを作成できます:_folderName

これは、そのフォルダが非公開の実装詳細であり、ルーティングシステムによって考慮されるべきではないことを示し、そのフォルダとそのすべてのサブフォルダをルーティングから除外します。

An example folder structure using private folders

appディレクトリ内のファイルはデフォルトで安全に併置できるため、併置のためにプライベートフォルダは必須ではありません。しかし、次のような用途に役立ちます:

  • UIロジックとルーティングロジックの分離。
  • プロジェクト全体とNext.jsエコシステム全体で内部ファイルを一貫して整理する。
  • コードエディタでのファイルの並べ替えとグループ化。
  • 将来のNext.jsファイル規則との潜在的な命名の競合を回避する。

補足:

  • フレームワークの規則ではありませんが、同じアンダースコアパターンを使用して、プライベートフォルダ外のファイルを「プライベート」としてマークすることも検討できます。
  • フォルダ名を%5F(アンダースコアのURL変換形式)で始めることで、アンダースコアで始まるURLセグメントを作成できます:%5FfolderName
  • プライベートフォルダを使用しない場合は、予期しない命名の競合を防ぐためにNext.jsの特殊ファイル規則を知っておくと役立ちます。

ルートグループ

フォルダを括弧で囲むことでルートグループを作成できます:(folderName)

これは、フォルダが整理目的のものであり、ルートのURLパスに含めるべきではないことを示します。

An example folder structure using route groups

ルートグループは次のような用途に役立ちます:

src ディレクトリ

Next.jsは、アプリケーションコード(appを含む)をオプションのsrcディレクトリ内に保存することをサポートしています。これにより、アプリケーションコードとプロジェクトのルートに配置されるプロジェクト設定ファイルが分離されます。

An example folder structure with the `src` directory

一般的な戦略

以下のセクションでは、一般的な戦略の非常に概要的な説明を提供します。最も簡単な結論は、自分とチームに合った戦略を選び、プロジェクト全体で一貫性を保つことです。

補足:以下の例では、componentslibフォルダを一般化されたプレースホルダとして使用しています。これらの命名にはフレームワーク上の特別な意味はなく、プロジェクトによってはuiutilshooksstylesなどの他のフォルダを使用することもあります。

プロジェクトファイルをappの外部に保存する

この戦略では、すべてのアプリケーションコードをプロジェクトのルートにある共有フォルダに保存し、appディレクトリを純粋にルーティング目的のために保持します。

An example folder structure with project files outside of app

プロジェクトファイルをapp内のトップレベルフォルダに保存する

この戦略では、すべてのアプリケーションコードを**appディレクトリのルート**にある共有フォルダに保存します。

An example folder structure with project files inside app

プロジェクトファイルを機能またはルートによって分割する

この戦略では、グローバルに共有されるアプリケーションコードをルートのappディレクトリに保存し、より特定のアプリケーションコードをそれらを使用するルートセグメントに分割します。

An example folder structure with project files split by feature or route