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

SymfonyのEventSubscriberとEventListenerの違いを初心者向けにやさしく解説

SymfonyでEventSubscriberとEventListenerの違いを理解する
SymfonyでEventSubscriberとEventListenerの違いを理解する

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

生徒

「Symfonyのイベントって聞いたことはあるんですが、EventListenerとEventSubscriberの違いがよく分かりません…」

先生

「どちらもイベントを受け取る仕組みですが、登録の仕方や考え方が少し違います。」

生徒

「名前が似ているので、混乱してしまいます。」

先生

「例え話を交えながら、順番に見ていきましょう。」

1. Symfonyのイベントシステムをおさらい

1. Symfonyのイベントシステムをおさらい
1. Symfonyのイベントシステムをおさらい

Symfonyにはイベントシステムという仕組みがあります。これは、プログラムの途中で「今から○○をしますよ」という合図を出し、それを受け取った別の処理が動く仕組みです。人の生活で例えると、チャイムが鳴ったら授業が始まる、というような流れに近いです。

Symfonyでは、画面表示やリクエスト処理の途中など、さまざまなタイミングでイベントが発生します。そのイベントを受け取り、追加の処理を行う役割を持つのがEventListenerEventSubscriberです。

2. EventListenerとは何か

2. EventListenerとは何か
2. EventListenerとは何か

EventListenerは、特定のイベントが発生したときに実行される処理を定義する方法です。「このイベントが起きたら、このメソッドを実行する」と一つずつ登録していきます。

初心者の方には、「イベントと処理を一対一で結びつける方法」と考えると分かりやすいです。設定がシンプルで、動きも直感的です。


namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\RequestEvent;

class SampleListener
{
    public function onKernelRequest(RequestEvent $event)
    {
        // リクエスト時の処理
    }
}

3. EventListenerの登録方法

3. EventListenerの登録方法
3. EventListenerの登録方法

EventListenerは、サービス設定で「どのイベントを監視するか」を指定します。Symfonyでは設定ファイルを使って登録するのが一般的です。

この方法は、「イベント名」と「実行するメソッド」がはっきり書かれているため、初心者でも流れを追いやすい特徴があります。


services:
  App\EventListener\SampleListener:
    tags:
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

4. EventSubscriberとは何か

4. EventSubscriberとは何か
4. EventSubscriberとは何か

EventSubscriberもイベントを受け取る仕組みですが、考え方が少し違います。クラスの中で「どのイベントを購読するか」をまとめて定義します。

購読とは「定期的に情報を受け取る」という意味です。新聞を購読すると毎日届くように、EventSubscriberは指定したイベントをまとめて受け取ります。


namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;

class SampleSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            'kernel.response' => 'onKernelResponse',
        ];
    }

    public function onKernelResponse(ResponseEvent $event)
    {
        // レスポンス時の処理
    }
}

5. EventSubscriberの特徴

5. EventSubscriberの特徴
5. EventSubscriberの特徴

EventSubscriberの大きな特徴は、複数のイベントを一つのクラスで管理できる点です。関連する処理をまとめて書けるため、コードの整理がしやすくなります。

イベント名がクラス内にまとまっているので、「このクラスは何をしているのか」が一目で分かるのもメリットです。

6. EventListenerとEventSubscriberの違い

6. EventListenerとEventSubscriberの違い
6. EventListenerとEventSubscriberの違い

両者の違いを簡単にまとめると、登録方法と考え方の違いです。EventListenerは外部設定でイベントを指定し、EventSubscriberはクラス自身がイベントを宣言します。

一つのイベントだけを処理する場合はEventListener、複数のイベントをまとめて扱う場合はEventSubscriberが向いています。

7. 初心者はどちらから使うべきか

7. 初心者はどちらから使うべきか
7. 初心者はどちらから使うべきか

Symfonyを学び始めたばかりの方には、まずEventListenerがおすすめです。イベントと処理の関係が分かりやすく、理解しやすいからです。

慣れてきたら、関連するイベント処理をまとめる目的でEventSubscriberを使うと、コードが読みやすくなります。

8. イベントを使うメリット

8. イベントを使うメリット
8. イベントを使うメリット

イベントシステムを使う最大のメリットは、処理を分離できる点です。本来の処理に手を加えず、あとから機能を追加できます。

Symfonyではこの仕組みが多く使われており、EventListenerやEventSubscriberを理解することは、Symfony入門においてとても重要です。

カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.6
Java&Spring記事人気No6
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.7
Java&Spring記事人気No7
Laravel
LaravelでRemember Me(ログイン状態保持)機能を実装する方法を完全解説!初心者でも安心の認証入門
No.8
Java&Spring記事人気No8
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点