カテゴリ: CodeIgniter 更新日: 2026/06/21

CodeIgniterのルーティングで404エラーを制御する方法!初心者向け完全解説

CodeIgniterのルーティングで404エラーを制御する方法
CodeIgniterのルーティングで404エラーを制御する方法

先生と生徒の会話形式で理解しよう

生徒

「Webサイトを見ているときに出る『404 Not Found』って何ですか?自分のプログラムでも自由にコントロールできますか?」

先生

「それは『ページが見つかりません』という合図です。CodeIgniterというフレームワークを使えば、エラーが起きた時に出す画面を自分好みにカスタマイズしたり、特定の場所に誘導したりすることができるんですよ。」

生徒

「難しそうですが、初心者でも設定できますか?」

先生

「大丈夫です。ルーティングという仕組みを使えば、迷子になったユーザーを優しく案内できるようになります。基本的な仕組みから一緒に見ていきましょう!」

1. 404エラーとルーティングの基本を知ろう

1. 404エラーとルーティングの基本を知ろう
1. 404エラーとルーティングの基本を知ろう

Webサイトを運営していると、たまに「指定されたページは存在しません」という表示を見かけることがあります。これが404エラーと呼ばれるものです。パソコン初心者の方に分かりやすく例えると、住所を頼りに家を訪ねたけれど、そこには空き地しかなかった、という状態を指します。

PHPの開発フレームワークであるCodeIgniter(コードイグナイター)には、この「住所(URL)」と「実際に動かすプログラム(コントローラー)」を紐付ける役割を持つルーティング(Routing)という機能があります。ルーティングは、いわばWebサイトの「案内図」のようなものです。

ユーザーが案内図に載っていない住所にアクセスしようとしたとき、システムは自動的に「そんなページはないよ!」と判断します。この判断をどう制御するかが、今回学習するメインテーマです。適切な設定をしておくことで、ユーザーがサイト内で迷子になるのを防ぎ、親切なWebサイトを作ることができます。

2. Routes.phpでエラーの行き先を決める

2. Routes.phpでエラーの行き先を決める
2. Routes.phpでエラーの行き先を決める

CodeIgniterでルーティングを管理しているのは、主に「Routes.php」という名前のファイルです。このファイルの中に設定を書き込むことで、404エラーが発生した際にどのプログラムを動かすかを指定できます。

プログラミング未経験の方は「ファイルの中にコードを書く」と聞くと身構えてしまうかもしれませんが、ルールはとてもシンプルです。特定の命令(メソッド)を使って、エラー時の行き先を指定してあげるだけです。デフォルトでは標準のエラー画面が表示されますが、これをオリジナルの画面に差し替えるのが最初のステップとなります。

まずは、最も基本的な404エラーのオーバーライド(上書き設定)の方法を見てみましょう。下記のコードは、エラーが発生したときに「Errors」というコントローラーの中にある「show404」という処理を呼び出す設定例です。


// routes.php の設定例
// ページが見つからない時に動かすコントローラーとメソッドを指定します
$routes->set404Override('App\Controllers\Errors::show404');

3. 404エラー専用のコントローラーを作成する

3. 404エラー専用のコントローラーを作成する
3. 404エラー専用のコントローラーを作成する

設定ファイルで行き先を決めたら、次は実際に動くプログラム(コントローラー)を作りましょう。コントローラーとは、Webサイトの「司令塔」のような存在です。ユーザーからのリクエストを受け取り、どの画面を表示するかを決定します。

ここでは、エラー画面を表示するためだけのシンプルな司令塔を作ります。プログラムコードは難しく見えますが、「class」はプログラムのまとまり、「public function」は具体的なお仕事の内容だと考えてください。以下の例では、エラー画面を表示するというお仕事を定義しています。


namespace App\Controllers;

use CodeIgniter\Controller;

class Errors extends Controller
{
    public function show404()
    {
        // 404のステータスコードを返しながら、オリジナルの画面を表示します
        return view('errors/custom_404');
    }
}

