トップ / 第2章
CHAPTER 02 ROUTING
ページとURLの仕組み
「フォルダを作るとページになる」App Routerの考え方を、実際のフォルダ構成で確認します。
この章でわかること
- フォルダの並びと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→/companyapp/company/access/page.tsx→/company/accessapp/news/page.tsx→/newspage.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[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 以下)だけに左側のメニューを付ける、といったことができます。枠は入れ子にできるのです。
ほかにも、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つ選んで「答え合わせをする」を押すと、正誤と解説が表示されます。何度でも選び直せます。
この章の確認問題はすべて回答済みです。間違えた問題は、解説を読んでから本文の該当箇所を見直しておきましょう。