Next.jsのAppRouterの使い方とPagesRouterの違い【移行手順】
この記事のポイント
Next.js App RouterはReact Server Componentsを基盤とする新システムで、Pages Routerから刷新されたディレクトリ構造やコンポーネントの使い分け、キャッシュ制御によりWebアプリの表示速度とSEOを最適化します。
「Next.js App Routerの具体的な使い方やPages Routerとの違いを正しく理解し、Webアプリのパフォーマンスを最大化してエンジニアとしての市場価値も高めたい。」
こうした疑問に答えます。
本記事の内容
- Server/Client Componentsの使い分けと基本概念
- ディレクトリ構成や動的ルーティングの変更点と移行手順
- パフォーマンスを最適化するデータフェッチのベストプラクティス
Next.js App Routerの仕様を公式チュートリアルのように正確に把握することで、モダンで効率的なフロントエンド開発が可能になります。
最新のAPIやLinkコンポーネントによる遷移、キャッシュ機構を使いこなせれば、SEOに強い高速なアプリケーションを構築できるはずです。まずは基本から応用まで、この記事でしっかりマスターしましょう。それでは、具体的な解説を始めます。
Next.js App Routerの基本概念
Next.jsとはReactベースのフルスタックフレームワークであり、Next.js App RouterはPages Routerを刷新した新しい機能です。React Server Componentsを基盤とし、パフォーマンスと使い勝手を大幅に向上させています。
ディレクトリ構造がURLパスと連動する仕組みを採用しました。appディレクトリ内のフォルダにpage.tsxを置くことで、ページとして認識されます。
Server Componentsの特徴
Next.js App Routerでは、コンポーネントは標準でServer Componentsとして動作します。サーバー側で処理を行うため、クライアントに送るJavaScriptの量を減らせます。
データの取得をサーバー上で完結できるため、セキュリティの向上も期待できます。ブラウザの負荷を抑えつつ、SEOに強いサイトを構築する際に役立つ技術で、Next.jsとReactの違いを踏まえた設計が前提になります。
- 主な役割:データ取得と静的コンテンツの表示
- 実行場所:サーバーサイドのみ
- データ取得:async/awaitを用いたfetch APIが利用可能
- 制限:useStateなどのHooksやイベントリスナーは利用不可
Client Componentsの特徴
Client Componentsは、ブラウザ上で動的な操作を実現するために使用します。ファイル冒頭に'use client'と記述することで、この機能が有効になります。
フォーム入力やボタンクリックなど、ユーザーとの対話を伴うUIには欠かせません。Next.js App Routerのチュートリアルでも、基本的な使い方が詳しく解説されています。
- 主な役割:ユーザーとの対話や複雑な状態管理
- 実行場所:クライアント(ブラウザ)
- ルーティング:next/navigationのHooksを使用
- 機能:useStateやuseEffectなどのReact機能がフル活用可能
コンポーネントの使い分け基準
基本はServer Componentsで構成し、必要な部分だけをClient ComponentsにするのがNext.js App Routerのベストプラクティスです。適切な分離により、アプリの読み込み速度が高まります。
Pages Routerとの違いを意識しながら、両コンポーネントの役割を分担させましょう。それぞれの特性は下表の通りです。
| 項目 | Server Components | Client Components |
|---|---|---|
| 主な用途 | 効率的なデータフェッチ | インタラクティブな操作 |
| API呼び出し | サーバーサイドで直接実行 | useEffectなどで実行 |
| React Hooks | 使用不可 | 使用可能 |
| イベントリスナー | onClickなどは使用不可 | 使用可能 |
最新バージョンの変更点
Next.js App Routerの使い方は、従来のPages Routerから大きく進化しました。特にデータ取得やディレクトリ構成の管理が簡素化されています。
動的ルーティングについても、フォルダ名にブラケットを使う直感的な方法へ統一されました。APIをルートハンドラーで定義するなど、開発体験も向上しています。
- データ取得の簡略化:getServerSidePropsを使わずfetch関数で完結
- ディレクトリ構成:appフォルダによる1フォルダ1ページの原則
- レイアウト機能:layout.tsxによる入れ子構造の実現
- 特殊ファイル:loading.tsxやerror.tsxによる状態制御
- API定義:route.tsによるWeb標準のリクエスト処理
Linkコンポーネントを活用することで、ページ間の高速な遷移も可能です。最新のNext.js 14以降では、これらの機能が安定して利用でき、Next.js 15の変更点を踏まえつつNext.js TypeScript環境構築で型安全な開発を進めるのが定石です。
Next.js App Routerを導入するメリット
Next.js 13から登場したNext.js App Routerは、従来のPages Routerから設計が大きく進化しました。React Server Componentsをベースとした新しい仕組みは、開発効率とユーザー体験の両方を向上させます。
Next.js App Routerの使い方を学ぶことで、モダンなWebアプリ開発が可能です。主要な4つの観点から、具体的な利点を詳しく解説します。
ページ表示速度の向上
App Router導入の大きなメリットは、ページ表示速度の劇的な向上です。デフォルトでServer Componentsが採用されており、サーバー側でレンダリングが実行されます。
ブラウザへ送信されるJavaScript量が削減されるため、動作が非常にスムーズです。Next.js App RouterのLinkコンポーネントによる遷移も、最適化された通信で高速に行われます。
Core Web Vitalsのスコア改善
Next.js App Routerは、Googleの重要指標であるCore Web Vitalsの改善に直結します。コンポーネント単位でレンダリングを最適化し、不要なJavaScriptの実行負荷を抑えられるためです。
Pages Routerとの比較で、各指標における改善効果は以下の通りです。
| 指標 | App Routerによる改善効果 |
|---|---|
| LCP | サーバー側でのデータ取得とストリーミングにより表示が高速化する |
| FID / INP | JavaScript実行量が減り、ユーザーの操作への応答性が向上する |
| CLS | loading.tsxなどの標準機能で適切なプレースホルダを表示できる |
各指標においてPages Routerよりも細かな制御が可能となり、優れたスコアをもたらします。
SEO評価の向上
SEOの観点でも、Next.js App Routerは非常に強力なツールです。サーバー側でデータを直接取得できるため、検索クローラーへデータを含む高品質なHTMLを素早く提供できます。
SEO改善に役立つポイントは以下の通りです。
- Metadata APIを活用し、ページごとに最適なタイトルをサーバー側で生成できる
- Next.js App RouterのAPIを活用した効率的なデータ取得が可能
- 高速な読み込み速度自体が検索順位にプラスの影響を与える
UIとデータ取得を統合する設計により、Next.js SEO対策に強い構造を自然に構築できます。
最新技術の習得による市場価値アップ
Next.js App Routerを使いこなすと、エンジニアとしての市場価値が大幅に高まります。React Server Componentsという次世代の設計思想を深く理解できるためです。
習得すべき主な要素は次の通りです。
- Server ComponentsとClient Componentsの適切な使い分け
- Next.js App Routerのディレクトリ構成やファイル規約の理解
- 動的ルーティングなどの高度な実装
- Server Actionsを用いた最新のデータ処理手法
Next.js App Routerのチュートリアルを通じた学習は、モダンな現場で役立ちます。最新のベストプラクティスを習得し、開発の最前線で活躍しましょう。
Next.jsのApp Routerへの移行に伴う変更点
Next.js 13.4で安定版になったNext.js App Routerは、従来のPages Routerから設計思想を刷新したシステムです。React Server Componentsを基盤として、パフォーマンスの最適化や開発体験の向上を実現しました。
移行を進めるには、ディレクトリ構成やデータフェッチの仕組みといった多くの変更点を理解する必要があります。主要な4つの変更点について、具体的な使い方を交えて詳しく解説します。
ディレクトリ構造の変更
Next.js App Router導入で最も大きな変化は、ルーティングを管理するファイルシステムです。Pages Routerはpages直下のファイル名がルートになりましたが、App Routerはappフォルダ内の構造でルートが決まります。
具体的なディレクトリ構成の違いは以下の通りです。
| 項目 | Pages Router | App Router |
|---|---|---|
| ルート用ディレクトリ | pages | app |
| ルート定義方法 | ファイル名(about.tsxなど) | フォルダ名(about/page.tsx) |
| ページ用ファイル名 | 自由 | page.tsx(固定) |
App Routerでは1つのフォルダを1つのルートとして扱います。例えば、app/about/page.tsxという構成でページを作成しなければなりません。page.tsx以外のファイルは外部に公開されないため、コンポーネントを同じ場所に配置できるメリットがあります。
動的ルーティングの書き方
Next.js App Routerにおける動的ルーティングの定義は、フォルダ名にブラケットを使用する形式に統一されました。Pages Routerのようなファイル名へのブラケット使用は行いません。
具体的な使い方は以下の通りです。
- [id]/page.tsx の形式でフォルダとファイルを作成する
- ページコンポーネントの引数からparamsを取得する
- 取得した値を使って動的にデータを表示する
ページ遷移にはLinkコンポーネントを使い、直感的なナビゲーションを実現します。クライアント側での制御には、next/navigationからインポートするuseRouterなどのHooksを利用してください。
特殊ファイルの役割
Next.js App Routerの使い方をマスターするには、予約済みファイル名の役割を覚えることが重要です。これらを利用することで、共通レイアウトやローディング表示を簡単に実装できます。
主な特殊ファイルの種類と役割を紹介します。
- layout.tsx:共通のレイアウトを定義し、ネストも可能。
- loading.tsx:React Suspenseを利用したローディング中画面。
- error.tsx:エラーが発生した際に表示する画面。
- not-found.tsx:404ページ用の画面。
すべてのコンポーネントは標準でサーバーコンポーネントとして動作します。ブラウザ側の処理が必要な場合は、ファイル冒頭に"use client"と記述しましょう。
APIルートの作り方
Next.js App RouterでAPIを構築する場合、route.tsという予約済みファイル名を使用します。apiディレクトリ内のフォルダ構造がそのままエンドポイントのパスになります。
API作成のルールと手順をまとめました。
- app/api/hello/route.tsのようにファイルを配置する
- GETやPOSTといったメソッド名の関数をエクスポートする
- page.tsxと同じフォルダには配置できない制約がある
データ更新処理には、ベストプラクティスとして推奨されるServer Actionsも活用しましょう。基本的なNext.js API開発のチュートリアルを通じて、APIルートの挙動を確認することをおすすめします。
Next.jsのApp Routerの開発チュートリアル
Next.js App Routerは、React Server Componentsの仕組みを最大限に活用する新しいルーティングシステムです。従来の環境と比較して、パフォーマンス向上や直感的なデータフェッチを実現しました。
Pages Routerとの主な相違点を下表で整理します。
| 項目 | App Router | Pages Router |
|---|---|---|
| ルーティング | appディレクトリ | pagesディレクトリ |
| コンポーネント | デフォルトでServer Components | すべてClient Components |
| データフェッチ | async/awaitによる直接取得 | getServerSidePropsなど |
| レイアウト機能 | layout.tsxによる高度なネスト | _app.jsによる限定的実装 |
最新のNext.jsではApp Routerが標準仕様です。新規プロジェクトを構築する際は、この仕組みの理解が欠かせません。
①:新規プロジェクトを作成する
Next.js App Routerの使い方を学ぶ第一歩は、プロジェクトの作成です。公式CLIのcreate-next-appを使えば、最新環境をすぐに用意できます。
- ターミナルで npx create-next-app@latest を実行
- Use App Router? という質問に Yes と回答
- TypeScriptやTailwind CSSなどの選択肢を決定
Next.js App Routerのディレクトリ構成では、appフォルダが中心の役割を担います。このフォルダ配下の構造が、そのままURLパスに反映される仕組みで、より詳細なNext.js環境構築の手順もあわせて確認すると安心です。
②:ページコンポーネントを作成する
実際のWebページを定義するには、page.tsxというファイルを作成します。フォルダ名がURLパスになり、直感的な動的ルーティングの設定も可能です。
- app/about/page.tsx を作ると /about でアクセス可能
- Client Componentsを使う場合は先頭に 'use client' と記述
App Router内のコンポーネントは、標準でサーバー側で実行されます。これによりブラウザへのJavaScript転送量を減らし、パフォーマンスを最適化できます。
③:Linkコンポーネントで画面遷移する
ページ間の移動には、Next.js App RouterのLinkコンポーネントを活用します。Linkコンポーネントはフルリロードを回避し、高速な遷移を実現する仕組みです。
- next/link から Link をインポート
- aタグの代わりに Link href="/path" を使用
このコンポーネントは移行先のデータを事前に読み込むプリフェッチ機能を持っています。ユーザー体験を高めるだけでなく、SEOの観点からも非常に有効な手段です。
④:サーバー側でデータを取得する
Next.js App RouterにおけるAPI連携は、サーバー側で直接実行するのがベストプラクティスです。従来の特殊な関数を使わず、コンポーネントをasync関数にするだけでデータを取得できます。
- コンポーネントを async 関数として定義
- 関数内で await fetch を使いデータを取得
- 取得した結果をそのままJSX内で展開
この手法によりコードが簡潔になり、セキュリティ性能も向上します。チュートリアルの中でも、特に強力な進化を遂げたポイントです。
⑤:サンプルアプリを起動する
すべての構築が終わったら、ベストプラクティスに沿って動作を確認しましょう。開発サーバーを起動して、ブラウザで表示を確認してください。
- ターミナルで npm run dev を実行
- http://localhost:3000 にアクセス
正常に動作すれば、モダンなアプリの基礎は完成です。次は共通レイアウトのlayout.tsxや、読み込み中を示すloading.tsxを追加し、より実践的な内容はNext.jsチュートリアルで機能を拡張しましょう。
Next.jsのApp Routerのベストプラクティス
Next.js App RouterはReact Server Componentsを基盤とした新しい仕組みで、現在の開発における標準です。Pages Routerとの違いを正しく理解すると、パフォーマンス向上や直感的なレイアウト管理を実現できます。
App Routerを最大限に活用するには、サーバー側での処理を優先する設計思想が重要です。2025年現在の最新情報を踏まえたベストプラクティスを詳しく解説します。
おすすめのディレクトリ構成
Next.js App Routerのディレクトリ構成の基本は、appフォルダをルーティング定義に集中させることです。ロジックやコンポーネントを適切に分離すれば、プロジェクトの保守性が劇的に向上します。
おすすめの構成例は以下の通りです。
- src/app/:ルーティング定義、layout.tsx、page.tsxのみを配置
- src/components/:再利用可能なUIコンポーネント
- src/lib/:共通のユーティリティ関数やAPIクライアント設定
- src/features/:機能単位で分割したコンポーネントやロジック
(auth)などのルーティンググループの活用も効果的です。URLに影響を与えず、認証状態に応じたレイアウトの出し分けが容易になります。
効率的なキャッシュ制御
Next.js App Routerには強力なキャッシュ機構が標準で備わっています。これらを適切に制御して、ユーザー体験の向上とサーバー負荷の軽減を両立させましょう。
データフェッチの性質に応じて、以下の戦略を使い分けるのが理想的です。
| キャッシュ戦略 | 概要 | 主な用途 |
|---|---|---|
| Static Rendering (SSG) | ビルド時に生成しリクエスト間で共有 | ブログ記事や会社概要 |
| Dynamic Rendering (SSR) | リクエストごとに生成し常に最新を維持 | ユーザー専用ダッシュボード |
| Incremental Static Regeneration (ISR) | 一定間隔でバックグラウンド生成 | ニュース一覧や商品在庫 |
最新のfetch APIでは、秒単位での期限指定やタグベースのパージが可能です。サーバーコンポーネントを優先的に使用して、ブラウザへのJavaScript送信量を減らし、Next.jsキャッシュの制御を最適化することで高速なレスポンスを実現してください。
Server Actionsの活用
Server Actionsはクライアントから直接サーバー側の関数を呼び出せる強力な機能です。API Routeを別途作成する手間を省き、型安全なデータ操作を可能にします。
Server Actionsを活用するメリットは以下の通りです。
- エンドポイントの削減:API Routeを定義する必要がない
- 型安全性:TypeScriptでリクエストとレスポンスの型を共有できる
- プログレッシブ・エンハンスメント:JavaScript読み込み前でもフォーム送信が可能
フォームバリデーションやデータベース更新など、データの変更を伴う処理には積極的に導入しましょう。これにより通信の最適化とコード量の削減が同時に達成できます。
外部ライブラリとの互換性対策
App Router環境では、すべてのコンポーネントがデフォルトでサーバーコンポーネントとして動作します。ブラウザ専用APIやReactのHooksを使用する外部ライブラリを利用する際は注意が必要です。
互換性を保つための対策は以下の通りです。
- use client ディレクティブの使用:Hooksを使うライブラリをラップするファイル先頭に記述
- appディレクトリ外での分離:ライブラリ固有のロジックをlibフォルダなどに配置
- ダイナミックインポート:next/dynamicを使用してSSRを無効化して読み込み
導入前に公式ドキュメントでReact Server Componentsへの対応状況を確認してください。設計段階でサーバーとクライアントの境界を明確にすることが成功の鍵です。
運用時のトラブルシューティング
App Routerの運用では、キャッシュの挙動やナビゲーションに伴うSEOの問題が頻発します。チュートリアルなどで基本を学び、トラブルを未然に防ぐことが大切です。
よくあるトラブルと解決策を以下にまとめました。
- キャッシュが更新されない:revalidateTagやrevalidatePathを使用して手動で無効化
- ナビゲーションの不備:クローラがリンクを辿れるようLinkコンポーネントを使用
- ハイドレーションエラー:サーバーとクライアントの不一致を避けるためuseEffect内で処理
動的ルーティングを利用する際も、適切なLinkコンポーネントの配置が欠かせません。ログツールを活用してデータ取得が意図通りか確認しながら開発を進めてください。
まとめ:Next.js App RouterをマスターしてモダンなWeb開発を実現しよう
本記事では、Next.js App Routerの基本的な使い方やPages Routerとの違いを詳しく解説しました。最新のディレクトリ構成や動的ルーティングの設定、APIの活用方法を学ぶことで、効率的なWeb開発が実現します。
Server Componentsをベースに構築し、インタラクティブな箇所にのみClient Componentsを使うのがベストプラクティスです。Linkコンポーネントによる高速な遷移や、Server Actionsによるデータ処理も積極的に取り入れましょう。
本記事のポイント
- Server Componentsを基本とし、必要な部分だけClient Componentsを併用する
- 最新のディレクトリ構成や特殊ファイルを活用してルーティングを最適化する
- ベストプラクティスを意識して保守性とパフォーマンスを両立させる
Next.js App Routerを導入すれば、Core Web Vitalsの改善やSEO評価の向上につながります。公式のチュートリアルを参考にしながら、まずは小規模なプロジェクトから実装を始めてみてください。
具体的な導入支援や技術的な相談が必要なときは、いつでもお気軽にお声がけください。フロントエンド開発の市場価値を高めるために、一歩ずつ新しい技術を習得しましょう。
参考文献
- App Router (New Navigation): Detailed explanation of Next.js App Router including directory structure, server/client components, data fetching, and routing.
- Getting Started: App Router - Official tutorial for creating projects, pages, links, and server-side data fetching with Next.js App Router.
- Server and Client Components - Documentation on differences, usage guidelines, and best practices for Next.js App Router components.
執筆者
編集部
Next.jsやAIを活用したモダンWeb開発・SEO実装に関する情報を発信。SEOに最適化したモダンWebサイト制作、設計ノウハウ、構造化データや内部リンク設計などを中心に扱っています。
監修者
MT Templates 代表/編集長
海外メディア企業でSEOエディターとして従事後、独立。複数メディア運営の経験をもとに、Next.jsやAIを活用したWeb開発・SEO技術を発信。リード獲得につながるサイト構築からSEO設計まで一貫したサポートを提供している。
関連記事
Reactのライフサイクルの仕組みとuseEffectでの実装【図解】
旧機能の廃止や再描画に悩む方へ、Reactのライフサイクルを図解し、useEffect等のフックによるアンマウント制御を学ぶことで、最適な実装が可能です。
Reactのコンポーネントの作り方・分け方・設計【初心者向け】
Reactのコンポーネントの適切な分け方や作り方に悩む方へ、種類や使い方、設計、ライブラリまで解説し、実務で活きる高保守性コード習得を導きます。
ReactのUIライブラリ人気7選・要件別の徹底比較【プロ解説】
UI開発に悩む方へ、人気のReactのUIライブラリを解説し、Material UI等の活用で技術的負債を防ぎ、美しいUIデザインによる保守性の高い開発を実現します。
useMemoの使い方・使わない基準とは?useCallbackとの違い
ReactでuseMemoの用途にお悩みですか。useCallbackやuseEffectとの違い、使わない基準を解説。不要な再レンダリングを防ぎ、アプリを最適化できます。
ReactとRedux入門・Toolkitの全5つの実装手順【初心者向け】
ReactでReduxを導入したい方向けに、ToolkitやTypeScriptでの実装手順から使わない条件まで解説し、実務的な状態管理スキルが身につく入門記事です。
ReactのContextの使い方とアンチパターン【プロが徹底解説】
ReactのContextでPropsバケツリレーを解消する使い方を解説。再レンダリングのアンチパターンやReduxとの比較を通じ、保守性の高い実装が可能です。