エラーハンドリング方法
エラーは予期されるエラーとキャッチされない例外の2つのカテゴリに分けられます。このページでは、Next.jsアプリケーションでこれらのエラーを処理する方法を説明します。
予期されるエラーの処理
予期されるエラーとは、サーバーサイドフォームバリデーションや失敗したリクエストなど、アプリケーションの通常の操作中に発生する可能性のあるエラーです。これらのエラーは明示的に処理され、クライアントに返されるべきです。
サーバー関数
サーバー関数内で予期されるエラーを処理するには、useActionState
フックを使用できます。
これらのエラーに対しては、try
/catch
ブロックを使用したりエラーをスローしたりするのではなく、予期されるエラーを戻り値としてモデル化します。
アクションをuseActionState
フックに渡し、返されたstate
を使用してエラーメッセージを表示できます。
サーバーコンポーネント
サーバーコンポーネント内でデータを取得する場合、レスポンスを使用してエラーメッセージを条件付きでレンダリングしたり、redirect
したりできます。
Not found(見つからない場合)
ルートセグメント内でnotFound
関数を呼び出し、not-found.js
ファイルを使用して404 UIを表示できます。
キャッチされない例外の処理
キャッチされない例外は、アプリケーションの通常のフロー中に発生すべきではないバグや問題を示す予期しないエラーです。これらのエラーはスローされ、エラーバウンダリによってキャッチされるべきです。
ネストされたエラーバウンダリ
Next.jsはキャッチされない例外を処理するためにエラーバウンダリを使用します。エラーバウンダリは子コンポーネント内のエラーをキャッチし、クラッシュしたコンポーネントツリーの代わりにフォールバックUIを表示します。
ルートセグメント内にerror.js
ファイルを追加し、Reactコンポーネントをエクスポートすることでエラーバウンダリを作成します:
エラーは最も近い親のエラーバウンダリまでバブルアップします。これにより、ルート階層の異なるレベルにerror.tsx
ファイルを配置することで、細かいエラーハンドリングが可能になります。

グローバルエラー
あまり一般的ではありませんが、ルートレイアウトでエラーを処理するには、国際化を活用している場合でも、ルートappディレクトリにあるglobal-error.js
ファイルを使用できます。グローバルエラーUIは、アクティブ時にルートレイアウトやテンプレートを置き換えるため、独自の<html>
タグと<body>
タグを定義する必要があります。