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

Symfonyで独自イベント(カスタムイベント)を作成する方法をやさしく解説

Symfonyで独自イベント(カスタムイベント)を作成する方法
Symfonyで独自イベント(カスタムイベント)を作成する方法

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

生徒

「Symfonyって、決まったイベントだけ使えるんですか?」

先生

「いいえ、自分でイベントを作ることもできます。これを独自イベント、またはカスタムイベントと呼びます。」

生徒

「自分でイベントを作るって、難しそうです……」

先生

「仕組みを順番に見ていけば大丈夫です。今日はSymfonyで独自イベントを作る方法を一緒に見ていきましょう。」

1. Symfonyの独自イベント(カスタムイベント)とは?

1. Symfonyの独自イベント(カスタムイベント)とは?
1. Symfonyの独自イベント(カスタムイベント)とは?

Symfonyの独自イベント(カスタムイベント)とは、開発者が自由なタイミングで発生させられるイベントのことです。イベントとは「ある出来事が起きた」という合図のようなものです。例えば「会員登録が完了した」「商品が購入された」など、アプリケーション独自の出来事をイベントとして扱えます。

Symfonyではイベントとリスナーの仕組みが用意されており、独自イベントを使うことで処理を整理し、読みやすく保守しやすいコードを書くことができます。

2. 独自イベントを使うメリット

2. 独自イベントを使うメリット
2. 独自イベントを使うメリット

独自イベントを使う最大のメリットは、処理を分離できる点です。分離とは、役割ごとに処理を分けることです。例えば、注文処理の中にメール送信やログ保存の処理を直接書くと、コードが長くなり読みにくくなります。

イベントを使えば「注文完了イベント」を発生させ、メール送信やログ保存は別の場所で処理できます。これにより、プログラム全体が整理され、後から修正しやすくなります。

3. 独自イベント用のイベントクラスを作成する

3. 独自イベント用のイベントクラスを作成する
3. 独自イベント用のイベントクラスを作成する

まずはイベントそのものを表すイベントクラスを作成します。イベントクラスは「何が起きたか」と「必要な情報」をまとめた箱のようなものです。


namespace App\Event;

use Symfony\Contracts\EventDispatcher\Event;

class UserRegisteredEvent extends Event
{
    public const NAME = 'user.registered';

    private string $email;

    public function __construct(string $email)
    {
        $this->email = $email;
    }

    public function getEmail(): string
    {
        return $this->email;
    }
}

この例では「ユーザー登録が完了した」というイベントを表しています。メールアドレスをイベントに持たせることで、後からリスナーで使えるようになります。

4. イベントを発生(ディスパッチ)させる方法

4. イベントを発生(ディスパッチ)させる方法
4. イベントを発生(ディスパッチ)させる方法

次に、作成した独自イベントを発生させる処理を書きます。イベントを発生させることを「ディスパッチする」と言います。ディスパッチとは「知らせを送る」という意味です。


use App\Event\UserRegisteredEvent;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;

class UserService
{
    public function register(
        string $email,
        EventDispatcherInterface $dispatcher
    ): void {
        $event = new UserRegisteredEvent($email);
        $dispatcher->dispatch($event, UserRegisteredEvent::NAME);
    }
}

このコードでは、ユーザー登録処理の中でイベントを作成し、EventDispatcherを使ってイベントを発生させています。

5. 独自イベントを受け取るリスナーを作成する

5. 独自イベントを受け取るリスナーを作成する
5. 独自イベントを受け取るリスナーを作成する

イベントが発生したら、それを受け取って処理を行うリスナーを作成します。リスナーは「イベントを聞いて行動する人」のような存在です。


namespace App\EventListener;

use App\Event\UserRegisteredEvent;

class SendWelcomeMailListener
{
    public function onUserRegistered(UserRegisteredEvent $event): void
    {
        $email = $event->getEmail();
        // ここでメール送信処理を行う
    }
}

このリスナーは、ユーザー登録イベントを受け取り、登録されたメールアドレスを使って処理を行います。

6. services.yamlでリスナーを登録する

6. services.yamlでリスナーを登録する
6. services.yamlでリスナーを登録する

作成したリスナーをSymfonyに認識させるため、設定ファイルに登録します。ここではservices.yamlを使います。


services:
    App\EventListener\SendWelcomeMailListener:
        tags:
            - { name: kernel.event_listener, event: 'user.registered', method: onUserRegistered }

この設定により、「user.registered」という独自イベントが発生したときに、このリスナーが呼び出されます。

7. 独自イベントの処理の流れを整理しよう

7. 独自イベントの処理の流れを整理しよう
7. 独自イベントの処理の流れを整理しよう

Symfonyの独自イベントは、次の流れで動きます。まずイベントクラスを作成し、次にイベントをディスパッチします。そして、登録されたリスナーがイベントを受け取り、それぞれの処理を実行します。

この流れを理解すると、処理の追加や変更がしやすくなり、大きなアプリケーションでも混乱しにくくなります。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

初心者がつまずきやすいのは、イベント名の書き間違いや、リスナーが正しく登録されていないケースです。また、イベントクラスとリスナーの役割を混同してしまうこともあります。

イベントは「出来事」、リスナーは「それを受けて行う処理」と意識すると、理解しやすくなります。

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New2
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New3
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
New4
Symfony
Symfonyのキャッシュ機構の基本を理解しよう(HTTPとアプリ別)
人気記事
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
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.6
Java&Spring記事人気No6
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelでコントローラを作成する方法(artisanコマンド)
No.8
Java&Spring記事人気No8
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説