Next.js/基礎/Lesson 03
ファイルコンベンション — loading.tsx · error.tsx · not-found.tsx
30分·theory
このチャプター
3/3
TypeScript
ファイルコンベンション — loading.tsx · error.tsx · not-found.tsx
💡 なぜ学ぶのか? — 「ファイル名 = 動作」のコンベンション
🎯
Pages Router 時代: ` ` コンポーネントを手動で作成し、各ページにインポートして条件分岐レンダリングを実装する必要がありました。
💼
App Router では: 同じフォルダに `loading.tsx` ファイルを置くだけで完了。Next.js が自動的に ` }>` でラップしてくれます。
⚡
エラー処理も同様 — `error.tsx` を置くだけで、そのフォルダ配下で発生したエラーを自動的にキャッチし、フォールバック UI を表示します。
🔗
これを知らないと、「なぜローディングが自動で表示されるのか」「エラーがどこでキャッチされているのかわからない」といったデバッグの落とし穴にはまることになります。
📈
ネストされたルートでは、最も近いファイルが適用されます — フォルダツリーがそのまま UI ツリーになります。
🏢 실무에서는
Server Component が `fetch` で await している間、ユーザーは空白の画面を見ることになります。同じフォルダに `loading.tsx` を一つ置くだけで、その間スケルトン UI が自動表示されます。もし fetch が throw した場合は `error.tsx` が自動的にキャッチして「もう一度試す」ボタンを表示します。これがコード追加ゼロ行で実現できます。
5つの特殊ファイル — ファイル名がコンベンション
1. 5つのファイルとその役割
2. loading.tsx — Suspense の自動ラッピング
3. error.tsx — 自動 Error Boundary
- ▸
reset()を呼び出すと Error Boundary がリセットされ、ページの再レンダリングが試みられます。 - ▸
error.digestはサーバー側エラーを識別するID(ロギング用)です。 - ▸
error.tsxは 同一フォルダのlayout.tsxで発生したエラーはキャッチできません — 一つ上の階層のフォルダに配置する必要があります。
4. not-found.tsx — 404 UI
5. ネスト時は最も近いファイルが適用される
最も近いファイルが優先されます。同じフォルダにファイルがない場合は、親フォルダへ遡って検索します。
💡 💡 ファイルコンベンション 実践5か条
1. error.tsx には必ず 'use client' を付ける
React Error Boundary はクライアント専用のため、コンベンションとして強制されます。忘れるとビルドエラーになります。
2. error.tsx は同一フォルダの layout.tsx のエラーをキャッチできない
layout でエラーが throw された場合、一つ上の階層の error.tsx がキャッチします。ルートレイアウトのエラーは global-error.tsx(Client 専用)がキャッチします。
3. loading.tsx は page.tsx の最初の await の間だけ表示される
ページのレンダリングが完了すると消えます。その後のクライアントサイドナビゲーション時には再表示されます。
4. notFound() は throw に似ている — 以降のコードは実行されない
TypeScript もここで post を non-null に型ナローイングします。
5. コンベンションファイルはすべて同じフォルダに置く
フォルダが UI のステートマシンになります。ページのあらゆる状態が一目で把握できます。
⚡ 実際に試してみよう — ファイルコンベンションのマッピング
URL ごとにどのコンベンションファイルがどの順序で適用されるかをシミュレーションします。
✏️ JS 코드
📟 コンソール出力
▶ 実行ボタンを押してください
⚠️ ブラウザのサンドボックスで実行 — console.log()のみ対応、alert/fetchは不可
確認クイズ
App Router の `error.tsx` が必ず `'use client'` でなければならない理由は何ですか?
先に読むとよい概念: Client vs Server の境界