Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Next.js App Router Deep Dive: Evolution from Pages Router and Its Latest Features

2025年09月19日に「Dev.to」が公開したITニュース「Next.js App Router Deep Dive: Evolution from Pages Router and Its Latest Features」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Next.jsのApp Routerは、従来のPages Routerから進化し、React Server Componentsを基盤に、パフォーマンスと開発体験を刷新した。サーバー側コンポーネント、ストリーミング、並列・インターセプト経路、ミドルウェアなどの新機能で、複雑なUIや高速なナビゲーションを実現する。

ITニュース解説

Next.jsは、Reactを使ってWebアプリケーションを開発するためのフレームワークである。近年、このNext.jsに大きな進化をもたらす「App Router」という新しいルーティングシステムが導入された。これは、従来の「Pages Router」とは異なる設計思想に基づき、開発体験とユーザー体験の両方を大きく向上させるものだ。この新しいシステムは、React Server Components (RSC)という技術を基盤としており、Webアプリケーションのパフォーマンスを最適化し、より複雑なUIパターンを効率的に実現できるように設計されている。

まず、従来のPages Routerと新しいApp Routerの主な違いから見ていこう。Pages Routerでは、すべてのコンポーネントがデフォルトでクライアントサイドで動作する「クライアントコンポーネント」だったが、App Routerでは、デフォルトでサーバーサイドで動作する「サーバーコンポーネント」になっている。これにより、初期表示のパフォーマンスが向上し、サーバーとクライアントの役割がより明確に分離される。クライアントで動作させたい場合は、ファイルの先頭に'use client'と記述することで、明示的にクライアントコンポーネントとして指定できる。

データ取得の方法も変更された。Pages RouterではgetStaticPropsgetServerSidePropsといった特定の関数を使ってデータを取得していたが、App Routerでは、サーバーコンポーネント内で直接fetch関数を呼び出してデータを取得できるようになり、よりシンプルで直感的な記述が可能になった。

アプリケーション全体のデザインや共通部分を定義する「レイアウト」の仕組みも進化した。Pages Routerでは_app.tsx_document.tsxが使われていたが、App Routerではlayout.tsxファイルを使う。このlayout.tsxはネストが可能で、異なるURLパスでも共通のレイアウトを維持できるため、より複雑なアプリケーション構造に対応しやすくなっている。

ルーティングの考え方も変わった。Pages Routerはpages/ディレクトリ内のファイル名に基づいたフラットなルーティングだったが、App Routerはapp/ディレクトリ内のフォルダ階層に基づいている。これにより、ルーティングが視覚的に分かりやすくなり、(group)ディレクトリのような機能を使ってURLに影響を与えずにファイルを整理することもできる。

ユーザーインターフェースの遅延表示やエラーハンドリングも改善された。Pages Routerでは手動で実装する必要があった部分が、App Routerではloading.tsxerror.tsxといった専用ファイルと、後述するSuspenseの仕組みによって、より洗練されたローディング表示やエラー境界をルートごとに簡単に設定できるようになった。また、404ページもnot-found.tsxで定義する。

