6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.js 13でPages RouterとApp Routerの違いを理解しよう👀

Last updated at Posted at 2023-12-28

Next.js 13でPages RouterとApp Routerの違いを理解しよう👀✨

📝 概要

Next.js 13では、新しいルーティングシステム「App Router」が導入されました。これは従来の「Pages Router」とは異なるレンダリング戦略を持ち、Reactの最新機能を活用できる柔軟な仕組みです。本記事では、Pages RouterApp Routerの違いを分かりやすく解説し、どちらを選ぶべきかについて考察します。


💡 レンダリングとは?

  • レンダリング: ReactがコードをHTMLに変換し、ブラウザがUIを描画できるようにするプロセス。
  • プリレンダリング: サーバーサイドでHTMLを生成することで、初期ロード時間を短縮。
  • ハイドレーション: レンダリング済みのHTMLにJavaScriptを注入し、インタラクティブ性を追加するプロセス。

📂 Pages Routerの特徴

🌟 仕組み

  • ファイルシステムベースのルーティング(pages/ディレクトリ)。
  • 各ページは以下の方法でレンダリング可能:
    • 静的生成(SSG): ビルド時にHTMLを生成。
    • サーバーサイドレンダリング(SSR): リクエスト時にHTMLを生成。

メリット

  • 検索エンジン最適化(SEO)が容易。
  • オフライン対応が可能。
  • シンプルで直感的な構造。

📌

/pages/about.js → /about
/pages/blog/[slug].js → /blog/:slug

🆕 App Routerの特徴

🌟 仕組み

  • ディレクトリベースのルーティング(app/ディレクトリ)。
  • React Server Components(RSC)やストリーミングなど、最新のReact機能を活用。
  • ページごとに以下を柔軟に選択可能:
    • サーバーサイドレンダリング(SSR)
    • クライアントサイドレンダリング(CSR)

メリット

  • レイアウトやコンポーネントの再利用が簡単。
  • サーバー負荷軽減とパフォーマンス向上。
  • ネストされたルートや動的なUI構築が容易。

📌

/app/about/page.js → /about
/app/blog/[slug]/page.js → /blog/:slug

🔍 Pages Router vs App Router: 機能比較

機能 Pages Router App Router
ルーティング方式 ファイルシステムベース ディレクトリベース
レンダリング戦略 SSG・SSR SSR・CSR
パフォーマンス 初期ロードが遅い場合あり 初期ロードが高速
SEO対応 良好 良好
静的生成対応 可能 可能
高度なReact機能の利用 制限あり 可能
サーバー負荷軽減 制限的 柔軟

🛠️ 使い分けガイド

  1. 🖥️ SEO重視・静的ページ中心のサイト
    → Pages Routerが適しています。

  2. 🌐 動的コンテンツ・最新React機能活用アプリケーション
    → App Routerが適しています。


🎯 まとめ

Next.js 13で導入されたApp Routerは、従来のPages Routerに比べて柔軟性が高く、最新のReact機能を活用できます。しかし、用途によってどちらを使用するか選ぶことが重要です。以下を参考にして選択しましょう:

  • 静的でシンプルなサイト → Pages Router
  • 動的で複雑なアプリケーション → App Router

どちらもNext.jsの強力な機能セットを活用できるため、プロジェクトに最適な選択肢を見つけてください!🚀


🔧 実践的なコード実装例とディレクトリ構成

Next.js 13のApp Routerでは、ファイルやディレクトリの構成がプロジェクトの骨組みとなります。
以下は、App Routerを使ったシンプルなブログ構成例です。

my-next-app/
├─ app/
│  ├─ layout.js          // 全ページに共通のレイアウト
│  ├─ page.js            // ルートページ
│  └─ blog/
│     └─ [slug]/
│         └─ page.js     // 動的ルートのブログ記事ページ
└─ package.json

この構成では、layout.js にグローバルなUI(ヘッダーやフッターなど)を定義し、各ページが継承する形になります。
たとえば、app/layout.js のサンプルコードは以下のようになります。

// app/layout.js
export default function RootLayout({ children }) {
  return (
    <html lang="ja">
      <head>
        <title>My Next.js App</title>
      </head>
      <body>
        <header style={{ padding: '1rem', backgroundColor: '#eee' }}>
          <h1>My Next.js Blog</h1>
        </header>
        <main>{children}</main>
        <footer style={{ padding: '1rem', backgroundColor: '#eee' }}>
          © 2025 My Next.js App
        </footer>
      </body>
    </html>
  );
}

