0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails学習者向けのLaravelAdvent Calendar 2024

Day 14

イベントとリスナー:Laravel特有の機能をRails視点で学ぶ

Posted at

はじめに

プログラミング初学者の方に向けて、Laravelの"イベントとリスナー"機能について解説します。この記事では、Rails経験者がLaravelを学ぶ際に感じる疑問点に注目しながら、この機能の仕組みと利用方法を分かりやすく説明します。

イベントとリスナーとは?

Laravelにおけるイベントとリスナー

Laravelのイベントとリスナーは、特定の処理が発生した際に、関連する処理を別のクラスに分離して実行するための仕組みです。これにより、コードの保守性が向上し、処理の流れを簡潔に保つことができます。

イベント (Event): 何か特定の動作を表すクラスです。例えば、"ユーザーが登録された"という状況。

リスナー (Listener): 特定のイベントが発生した際に実行される処理を記述したクラスです。

Railsでの類似機能

Railsでは、ActiveSupport::NotificationsObserverパターンが類似の役割を果たします。ただし、Laravelのイベントとリスナーは、公式に組み込まれた使いやすい仕組みである点が大きな特徴です。

イベントとリスナーの基本構成

1. イベントの作成

まず、イベントを作成します。php artisan make:eventコマンドを使用します。

php artisan make:event UserRegistered

これにより、app/Events/UserRegistered.phpというクラスが作成されます。このクラスには、イベント発生時に必要なデータを保持するためのプロパティを定義します。

<?php

namespace App\Events;

use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UserRegistered
{
    use Dispatchable, SerializesModels;

    public $user;

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

2. リスナーの作成

リスナーはphp artisan make:listenerコマンドで作成します。

php artisan make:listener SendWelcomeEmail

リスナーは、対応するイベントを受け取り、そのデータを利用して処理を実行します。

<?php

namespace App\Listeners;

use App\Events\UserRegistered;

class SendWelcomeEmail
{
    public function handle(UserRegistered $event)
    {
        // メール送信ロジック
        \Mail::to($event->user->email)->send(new \App\Mail\WelcomeEmail($event->user));
    }
}

3. イベントとリスナーの登録

EventServiceProviderにイベントとリスナーの対応関係を登録します。

protected $listen = [
    UserRegistered::class => [
        SendWelcomeEmail::class,
    ],
];

実際にイベントを発生させる

イベントを発生させるには、event()関数を使用します。

use App\Events\UserRegistered;

$user = User::create([...]);
event(new UserRegistered($user));

Rails視点で理解する

Railsユーザーにとって、Laravelのイベントとリスナーは次のような特徴があります。

コード分離の徹底: リスナーに処理を分離することで、コントローラーやモデルが肥大化しません。

同期・非同期の切り替え: Laravelでは、リスナーを簡単に非同期処理に変更できます。これは、ジョブキューと連携しているためです。

RailsではObserverやActive Jobを組み合わせて同様の処理を実現できますが、Laravelの方が構造化されている印象です。

まとめ

Laravelのイベントとリスナーは、コードの保守性を高め、特定の処理を再利用可能にする便利な機能です。Rails経験者にとっても学びやすい仕組みであり、アプリケーションの設計をより洗練されたものにする助けとなるでしょう。

公式ドキュメントを参照しながら、自分のプロジェクトに取り入れてみてください。

Laravel公式ドキュメント: Events

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?