メインコンテンツまでスキップ

プロジェクト構造と組織化

このページでは、Next.jsにおけるフォルダとファイルの規約、およびプロジェクトを組織化するためのヒントを紹介します。

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

最上位フォルダ

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

ルートセグメントからパスセグメントへの変換ルートセグメントからパスセグメントへの変換
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 .tsx見つからない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レベル上でインターセプト
(...)folderrootからインターセプト

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

アプリのアイコン

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ファイル

プロジェクトの組織化

Next.jsは、フォルダとファイルの規約以外では、プロジェクトファイルの組織化や配置方法に対して特に意見を持っていません。しかし、プロジェクトを整理するためのいくつかの機能を提供しています。

コロケーション

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

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

routeセグメントにpage.jsまたはroute.jsファイルが追加されるまでルートは公開されないことを示す図routeセグメントにpage.jsまたはroute.jsファイルが追加されるまでルートは公開されないことを示す図

そして、ルートが公開されるときも、クライアントに送信されるのはpage.jsまたはroute.jsによって返されるコンテンツだけです。

page.jsとroute.jsファイルがルートを公開可能にする方法を示す図page.jsとroute.jsファイルがルートを公開可能にする方法を示す図

これにより、プロジェクトファイルappディレクトリ内のルートセグメントに安全にコロケーションすることができ、誤ってルートになることはありません。

ページセグメントにpage.jsまたはroute.jsファイルが含まれていてもコロケーションされたプロジェクトファイルはルートにならないことを示す図ページセグメントにpage.jsまたはroute.jsファイルが含まれていてもコロケーションされたプロジェクトファイルはルートにならないことを示す図

Good to know:

  • app内にプロジェクトファイルをコロケーションできますが、必ずしもそうする必要はありません。希望する場合は、appディレクトリの外に保持することもできます。

プライベートフォルダ

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

これはフォルダがプライベートな実装の詳細であることを示し、ルーティングシステムによって考慮されるべきではなく、フォルダとそのサブフォルダ全体がルーティングから除外されることを意味します。

プライベートフォルダを使用したフォルダ構成の例プライベートフォルダを使用したフォルダ構成の例

appディレクトリ内のファイルはデフォルトで安全にコロケーションされるため、コロケーションのためにプライベートフォルダは必要ありません。しかし、次のような場合に有用です:

  • UIロジックとルーティングロジックを分離する
  • プロジェクトやNext.jsエコシステム全体で内部ファイルを一貫して整理する
  • コードエディタでファイルを整理しグループ化する
  • 将来のNext.jsのファイル規約との命名の衝突を避ける

Good to know:

  • フレームワークの規約ではありませんが、プライベートフォルダの外にあるファイルも同じアンダースコアのパターンを使うことで「プライベート」とマークすることを検討するかもしれません。
  • フォルダ名の前に %5F(アンダースコアのURLエンコード形式)を付けることで、アンダースコアで始まるURLセグメントを作成できます:
  • %5FfolderName
    • プライベートフォルダを使用しない場合、Unexpectedな命名の衝突を防ぐためにNext.jsの特別なファイルの規約を知っておくと便利です。

ルートグループ

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

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

ルートグループを使用したフォルダ構成の例ルートグループを使用したフォルダ構成の例

ルートグループは次のような場合に有用です:

srcディレクトリ

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

`src`ディレクトリを使用したフォルダ構成の例`src`ディレクトリを使用したフォルダ構成の例

一般的な戦略

次のセクションでは、一般的な戦略の非常に高レベルな概要を紹介します。最も簡単な要点は、自分やチームにとって効果的な戦略を選び、プロジェクト全体で一貫性を保つことです。

Good to know: 以下の例では、componentslibフォルダを一般的なプレースホルダとして使用しており、この命名には特別なフレームワークの意味はありません。プロジェクトによってはuiutilshooksstylesなどのフォルダを使用することがあります。

appの外にプロジェクトファイルを格納する

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

appの外にプロジェクトファイルがあるフォルダ構成の例appの外にプロジェクトファイルがあるフォルダ構成の例

app内部の最上位フォルダ内にプロジェクトファイルを格納する

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

`app`の内部にプロジェクトファイルがあるフォルダ構成の例`app`の内部にプロジェクトファイルがあるフォルダ構成の例

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

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

機能またはルートごとに分割されたプロジェクトファイルを持つフォルダ構成の例機能またはルートごとに分割されたプロジェクトファイルを持つフォルダ構成の例