このコードを作成することで、存在しないURLにアクセスがあった際、自動的に custom_404 という名前の見た目用ファイル(ビュー)が呼び出されるようになります。標準の真っ白な画面よりも、自分のサイトのデザインに合わせた画面が出たほうがユーザーも安心しますよね。

4. ユーザーに優しいカスタムエラー画面(View)の作成

4. ユーザーに優しいカスタムエラー画面(View)の作成
4. ユーザーに優しいカスタムエラー画面(View)の作成

次に、ユーザーが実際に目にする「見た目」の部分を作りましょう。CodeIgniterではこれをビュー(View)と呼びます。ビューは主にHTMLという、Webページの骨組みを作る言葉で書かれます。

パソコンを初めて触る方でも、文字を打つ感覚で作成できます。「お探しのページは見つかりませんでした」「トップページへ戻る」といったメッセージを配置するのが一般的です。ただエラーを伝えるだけでなく、次にどこへ行けばいいかを示してあげることが大切です。


<div class="container text-center mt-5">
    <h1 class="display-1 fw-bold text-danger">404</h1>
    <p class="fs-3">申し訳ありません。ページが見つかりません。</p>
    <p class="lead">
        お探しのページは削除されたか、URLが間違っている可能性があります。
    </p>
    <a href="/" class="btn btn-primary">トップページへ戻る</a>
</div>

このように、ボタンを配置してトップページへ誘導することで、ユーザーがサイトから離脱してしまうのを防ぐことができます。SEO(検索エンジン最適化)の観点からも、エラーページを放置せずに適切に処理することは非常に重要です。

5. 条件分岐を使って特定の404をハンドリングする

5. 条件分岐を使って特定の404をハンドリングする
5. 条件分岐を使って特定の404をハンドリングする

時には、すべてのエラーを一箇所に送るのではなく、特定の条件のときだけ違う処理をしたい場合があります。例えば、ブログの記事が見つからない時と、管理画面のページが見つからない時で案内を変えたい場合などです。

ここで登場するのがif文(条件分岐)です。プログラムの中で「もし〜ならA、そうでなければB」という判断を行わせます。プログラミングの基本中の基本ですが、CodeIgniterのルーティング制御でもこの考え方が応用できます。

以下の例では、もしアクセスされたURLに「admin」という文字が含まれていれば、管理者専用のエラー処理を行い、それ以外なら一般用のエラー処理を行うといった分岐のイメージです。


// コントローラー内での条件分岐の例
public function handleNotFound($path)
{
    if (strpos($path, 'admin') !== false) {
        // 管理画面系でエラーが起きた場合
        return view('errors/admin_404');
    } else {
        // 一般公開サイトでエラーが起きた場合
        return view('errors/public_404');
    }
}

6. 存在しないページを自動的に転送(リダイレクト)させる

6. 存在しないページを自動的に転送(リダイレクト)させる
6. 存在しないページを自動的に転送(リダイレクト)させる

404エラーを表示させるのではなく、強制的に別のページへ移動させてしまう方法もあります。これをリダイレクトと呼びます。例えば、古いサイトから新しいサイトへ引っ越しをした時などに、古いURLに来た人を自動で新しいページへ連れて行ってあげる仕組みです。

リダイレクトは非常に強力なツールですが、使いすぎるとユーザーが「自分がどこにいるのか」分からなくなってしまうため、注意が必要です。しかし、特定のキャンペーンページが終わった後にトップページへ自動で戻したい場合などは非常に便利です。

ルーティング設定で addRedirect という機能を使うと、存在しない場所へのアクセスを賢くコントロールできます。これにより、エラー画面を見せることなくスムーズなサイト体験を提供できます。

7. 404エラーを放置するとどうなる?SEOへの影響

7. 404エラーを放置するとどうなる?SEOへの影響
7. 404エラーを放置するとどうなる?SEOへの影響

