Skip to main content

ブロードキャストとは

WebSocketを使うと、サーバーからクライアントへリアルタイムにデータを送信できます。 Laravelのブロードキャストは、サーバーサイドのイベントをWebSocket経由でフロントエンドのJavaScriptに届ける仕組みです。 たとえば注文ステータスが変化したとき、ページを再読み込みしなくてもブラウザ上で即座に更新を表示できます。 サーバーサイドのイベント名とデータを、クライアントサイドとそのまま共有できるのがLaravelブロードキャストの強みです。
ブロードキャストはLaravelのイベントシステムの上に構築されています。 まずイベントとリスナーの基本を理解しておくことを推奨します。

セットアップ

新規Laravelアプリケーションではブロードキャストはデフォルトで無効です。 install:broadcasting Artisanコマンドで有効化します。
このコマンドを実行すると、使用するブロードキャストサービスを選択するよう促されます。 また、config/broadcasting.phproutes/channels.php が生成されます。

Laravel Reverb

Laravel 11以降では、公式WebSocketサーバーである Laravel Reverb が推奨されます。 Reverbはセルフホスト型で、追加の外部サービス不要でリアルタイム通信を実現します。

インストール

install:broadcasting コマンドに --reverb オプションを付けると、Reverbに必要なComposerパッケージ・NPMパッケージのインストールと .env の設定を一括で行います。
手動でインストールする場合は、Composerでパッケージを追加してからインストールコマンドを実行します。

.env の主な設定値

Reverbサーバーの起動

本番環境ではSupervisorなどのプロセスマネージャーでデーモンとして管理します。
ブロードキャストイベントはキュー経由で処理されます。 Reverbサーバーと別にキューワーカーも起動しておく必要があります。

ブロードキャストイベントの作成

イベントクラスの生成

生成されたイベントクラスに ShouldBroadcast インターフェースを実装します。
ShouldBroadcast を実装するだけで、イベントが発火されると自動的にキュー経由でブロードキャストされます。

ブロードキャストデータのカスタマイズ

デフォルトでは、イベントクラスの public プロパティがすべてブロードキャストのペイロードに含まれます。 送信するデータを絞り込む場合は broadcastWith メソッドを定義します。

ブロードキャスト名のカスタマイズ

デフォルトではクラス名がイベント名になります。 broadcastAs メソッドでカスタム名を指定できます。
フロントエンドでリスニングするときは、先頭に . を付けてアプリの名前空間プレフィックスを無効にします。

チャンネルの種類

複数チャンネルにブロードキャストするには配列で返します。

チャンネル認可

PrivateチャンネルとPresenceチャンネルは、サブスクライブ前にサーバーサイドで認可チェックが行われます。

routes/channels.php

install:broadcasting コマンドで生成される routes/channels.php に認可コールバックを定義します。
コールバックの第1引数は認証済みユーザー、以降の引数はチャンネル名のワイルドカードです。 true またはtruthyな値を返すと認可成功、false を返すと拒否されます。
ルートモデルバインディングも使用できます。 チャンネル名を orders.{order} とすると、Order モデルのインスタンスが渡されます。

チャンネルクラスによる認可

チャンネルが増えてきた場合は、チャンネルクラスを使って整理できます。
routes/channels.php で登録します。

イベントの発火

ShouldBroadcast を実装したイベントは、通常のイベントと同じように発火します。
自分自身を除く他のユーザーにだけブロードキャストしたい場合は toOthers を使います。
toOthers を使うには、イベントクラスが InteractsWithSockets トレイトを使用している必要があります。

フロントエンドでの受信

Laravel Echoのセットアップ

Reverbを使う場合、resources/js/bootstrap.js にEchoインスタンスを設定します。

イベントのリスニング

React / Vue フックの使用

React・Vueのスターターキットを使っている場合、専用フックを使うと簡潔に書けます。
useEcho フックはコンポーネントのアンマウント時に自動でチャンネルを離脱します。
フロントエンドのアセットをビルドする前に、.envVITE_REVERB_* 変数が正しく設定されていることを確認してください。

実践例: 注文ステータスのリアルタイム更新

1

ブロードキャストを有効化する

Reverbサーバーとキューワーカーを起動します。
2

イベントクラスを作成する

app/Events/OrderShipmentStatusUpdated.php を編集します。
3

チャンネル認可を定義する

routes/channels.php に認可ロジックを追加します。
4

イベントを発火する

注文ステータスを更新するコントローラやJobで発火します。
5

フロントエンドでリスニングする

Bladeテンプレートにインラインスクリプト、またはReact/Vueコンポーネントで受信します。

次のステップ

Laravel Reverb

Reverbサーバーのセットアップ、本番環境での運用、スケーリングの詳細を確認してください。

キューとジョブ

ブロードキャストはキュー経由で処理されます。キューの設定と運用方法を確認してください。

イベントとリスナー

ブロードキャストの基盤となるLaravelイベントシステムの詳細を学びます。
最終更新日 2026年4月13日