APIルートに関しても、pages/api/*.tsからroute.tsファイルに役割が移り、HTTPメソッドに対応する関数をエクスポートする形式になった。

App Routerの導入で特に注目すべきは、これまで実装が複雑だったUIパターンが公式にサポートされるようになった点だ。Parallel RoutesやIntercepting Routesといった機能を使うことで、複雑なUIをより簡単に構築できるようになる。

App Routerでは、app/ディレクトリ内に配置する特別なファイルによって、ルーティングやUIの振る舞いが定義される。

  • page.tsxは、URLに対応するメインのページコンポーネントだ。
  • layout.tsxは、共通のレイアウトを定義し、ネスト可能でページ遷移後も内容が維持される。
  • template.tsxlayout.tsxに似ているが、ナビゲーションが発生するたびにコンポーネントが再マウントされるため、フォームの状態をリセットしたい場合などに有効だ。
  • loading.tsxは、データ取得中に表示するローディングUIを定義し、自動的にSuspenseと連携する。
  • error.tsxは、そのルートでエラーが発生した場合に表示するエラーUIを定義する。
  • not-found.tsxは、該当するルートが見つからない場合に表示する404ページだ。
  • route.tsはAPIルートを定義するファイルで、GETやPOSTなどのHTTPメソッドに対応する関数をエクスポートする。
  • default.tsxは、Parallel Routesにおいて、何も選択されていない場合のデフォルトUIを提供する。
  • (group)ディレクトリは、URLには影響を与えず、ファイルを整理するためのグループ化に使う。
  • [param]ディレクトリは、/users/[id]のような動的なルートを定義する。 これらのファイル規約により、アプリケーションの構成が明確になり、保守性が大きく向上する。

次に、ユーザー体験を向上させるための重要な機能であるSuspenseとStreamingについて説明する。 Suspenseは、データがまだ取得中であるか、コンポーネントの読み込みが遅延している間に、代替のUI(例えば「読み込み中...」というメッセージ)を表示する機能だ。これにより、ユーザーはWebサイトが動作していることを認識でき、待機中のストレスを軽減できる。 Streamingは、ページのすべてのコンテンツが準備できるのを待つのではなく、準備ができた部分から順次HTMLをクライアントに送信する技術だ。これにより、「真っ白な画面」が長く続くのを防ぎ、ユーザーはページのコンテンツを部分的にでも早く見始めることができるため、体感的な読み込み速度が大幅に向上する。

Parallel RoutesとIntercepting Routesは、複雑なUIをNext.jsで簡単に実現するための機能だ。 Parallel Routesは、複数のルートを同時に表示できる。例えば、メールアプリケーションで受信箱のリストとメールの詳細内容を画面の左右に並べて表示するような場合に利用できる。これにより、一つのURLで複数の異なる情報を連携させながら表示するような、リッチなダッシュボードなどを構築しやすくなる。 Intercepting Routesは、通常のナビゲーションを一時的に「横取り」し、別のビュー、例えばモーダルウィンドウでコンテンツを表示する機能だ。例えば、商品一覧ページで特定の商品をクリックしたときに、詳細情報をモーダルで表示し、そのモーダルを閉じると元のページに戻る、といった挙動を実現できる。この際、もしユーザーが直接その商品の詳細URLにアクセスした場合は、モーダルではなく通常の詳細ページとして表示される。これは、シングルページアプリケーション(SPA)のようなスムーズな体験と、URLベースのフルページ表示を両立させる優れた機能だ。

Next.jsにおけるページ遷移の速さの秘訣の一つが、<Link>コンポーネントとプリフェッチ機能だ。<Link>コンポーネントは、Next.jsでページ間の移動を行うための基本的なコンポーネントである。ユーザーが<Link>コンポーネントを含むWebページを開き、そのリンクが画面の表示領域(ビューポート)に入ると、Next.jsは自動的にリンク先のページのJavaScript、CSS、その他の必要なリソースをバックグラウンドで事前に読み込む(プリフェッチする)。これにより、ユーザーが実際にリンクをクリックしたときには、必要なリソースが既に用意されているため、ほぼ瞬時にページが切り替わるような高速なナビゲーションを実現できる。

最後に、Middlewareについて説明する。middleware.tsファイルは、Next.jsアプリケーションに対するあらゆるリクエストがサーバーに到達した直後、ページやAPIルートがレンダリングされるよりも前に実行される特別なコードだ。これにより、ページの内容が処理される前に、さまざまなリクエストレベルの処理を実行できる。 一般的な利用例としては、認証チェックがある。例えば、ログインしていないユーザーがダッシュボードのような保護されたページにアクセスしようとした場合、Middlewareがそのリクエストを検知し、自動的にログインページにリダイレクトできる。他にも、ユーザーのブラウザ設定から言語を検知して適切な言語のページにリダイレクトするロケール検出、Webサイトの異なるバージョンにユーザーを振り分けるA/Bテスト、特定のIPアドレスからのアクセスをブロックするアクセス制御など、多くの用途で活用できる。Middlewareは、アプリケーション全体にわたる横断的な処理を一元的に管理できる強力な機能であり、セキュリティの強化やユーザー体験のカスタマイズに貢献する。

App Routerは、ネストされたレイアウト、より明確になったファイル規約、StreamingとSuspenseによるユーザー体験の向上、そしてParallel RoutesやIntercepting Routesによる複雑なUIの公式サポートなど、Next.jsを大きく進化させた。<Link>コンポーネントによる高速なクライアントサイドナビゲーションも健在だ。また、Middlewareの導入により、認証やリダイレクトといったリクエストレベルの制御も容易に行えるようになった。これらの進化は、Webアプリケーション開発において新たな可能性を開き、より効率的で高品質なアプリケーションの構築を可能にする。新規プロジェクトでNext.jsを採用する場合、App Routerは強く推奨される。既存のプロジェクトについても、段階的な移行を検討することで、これらの新しい恩恵を受けることができるだろう。