カテゴリ: Symfony 更新日: 2026/02/10

SymfonyのExceptionListenerで例外処理とデバッグをやさしく解説!初心者向け完全ガイド

Symfonyの`ExceptionListener`で例外を処理する方法
Symfonyの`ExceptionListener`で例外を処理する方法

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

生徒

「Symfonyって、エラーが出たときに赤い画面が出ますよね。あれはどうやって処理しているんですか?」

先生

「Symfonyでは、例外という仕組みを使ってエラーを管理しています。その中心にあるのがExceptionListenerです。」

生徒

「ExceptionListenerって難しそうな名前ですが、初心者でも使えるんですか?」

先生

「仕組みを一つずつ知れば大丈夫です。パソコンを触ったことがなくても分かるように説明しますよ。」

1. Symfonyと例外処理とは何か?

1. Symfonyと例外処理とは何か?
1. Symfonyと例外処理とは何か?

Symfony(シンフォニー)は、PHPで作られたWebアプリケーションフレームワークです。フレームワークとは、アプリを作るための便利な道具箱のようなものです。

その中で例外処理とは、プログラムがうまく動かなかったときに起こる「エラー」を安全に受け止める仕組みです。例えるなら、料理中に包丁を落としそうになったときに、ケガをしないように受け止めるマットのような存在です。

Symfonyでは、この例外処理を自動で行ってくれますが、さらに細かく制御するためにExceptionListenerを使います。

2. ExceptionListenerとは?

2. ExceptionListenerとは?
2. ExceptionListenerとは?

ExceptionListenerは、Symfonyでエラー(例外)が発生した瞬間に動く監視役です。

たとえば、電車の運行管理システムのように、トラブルが起きたらすぐに検知して「画面に何を表示するか」「ログを残すか」を判断します。

SymfonyのExceptionListenerを使うことで、エラー画面を自分好みに変更したり、デバッグしやすくすることができます。

3. 例外(Exception)の基本を知ろう

3. 例外(Exception)の基本を知ろう
3. 例外(Exception)の基本を知ろう

例外とは、プログラムの実行中に起こる予期しない出来事です。たとえば「存在しないページにアクセスした」「数字を入れる場所に文字を入れた」などです。

PHPでは、throwを使って例外を投げます。


throw new Exception('エラーが発生しました');

この1行は、「ここで問題が起きましたよ」とSymfonyに知らせている状態です。Symfonyはこれを受け取り、ExceptionListenerに伝えます。

4. SymfonyでExceptionListenerが動く流れ

4. SymfonyでExceptionListenerが動く流れ
4. SymfonyでExceptionListenerが動く流れ

Symfonyでは、リクエスト(アクセス)→処理→レスポンス(表示)という流れがあります。

この途中でエラーが起きると、Symfonyはイベントという合図を出します。ExceptionListenerはそのイベントを聞いています。

流れを簡単に書くと次のようになります。


ページにアクセス
↓
処理中にエラー発生
↓
ExceptionListenerが検知
↓
エラー画面を表示

5. ExceptionListenerの基本的な作り方

5. ExceptionListenerの基本的な作り方
5. ExceptionListenerの基本的な作り方

ExceptionListenerは、PHPのクラスとして作成します。まずはとてもシンプルな例を見てみましょう。


namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\ExceptionEvent;

class ExceptionListener
{
    public function onKernelException(ExceptionEvent $event)
    {
        $exception = $event->getThrowable();
    }
}

ここで使われているクラスとは、処理をまとめた箱のようなものです。onKernelExceptionは「エラーが起きたら呼ばれる関数」です。

6. services.yamlでExceptionListenerを登録する

6. services.yamlでExceptionListenerを登録する
6. services.yamlでExceptionListenerを登録する

Symfonyでは、作ったExceptionListenerを「使いますよ」と登録する必要があります。その設定を書く場所がservices.yamlです。


services:
    App\EventListener\ExceptionListener:
        tags:
            - { name: kernel.event_listener, event: kernel.exception }

この設定は、「エラーが起きたら、このExceptionListenerを呼んでください」という意味です。初心者の方は「登録作業」と覚えておけば大丈夫です。

7. エラー内容を画面に表示してみよう

7. エラー内容を画面に表示してみよう
7. エラー内容を画面に表示してみよう

次は、実際にエラー内容を画面に表示する例です。デバッグとは、エラーの原因を探す作業のことです。


use Symfony\Component\HttpFoundation\Response;

public function onKernelException(ExceptionEvent $event)
{
    $exception = $event->getThrowable();

    $response = new Response(
        'エラー内容:' . $exception->getMessage()
    );

    $event->setResponse($response);
}

これで、エラーが起きたときに「エラー内容:〇〇」と表示されます。原因が分かるだけで、修正がとても楽になります。

8. デバッグと本番環境の考え方

8. デバッグと本番環境の考え方
8. デバッグと本番環境の考え方

Symfonyでは、開発中(デバッグ)と実際に公開する本番環境で、エラーの見せ方を変えます。

開発中は詳しいエラーを表示し、本番では「問題が発生しました」とだけ表示します。これは、家の中では説明書を広げて、外では必要最低限だけ持つイメージです。

ExceptionListenerを使えば、この切り替えも自由に制御できます。

カテゴリの一覧へ
新着記事
New1
Laravel
LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New2
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New3
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New4
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.2
Java&Spring記事人気No2
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.3
Java&Spring記事人気No3
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.4
Java&Spring記事人気No4
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.5
Java&Spring記事人気No5
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.6
Java&Spring記事人気No6
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方