なぜここまで404エラーの制御にこだわるのでしょうか?それは、Googleなどの検索エンジンがあなたのサイトを評価する際のポイントになるからです。SEO(検索エンジン最適化)とは、検索結果で自分のサイトを上位に表示させるための工夫のことです。

リンク切れ(クリックしてもページがない状態)が放置されていると、検索エンジンのロボットが「このサイトは管理が行き届いていないな」と判断し、評価を下げてしまうことがあります。また、ユーザーが不快に感じてすぐにサイトを閉じてしまうこともマイナス評価に繋がります。

CodeIgniterのルーティング機能を使って正しくエラーを制御することは、プログラミング技術の向上だけでなく、多くの人にサイトを見てもらうための「おもてなし」の心を形にすることなのです。未経験の方も、まずは簡単な設定から始めて、徐々に複雑な制御に挑戦してみましょう。

8. 実際に動かして確認してみよう

8. 実際に動かして確認してみよう
8. 実際に動かして確認してみよう

設定が終わったら、最後に必ず動作確認を行いましょう。ブラウザの住所欄に、わざと存在しない適当な文字(例:your-site.com/abcde)を入力してエンターキーを押してみてください。自分で作ったカスタムエラー画面が表示されれば成功です!

もし意図した画面が出ない場合は、スペルミスがないか、ファイルの保存場所が間違っていないかを確認しましょう。プログラムの世界では、小さな「点」や「記号」一つで動きが変わってしまいます。でも、その間違いを見つけて直す作業こそが、プログラミング上達の近道です。


(実行結果のイメージ)
ブラウザの画面に「申し訳ありません。ページが見つかりません。 [トップページへ戻るボタン]」
という自分だけのデザインが表示される。

これで、CodeIgniterを使った404エラーの制御ができるようになりました。この基本をマスターすれば、より高度なWebアプリケーション開発への第一歩を踏み出したことになります。これからも楽しくコードを書いていきましょう!

まとめ

まとめ
まとめ

CodeIgniterの404エラー制御の総まとめ

本記事では、CodeIgniterにおける404エラーの仕組みから、ルーティング設定、コントローラー作成、ビュー作成、条件分岐、リダイレクト処理、そして検索エンジン対策まで、一連の流れを体系的に解説しました。 Webアプリケーション開発において、存在しないページへのアクセスは必ず発生します。その際に何も対策をしていないと、ユーザーは突然のエラー画面に戸惑い、そのまま離脱してしまう可能性が高くなります。 そのため、404エラーを単なるエラーとして扱うのではなく、ユーザー体験を向上させる重要な導線の一つとして設計することが大切です。

ルーティング設定の重要性

Routes.phpで設定するset404Overrideは、CodeIgniterのルーティング機能の中でも特に重要な役割を持ちます。この設定によって、存在しないURLへのアクセスを任意のコントローラーに誘導することが可能になります。 ルーティングはURLと処理を結びつける基盤であり、適切に設計することで柔軟なWebサイト構築が可能になります。特に404エラーの制御は、サイト全体の品質を左右するため、最初の段階でしっかり理解しておくことが重要です。


// 404エラー時のルーティング設定
$routes->set404Override('App\Controllers\Errors::show404');

コントローラーとビューの連携

コントローラーはユーザーからのリクエストを受け取り、適切なビューを返す役割を担います。404エラー専用のコントローラーを作成することで、通常ページとは異なる専用の処理を実装できます。 また、ビューではユーザーに分かりやすいメッセージとナビゲーションを提供することが重要です。単にエラーを表示するだけでなく、次に取るべき行動を提示することで、サイト内回遊率の向上につながります。


namespace App\Controllers;

use CodeIgniter\Controller;

class Errors extends Controller
{
    public function show404()
    {
        return view('errors/custom_404');
    }
}

ユーザー視点でのエラーページ設計

