Skip to content

Next.js App RouterとPages Routerの違い

問題の背景

Next.js公式ドキュメントで紹介されているApp RouterPages Routerの違いについて混乱する開発者が多いです。主な疑問点は以下のとおりです:

  • 両者の本質的な技術的差異
  • パフォーマンスとユーザビリティの観点での比較
  • 実際のプロジェクトでの適切な選択基準

主要な技術的差異

両ルーターの根本的な違いを比較した表は次の通りです:

特徴App RouterPages Router
ルーティング方式ネストフォルダ構造ファイル直結方式
コンポーネントデフォルトでServer ComponentsデフォルトでClient Components
データ取得fetch関数getServerSideProps/getStaticProps
レイアウトネスト可能で動的静的
ルーティング優先度高い(同一プロジェクトで共存時)低い(App Routerが優先)
サーバーコンポーネント◎ 完全サポート× 未対応
ストリーミング◎ サポート△ 制限あり

階層構造の違い

txt
// App Routerの構造
app/
  ├ dashboard/
  │  ├ page.tsx  // /dashboard
  │  └ settings/
  │     └ page.tsx  // /dashboard/settings
  └ page.tsx      // ルートページ

// Pages Routerの構造
pages/
  ├ dashboard.tsx    // /dashboard
  └ dashboard/
     └ settings.tsx  // /dashboard/settings

パフォーマンスとユーザビリティ比較

✅ App Routerの優位点

  1. 初期ロード速度
    サーバーコンポーネントによりクライアントサイドのJSバンドルサイズが削減

  2. 動的レイアウト

    tsx
    // ユーザー認証状態に応じてレイアウト変更
    export default function Layout({ user }) {
      return user ? <DashboardLayout /> : <PublicLayout />;
    }
  3. データ取得の効率化
    従来のgetServerSidePropsよりも宣言的なデータフェッチが可能:

    tsx
    async function UserData() {
      const data = await fetch('https://api.example.com/user');
      return <Profile data={data} />;
    }

⚠️ Pages Routerの活用ケース

  1. 移行中のプロジェクト
    既存プロジェクトを段階的に移行する際の暫定手段

  2. シンプルな静的サイト
    ブログなど複雑なルーティングが不要なケース

重要な注意点

App RouterとPages Routerは同一プロジェクトで共存可能ですが:

  • /appディレクトリが存在する場合、App Routerが優先されます
  • 混在時の予期せぬ挙動を避けるため、新規プロジェクトでは一貫した選択を推奨

ベストプラクティスと実践例

推奨ユースケース

シナリオ推奨ルーター理由
新規プロジェクト◎ App Router最新機能のフル活用
大規模アプリケーション◎ App Router動的レイアウトによる拡張性
SEO要件が厳しいサイト◯ 両者可能どちらもSSR/SSG対応
単純なLPサイト△ Pages Router学習コストの低さ

パフォーマンス実測データ

Next.jsルーター比較グラフ

↑ Vercel公式ベンチマークより(2024年測定)

  1. LCP (Largest Contentful Paint)
    App Router:平均 1.2s
    Pages Router:平均 1.8s

  2. JSバンドルサイズ
    App Router:最大40%削減(サーバーコンポーネント利用時)

意思決定フローチャート

移行に関するアドバイス

  1. インクリメンタル移行
    /appディレクトリを追加し、部分的な移行から開始可能

  2. 共通の問題点

    bash
    # 頻出エラー対処
    Error: Invariant: getStaticProps is not supported in app/

    generateStaticParamsへの置き換えが必要

公式リファレンス

最新情報は常に公式ドキュメントで確認してください:

bash
npx @next/codemod create-next-app@latest

移行ツールを提供

結論

2024年現在のベストプラクティス

  • 新規プロジェクトにはApp Routerを推奨
    サーバーコンポーネント・ストリーミングなどモダンな機能を活用可能
  • Pages Routerは以下に有効
    • 学習目的の小規模プロジェクト
    • 既存プロジェクトのマイグレーション中段階
  • パフォーマンス差
    複雑なアプリではApp Routerが明確な優位性(特にLCP向上)

Next.jsチームはApp Routerをフレームワークの将来と位置付けており、長期的な互換性保証はありません。新規プロジェクトではApp Routerの採用が安全な選択です。