Next.js App Routerのnot-found.tsxの使い方を徹底解説!初心者でも理解できるエラーページ作成方法
生徒
「Next.jsでページが見つからないときの画面って作れるんですか?」
先生
「はい、Next.js App Routerではnot-found.tsxという仕組みを使って簡単に作れます。」
生徒
「普通のエラーページとは違うんですか?」
先生
「Next.js専用の仕組みなので、ページ単位で表示内容を変えたり、自動で表示されたりします。それでは詳しく見ていきましょう。」
1. Next.js App Routerのnot-found.tsxとは何か
Next.js App Routerのnot-found.tsxは、ページが存在しない場合に表示される特別な画面を作るための仕組みです。インターネットでサイトを見ているときに、存在しないページを開いた場合に表示される画面を見た経験がある人も多いでしょう。そのような画面を自分のサイトでも簡単に作ることができます。
通常のウェブサイトでは、エラーページを作るにはサーバー側の設定や複雑な処理が必要になる場合があります。しかしNext.jsでは、決められた名前のファイルを配置するだけで、自動的にエラーページとして認識されます。これは初心者にとってとても便利な仕組みです。
App Routerとは、Next.jsでページを管理する新しい仕組みのことです。フォルダ構造によってページが作られるため、直感的に画面を管理できます。その中でnot-found.tsxは、存在しないURLにアクセスされた場合に表示されるページを担当します。
2. not-found.tsxの基本的な作成方法
not-found.tsxは、appフォルダまたは各ページフォルダの中に作成します。Next.jsはこのファイルを自動的に認識し、ページが見つからない場合に表示します。ファイル名は必ずnot-found.tsxにする必要があります。
例えば、サイト全体のエラーページを作りたい場合は、appフォルダの直下に作成します。そうすると、どのページでも存在しないURLにアクセスしたときに、この画面が表示されます。
export default function NotFound() {
return (
<div>
<h1>ページが見つかりません</h1>
<p>入力したURLを確認してください。</p>
</div>
);
}
このように、Reactコンポーネントと同じように画面を作ることができます。特別な設定は不要で、ファイルを置くだけで動作します。
3. ページ単位でnot-found.tsxを設定する方法
Next.js App Routerでは、フォルダごとにエラーページを変えることも可能です。例えばブログページ専用のエラーページを作ることで、利用者にわかりやすい案内を表示できます。
特定のフォルダの中にnot-found.tsxを作成すると、そのフォルダ内のページだけに適用されます。これにより、機能ごとに内容を変えることができます。
export default function BlogNotFound() {
return (
<div>
<h2>記事が見つかりません</h2>
<p>削除されたか、URLが間違っています。</p>
</div>
);
}
この方法を使うことで、利用者にとって理解しやすい画面を作ることができます。ページの種類に応じて説明を変えると、操作の迷いを減らすことができます。
4. notFound関数を使って手動でエラー表示する
Next.jsには、notFoundという特別な関数があります。この関数を使うと、条件によって意図的にエラーページを表示できます。例えば、データが存在しない場合などに利用できます。
この仕組みは、データベースやAPIから情報を取得する場合に役立ちます。存在しない情報を表示するより、エラー画面を表示したほうが利用者に親切です。
import { notFound } from "next/navigation";
export default function Page() {
const data = null;
if (!data) {
notFound();
}
return <div>データがあります</div>;
}
この関数は条件分岐と組み合わせて使います。条件分岐とは、状況によって処理を変える仕組みのことです。例えば情報がある場合と無い場合で処理を切り替えることができます。
5. デザインを整えて見やすいエラーページを作る
エラーページは単に表示するだけでなく、利用者が次に何をすればよいかを伝えることが大切です。例えばトップページへのリンクを設置すると、迷わず操作できます。
Next.jsでは通常のページと同じようにリンクを設置できます。これにより、操作しやすい画面を作ることが可能です。
import Link from "next/link";
export default function NotFound() {
return (
<div>
<h1>ページが存在しません</h1>
<Link href="/">トップページへ戻る</Link>
</div>
);
}
リンクを設置することで、利用者が別のページへ移動しやすくなります。これはサイト全体の使いやすさを向上させる重要な工夫です。
6. レイアウトと組み合わせるときの考え方
Next.js App Routerでは、layout.tsxという仕組みで共通デザインを管理できます。not-found.tsxは通常、このレイアウトの中で表示されます。そのため、サイト全体の統一感を保つことができます。
例えばヘッダーやフッターをレイアウトに配置しておけば、エラーページにも自動的に表示されます。これにより、利用者は別ページに移動しても同じサイト内にいると理解できます。
また、共通デザインを利用することで、作業量を減らすことができます。同じデザインを複数回書く必要がなくなるため、保守もしやすくなります。
まとめ
Next.js App Routerにおけるnot-found.tsxの重要な役割
Next.js App Routerでは、存在しないページへアクセスされた場合に表示する仕組みとしてnot-found.tsxが用意されています。この仕組みを活用することで、利用者が誤ったURLへアクセスした場合でも、分かりやすく丁寧な案内画面を表示することができます。ウェブ開発においては、正しいページを表示することだけでなく、存在しないページに対する対応も非常に重要です。特にNext.jsのようなモダンフレームワークでは、画面表示の一貫性や利用者体験の向上が重視されており、その中でnot-found.tsxは大きな役割を担っています。
App Routerはフォルダ構造を利用して画面を管理する仕組みです。そのため、not-found.tsxもフォルダ単位で管理することができます。サイト全体に共通するエラーページを作成したい場合はappフォルダ直下に配置し、特定の機能だけに専用のエラー画面を表示したい場合は対象フォルダ内に配置することで柔軟に対応できます。このような構造は大規模なウェブアプリケーション開発でも非常に役立ちます。
エラーページ設計が利用者体験を大きく向上させる理由
エラーページは単にページが存在しないことを伝えるだけでは十分とは言えません。利用者が次にどのような行動を取ればよいかを示すことが重要です。例えばトップページへのリンクや検索機能を設置することで、利用者が迷わずに別ページへ移動できます。このような導線設計は、ウェブサイトの使いやすさや回遊率を高めるために欠かせない要素です。
Next.jsではReactコンポーネントとしてエラーページを作成できるため、デザインや機能を自由に追加できます。Bootstrapなどのスタイルを組み合わせることで、統一感のある見やすい画面を作成することも可能です。エラーページを丁寧に設計することで、サイト全体の信頼性や品質を高める効果があります。
notFound関数による動的なエラー制御の理解
Next.js App RouterではnotFound関数を使用することで、条件によってエラーページを表示できます。例えばデータベースから取得した情報が存在しない場合や、APIから正しいデータを取得できなかった場合に活用できます。この仕組みにより、存在しない情報を無理に表示することを防ぎ、利用者に正確な状態を伝えることが可能になります。
条件分岐と組み合わせて利用することで、データの有無による画面切り替えを簡単に実装できます。これはブログ記事管理システムや商品管理システムなど、動的なデータを扱うウェブアプリケーション開発において非常に重要な技術です。
レイアウトとの連携による統一された画面設計
Next.jsのlayout.tsxと組み合わせることで、エラーページでも共通デザインを維持できます。ヘッダーやフッターなどをレイアウトにまとめておくことで、not-found.tsxでも同じ構造が自動的に適用されます。この仕組みにより、利用者はエラーページでも同じサイト内にいることを自然に理解できます。
また、共通レイアウトを利用することでコードの重複を防ぎ、保守性を向上させることができます。大規模な開発では、統一されたデザイン管理が品質維持に直結します。
サンプルプログラムで理解を深める
import Link from "next/link";
export default function NotFound() {
return (
<div className="text-center p-5">
<h1>ページが見つかりません</h1>
<p>指定されたページは存在しない可能性があります</p>
<Link href="/" className="btn btn-primary mt-3">
トップページへ戻る
</Link>
</div>
);
}
上記のサンプルでは、Next.js App Routerのnot-found.tsxを利用して案内画面を作成しています。Reactコンポーネントとして作成することで、自由にデザインを変更したり、リンク機能を追加したりすることができます。Bootstrapのボタンスタイルを組み合わせることで、操作しやすい画面を実装できます。
生徒
NextjsのAppRouterでは存在しないページにアクセスした場合に専用の画面を表示できる仕組みがあることが理解できました
先生
その通りですnotfoundtsxを作成することで存在しないページに対して分かりやすい案内を表示できます
生徒
フォルダごとにエラーページを変えることもできるので機能別に案内内容を変えられる点も便利だと思いました
先生
その理解はとても重要です大規模なウェブ開発では機能ごとに異なる説明を表示することで利用者が迷いにくくなります
生徒
notfound関数を使えばデータが存在しない場合にもエラーページを表示できることが分かりました
先生
そうです条件分岐と組み合わせることで動的な画面制御が可能になりますこれは実務でも非常に多く使われる技術です
生徒
レイアウトと組み合わせることでサイト全体の統一感を保てる点も重要だと感じました
先生
とても良い視点です共通レイアウトを活用すると保守性が高まり品質の高いウェブアプリケーションを作ることができます今回学んだ内容はNextjs開発の基礎として非常に重要なのでしっかり復習してください