カスタム404ページでは、ユーザーが迷わないように配慮することが重要です。例えばトップページへのリンク、検索フォーム、人気ページへの導線などを設置することで、離脱率を下げることができます。 また、デザイン面でもサイト全体と統一感を持たせることで、ユーザーに安心感を与えることができます。見た目と機能の両方を意識した設計が求められます。


<div class="container text-center mt-5">
    <h1 class="display-1 fw-bold text-danger">404</h1>
    <p class="fs-3">ページが見つかりません</p>
    <a href="/" class="btn btn-primary">トップページへ戻る</a>
</div>

条件分岐とリダイレクトの活用

条件分岐を活用することで、アクセスされたURLに応じて異なるエラーページを表示することができます。これにより、管理画面と一般公開ページで異なる対応が可能になります。 また、リダイレクトを利用することで、古いURLから新しいURLへスムーズに誘導することもできます。ただし、過度なリダイレクトはユーザー体験を損なうため、適切な場面で使用することが大切です。


public function handleNotFound($path)
{
    if (strpos($path, 'admin') !== false) {
        return view('errors/admin_404');
    } else {
        return view('errors/public_404');
    }
}

検索エンジンに評価されるサイト作り

404エラーの適切な処理は、検索エンジンからの評価にも大きく影響します。リンク切れが多いサイトは評価が下がりやすく、検索順位にも悪影響を及ぼします。 そのため、エラー発生時に適切なレスポンスを返し、ユーザーを正しいページへ誘導することは非常に重要です。ルーティング制御をしっかり行うことで、ユーザーにも検索エンジンにも優しいサイトを実現できます。

サンプルプログラムまとめ


// routes.php
$routes->set404Override('App\Controllers\Errors::show404');

// Errors.php
namespace App\Controllers;

use CodeIgniter\Controller;

class Errors extends Controller
{
    public function show404()
    {
        return view('errors/custom_404');
    }
}
先生と生徒の振り返り会話

生徒

404エラーはただのエラー表示ではなくて、ユーザーを案内する役割もあるんですね。

先生

その通りです。ルーティングを使えば、ユーザーが迷ったときに適切な場所へ導くことができます。

生徒

Routes.phpで設定して、コントローラーとビューを用意すればいいんですね。

先生

はい。それに加えて、条件分岐やリダイレクトを使うことで、より柔軟な対応が可能になります。

生徒

検索エンジンにも影響があると知って驚きました。

先生

ユーザー体験が良いサイトは、検索エンジンからも評価されやすくなります。404エラーの制御はその一歩です。

生徒

これからはエラーページもきちんと設計していきます。

先生

とても良い心がけです。小さな改善の積み重ねが、良いWebサイトを作ります。

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでフォームのバリデーションエラーを表示する方法!初心者向け徹底解説
New3
Symfony
Symfonyのコントローラで404・403エラーを制御する方法を初心者向けに解説!
New4
Symfony
Symfonyで独自イベント(カスタムイベント)を作成する方法をやさしく解説
人気記事
No.2
Java&Spring記事人気No2
Laravel
LaravelでReactコンポーネントを組み込む方法完全ガイド!JSX対応でフロントエンド連携を学ぼう
No.3
Java&Spring記事人気No3
CodeIgniter
CodeIgniterのCSRF対策を完全解説!フォーム処理のセキュリティ手順
No.4
Java&Spring記事人気No4
Laravel
Laravelのリレーションを使った検索条件の書き方(whereHas)
No.5
Java&Spring記事人気No5
Symfony
Symfonyでバリデーションをコントローラに組み込む方法を徹底解説!初心者にもやさしい入力チェックの基本
No.6
Java&Spring記事人気No6
Laravel
LaravelのRESTfulコントローラ設計のベストプラクティスを初心者向けにわかりやすく解説
No.7
Java&Spring記事人気No7
Symfony
Symfonyのインストール方法!CLIとComposerの導入手順まとめ
No.8
Java&Spring記事人気No8
Laravel
Laravelのold()関数でフォーム再表示時に値を保持する方法