目次
はじめに
Next.js ver13が登場し、新たなルーティング方式であるApp Routerが導入されました。この記事では、App Routerのディレクトリ構成に焦点を当て、どのように設計すれば効率的なのかを解説します。
前提条件
- Next.jsに基本的な知識がある方向けです。
免責事項
- この記事では、
app/
ディレクトリ以下の配置方法についてのみ説明します。 - コンポーネントの分け方については別の記事で取り扱います。
Next.js ver12までのPages Router
Next.jsは、react-router-dom
の複雑さを解消するために、ファイルシステムベースのルーティングを採用しています。ver12までは、pages/
ディレクトリ以下のファイルが自動でルートとして認識されました。
基本的な構造(Pages Router)
src/
pages/
- index.tsx // "/"
- about.tsx // "/about"
work/
- index.tsx // "/work"
- [id].tsx // "/work/1"
Next.js ver13のApp Router
ver13では、新たにApp Routerが正式に採用されました。この新しい方式にはいくつかの特徴があります。
主な変更点
app/
ディレクトリ以下に作成する必要があります。- ファイル名でのルーティングが不可で、
[ディレクトリ]/page.tsx
形式でルーティングします。 app/
ディレクトリ以下にルーティングに関係ないファイル(コンポーネントなど)も置けます。layout.tsx
など、特定の役割を果たすファイルが追加されました。
基本的な構造(App Router)
src/
app/
- page.tsx
- layout.tsx
about/
- page.tsx
- layout.tsx
work/
- page.tsx
ディレクトリ構成のベストプラクティス
案1:app/
ディレクトリをルーティング専用にする
src/
components/
app/
- page.tsx
- layout.tsx
work/
- page.tsx
- layout.tsx
about/
- page.tsx
案2:app/
ディレクトリにルーティング以外のファイルも格納する
src/
app/
- page.tsx
- layout.tsx
components/
(pages)
work/
- page.tsx
- layout.tsx
about/
- page.tsx
案1 vs 案2
- 案1は、
src/
ディレクトリの直下にcomponents/
やapp/
など複数のディレクトリが存在し、見通しがよい。 - 案2は、
src/
ディレクトリの直下にapp/
しか存在しないため、src/
ディレクトリを切る意味が少ない。
結論
src/
ディレクトリを使用する場合は、案1が見通しがよく推奨されます。app/
ディレクトリは、ルーティングだけでなく、他のコード(コンポーネント等)も一緒に置くことができます。- 最終的には、プロジェクトの要件とチームの方針によって選ぶべきです。