コンテンツにスキップ

ルーティングの基礎

すべてのアプリケーションの骨格はルーティングです。このページでは、Webルーティングの基本概念とNext.jsでのルーティングの処理方法について説明します。

用語

まず、ドキュメント全体でこれらの用語が使用されています。以下に簡単なリファレンスを示します。

Terminology for Component Tree
  • ツリー: 階層構造を視覚化するための規則。たとえば、親子コンポーネントを持つコンポーネントツリー、フォルダ構造などです。
  • サブツリー: ツリーの一部で、新しいルート(最初)から始まり、リーフ(最後)で終わります。
  • ルート: ツリーまたはサブツリーの最初のノード。ルートレイアウトなどです。
  • リーフ: 子を持たないサブツリー内のノード。URLパスの最後のセグメントなどです。
Terminology for URL Anatomy
  • URLセグメント: スラッシュで区切られたURLパスの一部。
  • URLパス: ドメインの後に来るURLの一部(セグメントで構成されます)。

app Router

バージョン13では、Next.jsはReactサーバーコンポーネント上に構築された新しいApp Routerを導入しました。これは、共有レイアウト、ネストされたルーティング、読み込み状態、エラー処理などをサポートします。

App Routerは、appという名前の新しいディレクトリで動作します。 appディレクトリはpagesディレクトリと並行して動作し、段階的な導入を可能にします。これにより、アプリケーションの一部のルートを新しい動作にオプトインしながら、他のルートをpagesディレクトリに残して以前の動作を維持できます。アプリケーションでpagesディレクトリを使用している場合は、Pages Routerのドキュメントも参照してください。

知っておくと良いこと: App RouterはPages Routerよりも優先されます。ディレクトリをまたがるルートは同じURLパスに解決されるべきではなく、競合を防ぐためにビルド時にエラーが発生します。

Next.js App Directory

デフォルトでは、app内のコンポーネントはReactサーバーコンポーネントです。これはパフォーマンスの最適化であり、簡単に導入できます。また、クライアントコンポーネントも使用できます。

推奨: サーバーコンポーネントに慣れていない場合は、サーバーページをご覧ください。

フォルダとファイルの役割 ルートの定義を参照してください。
  • ファイルは、ルートセグメントに表示されるUIを作成するために使用されます。特別なファイルを参照してください。
  • ルートセグメント

    ネストされたルート ファイル規約

    Next.jsは、ネストされたルートに特定の動作を持つUIを作成するための一連の特殊ファイルを提供します

    layoutセグメントとその子で共有されるUI
    pageルート固有のUIとルートを公開する
    loadingセグメントとその子のためのローディングUI
    not-foundセグメントとその子のためのNot Found UI
    errorセグメントとその子のためのエラーUI
    global-errorグローバルエラーUI
    routeサーバーサイドAPIエンドポイント
    template特殊な再レンダリングされるレイアウトUI
    default並列ルートのためのフォールバックUI

    参考情報: 特殊ファイルには、.js.jsx、または.tsxファイル拡張子を使用できます。

    コンポーネント階層

    ルートセグメントの特殊ファイルで定義されたReactコンポーネントは、特定の階層でレンダリングされます

    • layout.js
    • template.js
    • error.js (React エラー境界)
    • loading.js (React サスペンス境界)
    • not-found.js (React エラー境界)
    • page.js またはネストされた layout.js
    Component Hierarchy for File Conventions

    ネストされたルートでは、セグメントのコンポーネントは親セグメントのコンポーネントの**内部**にネストされます。

    Nested File Conventions Component Hierarchy

    コロケーション

    特殊ファイルに加えて、appディレクトリ内のフォルダに独自のファイル(例:コンポーネント、スタイル、テストなど)を配置することもできます。

    これは、フォルダがルートを定義する一方で、page.jsまたはroute.jsによって返されるコンテンツのみが公開アドレス指定可能であるためです。

    An example folder structure with colocated files

    プロジェクト構成とコロケーションについて詳しくはこちらをご覧ください。

    高度なルーティングパターン

    App Routerは、より高度なルーティングパターンを実装するのに役立つ一連の規約も提供しています。これらには以下が含まれます

    • 並列ルート: 同じビューに2つ以上のページを同時に表示し、個別にナビゲートできるようにします。独自のサブナビゲーションを持つ分割ビューに使用できます。例:ダッシュボード。
    • ルートのインターセプト: ルートをインターセプトし、別のルートのコンテキストで表示できるようにします。現在のページのコンテキストを維持することが重要な場合にこれらを使用できます。例:1つのタスクを編集しながらすべてのタスクを表示したり、フィードの写真を展開したりする。

    これらのパターンを使用すると、より豊かで複雑なUIを構築でき、これまで小規模チームや個々の開発者にとって実装が複雑だった機能を民主化できます。

    次のステップ

    Next.jsでのルーティングの基本を理解したので、以下のリンクに従って最初のルートを作成してください

    (リンク部分は日本語に訳さず原文のままとします。必要であればDeepL等で訳してください。)