第1章から読む →

トップ / 第2章

CHAPTER 02 ROUTING

ページとURLの仕組み

「フォルダを作るとページになる」App Routerの考え方を、実際のフォルダ構成で確認します。

読む目安 15分確認問題 3問

この章でわかること

  • フォルダの並びとURLの対応
  • 商品詳細のように中身が変わるページの作り方
  • layout.tsx などの特別なファイルの役割

1. URLと「ルーティング」

URLは、インターネット上の住所です。たとえば https://example.com/company/access なら、example.com がサイトの住所、そのあとの /company/access が「サイトの中のどの部屋か」を表します。

「このURLが来たら、このページを見せる」という道案内をルーティングと呼びます。Next.jsの App Router では、この道案内をフォルダの並びで決めます。設定ファイルを書く必要はありません。

2. フォルダを作るとページになる

App Routerでは、プロジェクトの中の app というフォルダが、サイトの入り口になります。その中にフォルダを作り、page.tsx というファイルを置くと、それがページになります。

app/page.tsx→/
app/company/page.tsx→/company
app/company/access/page.tsx→/company/access
app/news/page.tsx→/news
左がフォルダの場所、右が表示されるURL。page.tsx は「この部屋の中身」という印で、URLには出てきません。

たとえるなら

共有フォルダの整理と同じです。「経理」フォルダの中に「請求書」フォルダを作るように、company フォルダの中に access フォルダを作ると、/company/access というページの住所が生まれます。フォルダの構成を見れば、サイトの地図が分かります。

「.tsx」とは何か

ファイル名の最後の .tsx は、TypeScript(タイプスクリプト)という言語で、画面の部品を書いたファイルであることを表します。TypeScriptは、JavaScriptに「この欄には数字しか入らない」といった型(データの種類)のルールを足したものです。入力ミスを事前に見つけやすく、Next.jsでは標準的に使われます。.js や .jsx で書くこともできます。

3. 中身が変わるページ:動的ルート

ネットショップの商品詳細ページを考えてみましょう。商品が1,000個あるとき、1,000個のフォルダを作るのは大変です。

そこで、フォルダ名を [ ](角かっこ)で囲みます。これを動的ルートと呼びます。

app/products/[id]/page.tsx→/products/1
(同じファイル)→/products/2
(同じファイル)→/products/1000
1つのファイルが、すべての商品ページを受け持ちます。[id] の部分にURLの数字が入ります。

ページの中では「URLの id が 2 なら、2番の商品をデータベースから取り出して表示する」という処理を書きます。ブログ記事(/blog/[slug])、お知らせ(/news/[id])なども同じ考え方です。

たとえるなら

請求書のひな形です。ひな形は1枚だけで、「取引先名」「金額」の欄に毎回違う値を差し込めば、何百枚でも請求書が作れます。[id] は、その差し込み欄にあたります。

4. 特別な役割を持つファイル

page.tsx 以外にも、決まった名前を付けると特別な役割を持つファイルがあります。AIや開発者が作ったフォルダを見たときに、意味が分かるようにしておきましょう。

ファイル名役割例
page.tsxページの本体お知らせ一覧の中身
layout.tsx複数ページで共通する枠全ページ共通のヘッダー・フッター
loading.tsx読み込み中に表示する画面「読み込んでいます…」の表示
error.tsxエラーが起きたときの画面「問題が発生しました。再読み込みしてください」
not-found.tsx存在しないURLのときの画面いわゆる「404ページ」
route.ts画面ではなくデータをやり取りする窓口外部サービスからの通知を受ける(第5章)

layout.tsx:共通の枠

特に大事なのが layout.tsx です。app/layout.tsx に書いたヘッダーとフッターは、サイトの全ページに表示されます。さらに app/admin/layout.tsx を作れば、管理画面(/admin 以下)だけに左側のメニューを付ける、といったことができます。枠は入れ子にできるのです。

app/layout.tsx(サイト全体の枠:ヘッダー・フッター) app/admin/layout.tsx(管理画面の枠:左メニュー) 左メニュー app/admin/users/page.tsx ページの中身(利用者一覧)
枠(layout)の中に、さらに枠を入れ、その中にページの中身が入ります。

ほかにも、URLに出さずにフォルダを整理するための (グループ名) のように丸かっこで囲んだフォルダもあります。見かけたら「整理用のフォルダだな」と思えば十分です。

5. ページ間の移動:Link

ページからページへ移動するリンクには、Next.jsが用意した Link という部品を使います。

// 「会社概要へ」というリンクを置く
<Link href="/company">会社概要へ</Link>

コードは読めなくて大丈夫です。「href に移動先のURLを書く」とだけ覚えておきましょう。

普通のリンクと違い、Link は画面全体を読み込み直さず、変わった部分だけを差し替えます。さらに、画面に見えているリンク先のページを裏でこっそり先読み(プリフェッチ)しておくので、クリックした瞬間にページが切り替わったように感じられます。

この章のまとめ

  • App Routerでは、app フォルダの中のフォルダの並びが、そのままURLになる。page.tsx がページ本体。
  • [id] のような動的ルートで、中身が変わる多数のページを1つのファイルで扱える。
  • layout.tsx は共通の枠で、入れ子にできる。loading.tsx・error.tsx・not-found.tsx にも決まった役割がある。

確認問題

選択肢を1つ選んで「答え合わせをする」を押すと、正誤と解説が表示されます。何度でも選び直せます。