ブロードキャストとは
WebSocketを使うと、サーバーからクライアントへリアルタイムにデータを送信できます。 Laravelのブロードキャストは、サーバーサイドのイベントをWebSocket経由でフロントエンドのJavaScriptに届ける仕組みです。 たとえば注文ステータスが変化したとき、ページを再読み込みしなくてもブラウザ上で即座に更新を表示できます。 サーバーサイドのイベント名とデータを、クライアントサイドとそのまま共有できるのがLaravelブロードキャストの強みです。ブロードキャストはLaravelのイベントシステムの上に構築されています。
まずイベントとリスナーの基本を理解しておくことを推奨します。
セットアップ
新規Laravelアプリケーションではブロードキャストはデフォルトで無効です。install:broadcasting Artisanコマンドで有効化します。
config/broadcasting.php と routes/channels.php が生成されます。
Laravel Reverb
Laravel 11以降では、公式WebSocketサーバーである Laravel Reverb が推奨されます。 Reverbはセルフホスト型で、追加の外部サービス不要でリアルタイム通信を実現します。インストール
install:broadcasting コマンドに --reverb オプションを付けると、Reverbに必要なComposerパッケージ・NPMパッケージのインストールと .env の設定を一括で行います。
.env の主な設定値
Reverbサーバーの起動
ブロードキャストイベントの作成
イベントクラスの生成
ShouldBroadcast インターフェースを実装します。
ShouldBroadcast を実装するだけで、イベントが発火されると自動的にキュー経由でブロードキャストされます。
ブロードキャストデータのカスタマイズ
デフォルトでは、イベントクラスのpublic プロパティがすべてブロードキャストのペイロードに含まれます。
送信するデータを絞り込む場合は broadcastWith メソッドを定義します。
ブロードキャスト名のカスタマイズ
デフォルトではクラス名がイベント名になります。broadcastAs メソッドでカスタム名を指定できます。
. を付けてアプリの名前空間プレフィックスを無効にします。
チャンネルの種類
チャンネル認可
PrivateチャンネルとPresenceチャンネルは、サブスクライブ前にサーバーサイドで認可チェックが行われます。routes/channels.php
install:broadcasting コマンドで生成される routes/channels.php に認可コールバックを定義します。
true またはtruthyな値を返すと認可成功、false を返すと拒否されます。
ルートモデルバインディングも使用できます。
チャンネル名を
orders.{order} とすると、Order モデルのインスタンスが渡されます。チャンネルクラスによる認可
チャンネルが増えてきた場合は、チャンネルクラスを使って整理できます。routes/channels.php で登録します。
イベントの発火
ShouldBroadcast を実装したイベントは、通常のイベントと同じように発火します。
toOthers を使います。
フロントエンドでの受信
Laravel Echoのセットアップ
Reverbを使う場合、resources/js/bootstrap.js にEchoインスタンスを設定します。
イベントのリスニング
React / Vue フックの使用
React・Vueのスターターキットを使っている場合、専用フックを使うと簡潔に書けます。useEcho フックはコンポーネントのアンマウント時に自動でチャンネルを離脱します。
実践例: 注文ステータスのリアルタイム更新
1
ブロードキャストを有効化する
2
イベントクラスを作成する
app/Events/OrderShipmentStatusUpdated.php を編集します。3
チャンネル認可を定義する
routes/channels.php に認可ロジックを追加します。4
イベントを発火する
注文ステータスを更新するコントローラやJobで発火します。
5
フロントエンドでリスニングする
Bladeテンプレートにインラインスクリプト、またはReact/Vueコンポーネントで受信します。
次のステップ
Laravel Reverb
Reverbサーバーのセットアップ、本番環境での運用、スケーリングの詳細を確認してください。
キューとジョブ
ブロードキャストはキュー経由で処理されます。キューの設定と運用方法を確認してください。
イベントとリスナー
ブロードキャストの基盤となるLaravelイベントシステムの詳細を学びます。