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

プロジェクト構成とファイル配置

Next.jsは、ルーティングフォルダとファイルの規約以外では、プロジェクトファイルをどのように構成および配置するかについて特に意見を持っていません

このページでは、プロジェクトを構成するために利用できるデフォルトの動作と機能を共有します。

デフォルトで安全な配置

appディレクトリ内のネストされたフォルダ階層は、ルート構造を定義します。

各フォルダは、URLパス内の対応するセグメントにマッピングされるルートセグメントを表します。

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

ルートはpage.jsまたはroute.jsファイルがルートセグメントに追加されるまで公開されないことを示す図。ルートは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:

  • これはpagesディレクトリとは異なります。pages内のファイルはすべてルートとみなされます。
  • プロジェクトファイルをappに配置することができますが、必ずしも配置する必要はありません。必要であれば、それらをappディレクトリの外に保管することもできます。

プロジェクト構成機能

Next.jsは、プロジェクトの構成を助けるためにいくつかの機能を提供します。

Private Folders

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

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

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

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

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

Good to know:

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

Route Groups

フォルダを括弧で囲んでRoute Groupsを作成できます:(folderName)

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

Route Groupsを使用したフォルダ構造の例Route Groupsを使用したフォルダ構造の例

Route Groupsは以下に役立ちます:

src ディレクトリ

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

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

モジュールパスエイリアス

Next.jsはモジュールパスエイリアスをサポートしており、深くネストされたプロジェクトファイル間でのインポートを読みやすく維持しやすくします。

app/dashboard/settings/analytics/page.js
// 変更前
import { Button } from '../../../components/button'

// 変更後
import { Button } from '@/components/button'

プロジェクト構成戦略

Next.jsプロジェクトでファイルとフォルダを整理する際に「正解」や「間違い」はありません。

次のセクションでは一般的な戦略について非常に高いレベルでの概要を示します。一番簡単なポイントは、自分やチームに合った戦略を選び、それをプロジェクト全体で一貫させることです。

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

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

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

appの外にプロジェクトファイルを保存したフォルダ構造の例appの外にプロジェクトファイルを保存したフォルダ構造の例

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

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

app内にプロジェクトファイルを保存したフォルダ構造の例app内にプロジェクトファイルを保存したフォルダ構造の例

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

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

機能またはルートごとに分割したプロジェクトファイルのフォルダ構造の例機能またはルートごとに分割したプロジェクトファイルのフォルダ構造の例