メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://kawax.biz/llms.txt

Use this file to discover all available pages before exploring further.

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

Reverbとは

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

インストール

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

設定

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

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

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

クライアントリクエストを許可するオリジンを config/reverb.phpallowed_origins で制限できます。
'apps' => [
    [
        'app_id' => 'my-app-id',
        'allowed_origins' => ['laravel.com'],
        // ...
    ]
]
すべてのオリジンを許可する場合は * を指定します。

複数アプリ対応

1つのReverbサーバーで複数のアプリケーションに対応できます。 config/reverb.phpapps 配列に複数のエントリを追加します。
'apps' => [
    [
        'app_id' => 'my-app-one',
        // ...
    ],
    [
        'app_id' => 'my-app-two',
        // ...
    ],
],

SSL設定

本番環境では、NginxなどのWebサーバーがSSL終端を担当し、Reverbへリクエストをプロキシするのが一般的です。 ローカル開発環境でSecure WebSocket (wss://) を使いたい場合は、Laravel HerdやValetの証明書を活用できます。
php artisan reverb:start --host="0.0.0.0" --port=8080 --hostname="laravel.test"
証明書を手動で指定する場合は config/reverb.phptls オプションを設定します。
'options' => [
    'tls' => [
        'local_cert' => '/path/to/cert.pem'
    ],
],

サーバーの起動

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

デバッグモード

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

サーバーの再起動

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

モニタリング

ReverbはLaravel Pulse との連携をサポートしています。 接続数やメッセージ数をリアルタイムでダッシュボードに表示できます。 まず config/pulse.php にReverbのレコーダーを追加します。
use Laravel\Reverb\Pulse\Recorders\ReverbConnections;
use Laravel\Reverb\Pulse\Recorders\ReverbMessages;

'recorders' => [
    ReverbConnections::class => [
        'sample_rate' => 1,
    ],

    ReverbMessages::class => [
        'sample_rate' => 1,
    ],

    // ...
],
次に、Pulseダッシュボードのテンプレートにカードを追加します。
<x-pulse>
    <livewire:reverb.connections cols="full" />
    <livewire:reverb.messages cols="full" />
    ...
</x-pulse>
接続状況を正しく記録するため、Reverbサーバーで pulse:check デーモンを起動してください。 水平スケーリング構成の場合、pulse:check は1台のサーバーでのみ実行します。

本番環境での運用

ファイルオープン制限

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

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

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

Nginxリバースプロキシ

本番環境ではReverbを直接公開せず、NginxなどのWebサーバーでプロキシします。 以下はNginxの設定例です。
server {
    ...

    location / {
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header SERVER_PORT $server_port;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        proxy_pass http://0.0.0.0:8080;
    }

    ...
}
ReverbはWebSocket接続を /app で、APIリクエストを /apps で受け付けます。 Webサーバーの設定で両方のURIへのアクセスを許可してください。
同時接続数を増やすには、nginx.confworker_rlimit_nofileworker_connections を調整します。
user forge;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
worker_rlimit_nofile 10000;

events {
  worker_connections 10000;
  multi_accept on;
}

プロセス管理 (Supervisor)

本番環境ではSupervisorでReverbプロセスを管理します。 supervisor.confminfds を設定して、必要なファイルディスクリプターを確保します。
[supervisord]
...
minfds=10000
Supervisorの設定例:
[program:reverb]
process_name=%(program_name)s
command=php /path/to/artisan reverb:start
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/path/to/reverb.log

スケーリング (Redis)

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

イベント

Reverbは接続・メッセージのライフサイクルで以下のイベントを発行します。 イベントリスナーでこれらを受け取り、独自の処理を追加できます。
イベント説明
ChannelCreatedチャンネルが作成されたとき(最初の接続がサブスクライブ)
ChannelRemovedチャンネルが削除されたとき(最後の接続がアンサブスクライブ)
ConnectionPruned古い接続がサーバーによって切断されたとき
MessageReceivedクライアントからメッセージを受信したとき
MessageSentクライアントへメッセージを送信したとき
これらのイベントはすべて Laravel\Reverb\Events 名前空間に属します。

次のステップ

ブロードキャスト

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

イベントとリスナー

Reverbが発行するイベントを受け取るためのLaravelイベントシステムを学ぶ
Last modified on April 13, 2026