プロジェクト編成とファイル・コロケーション
ルーティングフォルダとファイルの規約を除けば、Next.js はプロジェクトファイルをどのように整理し、配置するかについて無論です。
このページでは、デフォルトの動作と、プロジェクト構成に利用できる機能を紹介します。
デフォルトで安全なコロケーション
app
ディレクトリでは、入れ子になったフォルダ階層がルート構造を定義します。
それぞれのフォルダは URL パスの対応する Segment にマッピングされるルート Segment を表します。
しかし、ルート構造はフォルダを通して定義されますが、page.js
または route.js
ファイルがルート Segment に追加されるまでは、ルートはパブリックにアクセスできません。
またルートが公開されている場合でも、page.js
またはroute.js
が返すコンテンツだけがクライアントに送信されます。
これは、プロジェクトファイル を安全に app
ディレクトリのルート Segment 内に配置できることを意味します。
Good to know:
- これは
pages
ディレクトリとは異なり、pages
にあるファイルはすべてルートとみなされます。- プロジェクトファイルを
app
ディレクトリに置くことは ** できます** が、 ** する必要はありません** 。もし必要であれば、app
ディレクトリの外に置いておくこともできます。
プロジェクトの整理機能
Next.js には、プロジェクトの整理に役立ついくつかの機能があります。
プライベートフォルダ
プライベートフォルダを作成するには、フォルダの前にアンダースコア _folderName
をつけます。
これは、そのフォルダがプライベートな実装の詳細であり、ルーティングシステムによって考慮されるべきではないことを示し、それによって フォルダとそのすべてのサブフォルダ をルーティングから除外します。
app
ディレクトリのファイルはデフォルトで安全にコロケーションできるので、プライベートフォルダはコロケーションには必要ありません。しかし、次のような場合に役立ちます。
- UI ロジックをルーティングロジックから分離する。
- プロジェクトや Next.js エコシステム全体で内部ファイルを一貫して整理する。
- コードエディタでのファイルの並べ替えとグループ化。
- 将来の Next.js ファイル規約との潜在的な名前の衝突を避ける。
Good to know:
- フレームワークの規約ではありませんが、同じアンダースコアのパターンを使って、プライベートフォルダ外のファイルを"private"とマークすることも考えてみてください。
- フォルダ名の前に
%5F
(アンダースコアの URL エンコード形式) を付けることで、アンダースコアで始まる URL セグメントを作成できます。%5FfolderName
- プライベートフォルダを使用しない場合は、Next.js の特別なファイル規約を知っておくと、予期せぬ名前の衝突を防ぐことができます。
ルートグループ
ルートグループはフォルダを括弧で囲むことで作成できます: (folderName)
これは、フォルダが整理のためのものであり、ルートの URL パスに含まれるべきではないことを示します。
ルートグループは次のことに役立ちます:
- ルートをグループに編成する例えば、サイトセクション、インテント、チームによって。
- 同じルート Segment レベルでネストされたレイアウトを有効にする:
src
ディレクトリ
Next.js では、アプリケーションコード(app
を含む)をオプションのsrc
ディレクトリに格納できます。これは、プロジェクトのルートにある設定ファイルからアプリケーションコードを分離します。
モジュールパスのエイリアス
Next.js はModule Path Aliasesをサポートしています。これにより、深くネストしたプロジェクト・ファイル間のインポートの読み取りと維持が容易になります。
// before
import { Button } from '../../../components/button'
// after
import { Button } from '@/components/button'
プロジェクトの構成戦略
Next.js プロジェクトでファイルやフォルダを整理する方法には「正しい」「間違っている」はありません。
次のセクションでは、一般的な戦略について、ごく大まかな概要を説明します。もっとも簡単なのは、自分とチームに合った戦略を選び、プロジェクト全体で一貫性を保つことです。
Good to know: 以下の例では、
components
とlib
フォルダを一般的なプレースホルダとして使用しています。これらの命名にフレームワークの特別な意味はなく、あなたのプロジェクトではui
、utils
、hooks
、styles
などの他のフォルダを使用するかもしれません。
app
の外側にプロジェクトファイルを保存する
この方法では、すべてのアプリケーションコードを プロジェクトのルート にある共有フォルダに保存し、app
ディレクトリは純粋にルーティングのためだけに使用します。
app
内のトップレベルフォルダにプロジェクトファイルを格納する
このストラテジーでは、すべてのアプリケーションコードを app
ディレクトリのルート にある共有フォルダに格納します。