Next.js の Page Router (`pages/`) と App Router (`app/`) の違いを分かりやすく解説し、それぞれのメリット・デメリットを比較します。
Next.js には 2 つのルーティングシステムがあります。
pages/
を使用)app/
を使用)(Next.js 13 で導入、Next.js 14 で推奨)これらの違いを理解することで、どちらを使うべきか判断できるようになります。
Next.js 12 以前から使われている従来のルーティング方式。
JSX// pages/index.js export default function Home() { return <h1>Page Router のホームページ</h1>; }
pages/index.js
→ /
pages/about.js
→ /about
getServerSideProps
や getStaticProps
を使う。
JSXexport async function getServerSideProps() { const res = await fetch("https://api.example.com/data"); const data = await res.json(); return { props: { data } }; } export default function Home({ data }) { return <h1>{data.message}</h1>; }
✅ メリット
pages/
にファイルを追加するだけ)getServerSideProps
や getStaticProps
でデータ取得を明示的に管理できるuseEffect
を使ってクライアントサイドでデータ取得も可能❌ デメリット
getServerSideProps
などの API は Next.js 固有のもので、標準的な React の流れと異なるpages/api/
を使った API 作成が必要Next.js 13 で導入され、Next.js 14 で推奨されている新しいルーティング方式。
JSX// app/page.js export default function Home() { return <h1>App Router のホームページ</h1>; }
app/page.js
→ /
app/about/page.js
→ /about
JSXasync function getData() { const res = await fetch("https://api.example.com/data"); return res.json(); } export default async function Home() { const data = await getData(); return <h1>{data.message}</h1>; }
✅ メリット
fetch()
を 直接 async
関数内で使える(getServerSideProps
が不要)layout.js
による ネスト可能なレイアウト❌ デメリット
app/
を使うには 従来の useEffect
ではなく fetch を組み込む必要があるapp/api/route.js
などを使う)項目 | Page Router (pages/ ) | App Router (app/ ) |
---|---|---|
ルーティング方式 | pages/ にファイルを配置 | app/ に page.js を配置 |
データ取得 | getServerSideProps や getStaticProps | fetch() を async 関数で直接使用 |
レンダリング | クライアントサイド | デフォルトでサーバーコンポーネント |
レイアウト管理 | _app.js _document.js を使用 | layout.js でネスト可能 |
Streaming/Suspense | 基本的に非対応 | 対応(部分的レンダリング可) |
API 作成 | pages/api/ に API を作成 | app/api/route.js を使用 |
app/
)を推奨App Router の方が新しく、Next.js 公式の推奨方式 なので、今後のプロジェクトでは App Router を使うのがベストです。
しかし、Page Router の getServerSideProps
などを使っている既存プロジェクトを 無理に App Router に移行する必要はありません。
Page Router
(pages/
)は 従来の Next.js のルーティング方式 で、getServerSideProps
などを使うApp Router
(app/
)は 新しい方式 で、サーバーコンポーネントを活用し、データ取得がシンプルapp/
を使うのがベスト当サイトの情報は、一般的な参考情報として提供しております。
正確な情報の掲載に努めておりますが、その内容の正確性・完全性・最新性を保証するものではありません。
記事の内容をご利用の際は、ご自身の責任において判断し、必要に応じて専門家にご相談ください。
当サイトの情報の利用により生じたいかなる損害についても、一切の責任を負いかねますのでご了承ください。
※ 本ページでは、著作権法に基づき、適正な引用の範囲内でコンテンツを紹介しています。
オリジナルの情報は発信元をご確認ください。
もし問題がありましたら、こちら からお問い合わせください。