CodeIgniterでカスタム例外クラスを作成する方法!初心者向けエラーハンドリング徹底解説
生徒
「先生、プログラムを実行しているとたまに変なエラーが出て止まってしまうんです。これを自分でコントロールする方法はありますか?」
先生
「それは『例外処理』という技術を使うと解決できますよ。特にCodeIgniter(コードイグナイター)という道具を使っているなら、『カスタム例外クラス』を作るのが一番です。」
生徒
「カスタム例外クラス……なんだか難しそうですね。私、パソコンもあまり触ったことがないんですけど大丈夫でしょうか?」
先生
「大丈夫ですよ!料理に例えると、レシピにないトラブルが起きた時のための『予備のルール』を決めておくようなものです。基本からゆっくり解説しますね。」
1. 例外処理(エラーハンドリング)って何?
プログラムを作っていると、予想外の出来事が起こることがあります。例えば、計算をしようとしたのに数字が入っていなかったり、読み込もうとしたファイルがどこにもなかったりする場合です。これをプログラミングの世界では「例外(れいがい)」と呼びます。
もし、この例外をそのままにしておくと、プログラムは「どうすればいいかわからない!」とパニックを起こして、画面に真っ白な表示を出したり、急に止まったりしてしまいます。これを防ぐために、「もしエラーが起きたら、こう動いてね」とあらかじめ決めておくことを「例外処理」や「エラーハンドリング」と言います。
CodeIgniterというPHPのフレームワーク(便利な機能がたくさん詰まったセットのこと)では、このエラーハンドリングを自分専用にカスタマイズして、使いやすく作り変えることができるのです。
2. なぜ「カスタム例外クラス」を作る必要があるの?
PHPには最初から「Exception(エクセプション)」という、エラーを知らせるための基本的な仕組みが備わっています。しかし、開発しているシステムが大きくなってくると、「ログインに失敗した時のエラー」や「データベースの登録に失敗した時のエラー」など、エラーの種類を細かく分けたくなることがあります。
カスタム例外クラスとは、自分たちで新しいエラーの種類を作ることです。これを行うメリットは、以下の通りです。
- エラーの原因がわかりやすくなる:普通のエラーではなく「〇〇専用のエラー」と名前がつくので、どこが悪いかすぐにわかります。
- 処理を分けられる:重大なエラーの時はメールで管理者に知らせる、軽いエラーの時は画面にメッセージを出すだけにする、といった使い分けができます。
- 見た目を整えられる:ユーザーに不親切な英語のエラー画面ではなく、丁寧な日本語の案内画面を表示させやすくなります。
3. まずは基本!try-catch文の使い方
例外処理を学ぶ上で絶対に避けて通れないのが「try(トライ)」と「catch(キャッチ)」という言葉です。これは英語の通り、「試してみる」と「捕まえる」という意味です。
「この処理をやってみて(try)、もしエラーが起きたらここで捕まえてね(catch)」という命令をコンピュータに出します。まずは、カスタム例外を作る前に、PHPの標準的な書き方を見てみましょう。
try {
// ここでエラーが起きそうな処理を「試す」
$price = -100; // 商品の価格がマイナスという、ありえない設定
if ($price < 0) {
// 「例外」を投げます(発生させます)
throw new Exception("価格がマイナスになっています!");
}
echo "価格は " . $price . " 円です。";
} catch (Exception $e) {
// エラーを「捕まえて」、どうするか決めます
echo "エラーが発生しました: " . $e->getMessage();
}
解説:
- throw(スロー):「エラーを投げる」という意味です。問題を見つけたら、審判が笛を吹くようにエラーを発生させます。
- Exception(エクセプション):例外そのものを指す言葉です。
- getMessage(ゲットメッセージ):投げられたエラーの内容を取り出す魔法の言葉です。
4. CodeIgniterで自分専用の例外クラスを作ってみよう
それでは、いよいよ本題のカスタム例外クラスの作成です。CodeIgniter 4では、自分で新しいエラーの型を作ることができます。今回は「在庫がない時に発生させるエラー」という名前のクラスを作ってみましょう。
まず、app/Exceptions というフォルダの中に、NoStockException.php という名前でファイルを作成します。ファイル名と中身の「class」という名前は同じにするのがルールです。
namespace App\Exceptions;
use Exception;
// Exceptionという元々の仕組みを「継承(コピー)」して、自分専用にします
class NoStockException extends Exception
{
// ここに自分なりの設定を書くことができますが、
// 最初はこのままでも「在庫切れエラー」として機能します。
}
用語解説:
- namespace(名前空間):そのファイルがどこに所属しているかを示す住所のようなものです。
- extends(エクステンズ):「継承」という意味で、既存の機能をそっくりそのまま引き継いで、新しいものを作る時に使います。
5. 作成したカスタム例外を使ってみる
作った「在庫切れエラー」を実際にプログラムの中で使ってみましょう。ここでは商品の購入処理をイメージしたコードを書いてみます。他のプログラムからこの例外を呼び出す時は、use という言葉を使って、さっき作った住所(namespace)を教えてあげる必要があります。
use App\Exceptions\NoStockException;
$stock = 0; // 在庫が0個の状態
try {
if ($stock <= 0) {
// さっき作った「自分専用のエラー」を投げます!
throw new NoStockException("申し訳ありません。この商品は現在在庫切れです。");
}
echo "商品を購入しました。";
} catch (NoStockException $e) {
// 在庫切れエラー専用の対応ができます
echo "【在庫エラー】" . $e->getMessage();
} catch (Exception $e) {
// それ以外の一般的なエラーを捕まえます
echo "【その他エラー】" . $e->getMessage();
}
このように、「在庫切れ」という特定の状況に対して、専用のメッセージや処理を割り当てることができるようになりました。これがカスタム例外の素晴らしいところです。
6. 応用編:エラーによって表示する画面を変える
CodeIgniterには、特定の例外が発生した時に、自動的にカッコいいエラー画面(404ページなど)を表示する仕組みがあります。これを利用すると、システムが壊れたような怖い画面ではなく、ユーザーに優しい画面を見せることができます。
例えば、データベースにデータが見つからなかった時のための例外を作ってみましょう。app/Exceptions/MyDatabaseException.php を作成します。
namespace App\Exceptions;
use RuntimeException;
class MyDatabaseException extends RuntimeException
{
// これを使うと、自動的に特定のステータスコード(404など)を
// 返すような高度な設定も可能になります。
}
実行結果として、以下のように表示されるようにプログラムを組むことができます。
【実行結果イメージ】
システムエラー:指定されたユーザーが見つかりませんでした。
トップページに戻ってやり直してください。
7. パソコン初心者でもわかる!ファイル保存のコツ
プログラミングを始めたばかりの方が最初につまずくのは、コードの書き方よりも「どこに保存するか」だったりします。カスタム例外を作る時は、以下の点に注意してください。
- 大文字と小文字:プログラミングでは、
NoStockExceptionとnostockexceptionは全くの別物として扱われます。ファイル名とクラス名は、一文字ずつ正確に合わせましょう。 - 半角英数字:コードを書く時は、必ず「半角」で入力します。全角のスペースが一つ混じっているだけで、プログラムは動かなくなってしまいます。
- 保存場所:CodeIgniterには「このファイルはここに入れる」という厳しい決まりがあります。例外クラスは必ず
app/Exceptionsフォルダに入れましょう。フォルダがない場合は、右クリックで新しく作ってください。
8. エラーを恐れずにプログラミングを楽しもう
エラーが出ると、「自分の書いたコードがダメなんだ」と落ち込んでしまうかもしれません。でも、実はプロのエンジニアでも毎日たくさんのエラーを出しています。大切なのは、エラーが出ないようにすることではなく、「エラーが起きた時にどう対処するか」を考えておくことです。
今回学んだカスタム例外クラスは、まさにそのための「お守り」のようなものです。自分でエラーをコントロールできるようになれば、システムはもっと安定し、使う人にとっても優しいものになります。
少しずつ慣れていけば、どんなに複雑な仕組みも作れるようになります。まずは、簡単な例外を投げることから始めて、プログラムが自分の思い通りに「失敗」してくれる快感を味わってみてください!