また、動的ルートのページ(例:ブログ記事ページ)は以下のように実装します。

// app/blog/[slug]/page.js
export default function BlogPost({ params }) {
  // params.slug でURLからスラッグ情報を取得
  return (
    <article>
      <h2>記事タイトル: {params.slug}</h2>
      <p>この記事は App Router による動的ルートを実現しています。</p>
    </article>
  );
}

こうした実装例を試すことで、最新のReact Server Componentsやストリーミング機能を利用しながら、柔軟なUIを構築できます。👨‍💻


🔄 Pages RouterからApp Routerへの移行ガイド

既存のプロジェクトがPages Routerを利用している場合、App Routerへの移行は段階的に実施することがおすすめです。以下は、移行時の主な手順と注意点です。

移行時のチェックリスト

  • ディレクトリ構成の変更
    Pagesディレクトリ(pages/)から、Appディレクトリ(app/)へルーティングファイルを移動する。
    → 移行前後でURL構造が変わらないように注意。

  • データフェッチ方法の更新
    Pages Routerでは getStaticPropsgetServerSideProps を使っていたが、App Routerではサーバーコンポーネント内で async/await を利用する。
    → データ取得のタイミングが変わるため、キャッシュ戦略も見直す。

  • グローバルCSSの読み込み方法
    App RouterではグローバルなCSSのインポートの仕方や、レイアウトの継承が異なるため、公式ドキュメントを参照して設定を最適化する。

移行の流れを示すフローチャート

   +------------------------+
   |   既存プロジェクトの   |
   |   Pages Router確認     |
   +-----------+------------+
               │
               ▼
   +------------------------+
   |   app/ ディレクトリ   |
   |   の作成と初期設定     |
   +-----------+------------+
               │
               ▼
   +------------------------+
   |   ページコンポーネント  |
   |   の移行とデータ取得   |
   +-----------+------------+
               │
               ▼
   +------------------------+
   |   グローバルCSSや     |
   |   レイアウトの更新     |
   +-----------+------------+
               │
               ▼
   +------------------------+
   |   動作確認とデバッグ   |
   +------------------------+

このチェックリストとフローチャートを参考に、段階的に移行を進めると安全です。🔎


⚡ 開発中に気を付けたいポイント

App RouterとPages Routerそれぞれの利点を生かしながら、プロジェクトに最適な選択をするために、次の点に注意しましょう。

  • コンポーネントの再利用性
    App RouterではレイアウトやUIコンポーネントの再利用が容易なため、適切に分割してメンテナンスしやすいコード構成を心がける。

  • データ取得のタイミング
    サーバーコンポーネントで非同期データを扱う場合、SuspenseError Boundariesを活用してユーザー体験を向上させる。

  • エラーハンドリング
    新しいルーティング方式では、エラーハンドリングの仕組みも変化するため、各レイヤーでの対策(404ページ、500エラーページなど)を確実に実装する。

  • 開発環境の整備
    Next.js 13の新機能を十分に活用するため、公式ドキュメントやコミュニティの最新情報に常に目を通すと良いでしょう。🔥


🎯 まとめと次のステップ

この続きの記事では、以下の点を解説しました。

  • 実践的なコード例とディレクトリ構成
    App Routerの基本的なファイル構成と実装例で、ページレイアウトや動的ルートの組み立て方を確認しました。

  • Pages RouterからApp Routerへの移行ガイド
    移行時の手順や注意点、データフェッチやグローバルCSSの設定の違いにフォーカスし、段階的な移行の流れを示しました。

  • 開発中に気を付けたいポイント
    再利用性、データ取得のタイミング、エラーハンドリングといった、運用時に大切なベストプラクティスを確認しました。

Next.js 13の新機能を活用することで、より柔軟でパフォーマンスの高いWebアプリケーションが実現可能です。まずは小規模なプロジェクトで試しながら、新しいルーティングシステムの理解を深め、段階的に既存プロジェクトへの移行検討を進めてみましょう。🚀

💬 この記事が、Next.js 13での実装や移行のヒントになれば幸いです。次回も実践的なTipsを紹介予定なので、ぜひチェックしてください! Happy Coding! 😊

💬 「この記事が役立った!」と思ったらぜひシェアしてください!次回もお楽しみに! 😊

6
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?