Skip to main content
このページはReverb サーバー自体のセットアップと運用に焦点を当てています。 ブロードキャストイベントの作成やLaravel Echoの使い方はブロードキャストを参照してください。

Reverbとは

Laravel Reverb は、Laravelが公式に提供するセルフホスト型WebSocketサーバーです。 外部サービスへの依存なしに、高速でスケーラブルなリアルタイム通信をLaravelアプリケーションに追加できます。 Reverbはブロードキャスト基盤の上で動作し、サーバーサイドのイベントをWebSocket経由でブラウザへ届ける役割を担います。

インストール

install:broadcasting Artisanコマンドを使うと、Reverb を含むすべての依存関係を一括でインストールできます。
コマンド実行時にReverbを選択するか、--reverb オプションを付けて実行すると自動的にReverbがセットアップされます。
このコマンドは以下を行います。
  • Composer パッケージ (laravel/reverb) のインストール
  • NPM パッケージ (laravel-echopusher-js) のインストール
  • .env への環境変数の追加
  • config/reverb.php の生成
手動でインストールする場合は、Composerでパッケージを追加してから reverb:install を実行します。

設定

アプリケーション認証情報

クライアントとサーバーの接続確立に使用する認証情報を環境変数で設定します。
これらの値は config/reverb.phpapps セクションで参照されます。

許可するオリジン (Allowed Origins)

クライアントリクエストを許可するオリジンを config/reverb.phpallowed_origins で制限できます。
すべてのオリジンを許可する場合は * を指定します。

複数アプリ対応

1つのReverbサーバーで複数のアプリケーションに対応できます。 config/reverb.phpapps 配列に複数のエントリを追加します。

SSL設定

本番環境では、NginxなどのWebサーバーがSSL終端を担当し、Reverbへリクエストをプロキシするのが一般的です。 ローカル開発環境でSecure WebSocket (wss://) を使いたい場合は、Laravel HerdやValetの証明書を活用できます。
証明書を手動で指定する場合は config/reverb.phptls オプションを設定します。

サーバーの起動

reverb:start Artisanコマンドでサーバーを起動します。
デフォルトでは 0.0.0.0:8080 で起動します。 --host / --port オプションでカスタムアドレスを指定できます。
環境変数でも指定できます。
REVERB_SERVER_HOST / REVERB_SERVER_PORT はサーバー自体のリスンアドレスです。 REVERB_HOST / REVERB_PORT はLaravelアプリがブロードキャストメッセージを送信する先のアドレスです。 本番環境ではこれらが異なる場合があります。

デバッグモード

パフォーマンスのため、Reverbはデフォルトでデバッグ情報を出力しません。 接続やメッセージの流れを確認したい場合は --debug オプションを使います。

サーバーの再起動

Reverbは常駐プロセスのため、コードの変更を反映するには再起動が必要です。 reverb:restart コマンドは、すべての接続を graceful に終了してからサーバーを停止します。
Supervisorなどのプロセスマネージャーを使っている場合、停止後に自動的に再起動されます。

モニタリング

ReverbはLaravel Pulse との連携をサポートしています。 接続数やメッセージ数をリアルタイムでダッシュボードに表示できます。 まず config/pulse.php にReverbのレコーダーを追加します。
次に、Pulseダッシュボードのテンプレートにカードを追加します。
接続状況を正しく記録するため、Reverbサーバーで pulse:check デーモンを起動してください。 水平スケーリング構成の場合、pulse:check は1台のサーバーでのみ実行します。

本番環境での運用

ファイルオープン制限

WebSocket接続は1接続につき1ファイルディスクリプターを消費します。 OSレベルの制限を確認し、必要に応じて上限を引き上げます。
/etc/security/limits.conf で上限を変更できます。

イベントループ (ext-uv)

ReverbはデフォルトでPHPの stream_select を使いますが、これは最大1,024ファイルの制限があります。 1,000以上の同時接続を扱う場合は ext-uv をインストールして制限を解放します。
ext-uv が利用可能な場合、Reverbは自動的にそちらを使用します。

Nginxリバースプロキシ

本番環境ではReverbを直接公開せず、NginxなどのWebサーバーでプロキシします。 以下はNginxの設定例です。
ReverbはWebSocket接続を /app で、APIリクエストを /apps で受け付けます。 Webサーバーの設定で両方のURIへのアクセスを許可してください。
同時接続数を増やすには、nginx.confworker_rlimit_nofileworker_connections を調整します。

プロセス管理 (Supervisor)

本番環境ではSupervisorでReverbプロセスを管理します。 supervisor.confminfds を設定して、必要なファイルディスクリプターを確保します。
Supervisorの設定例:

スケーリング (Redis)

単一サーバーでは処理しきれない接続数が必要な場合、Redisのpub/sub機能を使った水平スケーリングが可能です。 .env でスケーリングを有効化します。
ReverbはアプリケーションのデフォルトRedis接続を使ってサーバー間でメッセージをやり取りします。 複数のReverbサーバーを起動し、ロードバランサーでリクエストを分散します。
Laravel Cloud では、インフラ管理なしにReverb対応アプリをデプロイできる フルマネージドのWebSocketインフラを提供しています。

イベント

Reverbは接続・メッセージのライフサイクルで以下のイベントを発行します。 イベントリスナーでこれらを受け取り、独自の処理を追加できます。 これらのイベントはすべて Laravel\Reverb\Events 名前空間に属します。

次のステップ

ブロードキャスト

ブロードキャストイベントの作成、チャンネル認可、Laravel Echoの設定方法を確認する

イベントとリスナー

Reverbが発行するイベントを受け取るためのLaravelイベントシステムを学ぶ
最終更新日 2026年4月13日