CodeIgniterで404エラーをカスタマイズする方法!初心者向け完全解説
生徒
「CodeIgniterで作ったサイトで、存在しないページを開くと素っ気ないエラー画面が出るんですが、これを可愛く変更できますか?」
先生
「もちろんです。それは『404エラーページ』と呼ばれるもので、CodeIgniterでは初心者の方でも簡単に自分好みのデザインにカスタマイズできるんですよ。」
生徒
「難しそうですが、パソコンをあまり触ったことがなくても大丈夫でしょうか?」
先生
「大丈夫です!設定ファイルの場所や、HTMLの書き換え方を一つずつ丁寧に解説していきますね。一緒に進めていきましょう!」
1. 404エラーとは?初心者にもわかりやすく解説
インターネットでサイトを見ているときに、「ページが見つかりません」や「404 Not Found」という文字を見たことはありませんか?これが404エラーです。
例えば、あなたが図書館で本を探しているとしましょう。図書目録には載っているのに、実際にあるはずの棚に行ってみたら本がなかった、という状態がウェブの世界での404エラーに当たります。ユーザー(サイトを見に来た人)が、間違ったURLを入力してしまったり、昔あったページが削除されていたりするときに発生します。例外処理やエラーハンドリングという言葉は難しく聞こえますが、「困った事態が起きたときに、どうやって優しく案内するか」というおもてなしの準備だと考えてください。
CodeIgniter(コードイグナイター)というPHPのフレームワーク(便利な道具箱のようなもの)を使うと、このエラー画面を自分の好きなデザインに変更することができます。これをカスタマイズと呼びます。
2. エラー画面のテンプレート(見本)の場所を探そう
CodeIgniterでは、エラーが起きたときに表示するための「専用のファイル」があらかじめ用意されています。まずはそのファイルがどこにあるかを確認しましょう。パソコンのフォルダを「おもちゃ箱」だと思って、中身をのぞいてみてください。
標準的なCodeIgniter4の構成では、以下の場所にエラー画面のファイルが保存されています。
app/Views/errors/html/error_404.php
このファイルが、404エラーが発生したときに自動的に読み込まれる画面の正体です。Views(ビュー)というのは、プログラミングの世界で「画面に表示される見た目の部分」を指す用語です。まずはこのファイルを見つけることが、カスタマイズの第一歩になります。
3. 404エラー画面を実際に書き換えてみよう
では、実際に画面の中身を書き換えてみましょう。メモ帳やテキストエディタを使って、先ほど見つけた error_404.php を開いてみてください。最初は難しいコードがたくさん書いてありますが、一度全部消して、自分なりに分かりやすいメッセージを書いてみるのが上達の近道です。
例えば、以下のように書き換えてみましょう。HTMLという言葉を使って、文字の色や大きさを指定することができます。
<div style="text-align: center; margin-top: 50px;">
<h1 style="color: #ff6347;">申し訳ありません!</h1>
<p>お探しのページは見つかりませんでした。</p>
<p>URLが間違っているか、ページが移動した可能性があります。</p>
<a href="/">トップページに戻る</a>
</div>
このように書き換えるだけで、標準の英語の画面から、日本語の優しい画面に変えることができます。これがプログラミングの「見た目を作る」作業の基本です。
4. プログラムから意図的に404エラーを出す方法
サイトを作っていると、「この条件のときは、あえて404エラーを表示させたい」という場面が出てきます。例えば、存在しない会員番号のページにアクセスされたときなどです。CodeIgniterでは、PageNotFoundExceptionという呪文のような機能を使います。
例外(Exception)とは、プログラムの実行中に起こる予期せぬ出来事のことです。これをあえて「発生させる」ことで、システムに404エラー画面を表示するように命令を出します。以下のコードを見てみましょう。
// 会員データをチェックするプログラムの例
public function profile($id)
{
// もし会員が見つからなかったら
if ($id == null) {
// 404エラー画面を表示させる
throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound();
}
echo "会員ID " . $id . " さんのプロフィールです。";
}
throw(スロー)というのは「投げる」という意味です。エラーを「ポイッ」とシステムに投げ渡すと、システムがそれを受け取って、先ほど作った404画面を表示してくれる仕組みになっています。
5. ルーティング設定で「存在しないURL」を一括管理
ルーティングとは、住所(URL)と、それに対応する案内所(プログラム)を紐づける仕組みのことです。例えば、「/home」にアクセスが来たら「ホーム画面のプログラム」を動かす、という設定です。
CodeIgniterでは、設定ファイル app/Config/Routes.php で、どの住所にも当てはまらないアクセスが来たときにどうするかを決めることができます。基本的にはCodeIgniterが自動で404エラーを出してくれますが、自分で特別な処理をしたい場合はここで調整します。
// Routes.php の設定例
// 定義されていないページにアクセスがあった場合、自動で404になります
$routes->set404Override();
この set404Override という機能を使うと、独自に作ったコントローラー(案内役のプログラム)に処理を任せることもできます。上級者向けの内容に聞こえるかもしれませんが、「404エラー専用の案内係」を雇うようなイメージだと捉えてください。
6. エラー画面に役立つ情報を表示させる工夫
ただ「ありません」と表示するだけでなく、ユーザーが迷わないように工夫してみましょう。例えば、検索窓を設置したり、人気のある記事へのリンクを表示したりすると、ユーザーはサイトから離れずに済みます。これはSEO(検索エンジン最適化)の観点からも、ユーザー体験を高める上で非常に重要です。
エラー画面にPHPのコードを少し混ぜて、現在の時刻などを表示してみるのも面白いかもしれません。以下のサンプルは、エラー画面で「今何時か」を表示する簡単な例です。
<?php
// 現在の時刻を取得します
$now = date('Y年m月d日 H時i分');
?>
<div class="alert alert-warning">
<p>エラー発生時刻:<?php echo $now; ?></p>
<p>ただいま、メンテナンス中ではありませんが、ページが見つかりません。</p>
</div>
実行結果は以下のようになります。
エラー発生時刻:2026年01月08日 14時00分
ただいま、メンテナンス中ではありませんが、ページが見つかりません。
このように、エラー画面も「一つのWebページ」として自由にデザインや情報を盛り込むことができます。
7. 404エラーカスタマイズで気をつけるポイント
カスタマイズをする際に、初心者が陥りやすい罠がいくつかあります。まず一つ目は、HTTPステータスコードを正しく返すことです。「ページがない」という情報は、画面の見た目だけでなく、Googleなどの検索エンジンにも正しく伝える必要があります。
CodeIgniterの標準機能(throw PageNotFoundException)を使っていれば問題ありませんが、自分で勝手にページを作って「ここは404です」と文字で書いただけでは、検索エンジンは「ページが存在する」と勘違いしてしまうことがあります。これを「ソフト404」と呼び、あまり良くない状態とされています。正しくCodeIgniterの仕組みに乗っかって作成することが、SEO対策にも繋がるのです。
また、画像などのパス(ファイルの場所)にも注意が必要です。エラー画面は色々なURLから呼び出される可能性があるため、画像を表示するときは「/images/logo.png」のように、一番上の階層から指定する「絶対パス」を使うのが安全です。
8. 実際に動作を確認してみよう
設定が終わったら、ブラウザで適当なURLを入力してみましょう。例えば、自分のサイトが http://localhost:8080/ なら、 http://localhost:8080/aaaabbbbcccc のように、絶対に存在しない適当な英単語を後ろに付け足してみてください。
あなたが作成したオリジナルのエラー画面が表示されれば大成功です!もし、真っ白な画面になってしまったり、元の英語の画面のままだったりした場合は、ファイルの場所やコードの打ち間違いがないか、もう一度確認してみてください。プログラミングにおいて、間違えてやり直すことは恥ずかしいことではありません。むしろ、エラーを解決するたびにあなたは一歩ずつ成長しているのです。
// 確認用のコントローラーの書き方
class Test extends BaseController
{
public function index()
{
// 存在しないページとして処理
throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound("テスト中だよ!");
}
}
これで、エラー画面がどのように見えるかをいつでも確認できるようになりました。