Skip to main content

概要

laravel-bluesky は Bluesky のリアルタイムストリームに接続するための2つの WebSocket コマンドを提供します。
  • Jetstream — Bluesky 独自のフィルタリング済み WebSocket エンドポイント。JSON 形式で軽量。
  • Firehose — AT Protocol の生のイベントストリーム。DAG-CBOR バイナリ形式で全データを受信。
WebSocket による長時間実行プロセスは VPS や EC2 などの常時起動サーバー または Laravel Cloud のカスタムワーカー が必要です。Laravel Vapor や Vercel などのサーバーレス環境では動作しません。

インストール

WebSocket 機能には Workerman が必要です。

Jetstream

概要

Jetstream は Bluesky が提供するフィルタリング済みの WebSocket サービスです。コレクション種別やユーザー DID でフィルタリングできるため、必要なイベントだけを効率的に受信できます。

起動方法

コレクションフィルター

-C オプションで受信するコレクションを絞り込みます。複数指定可能です。
主なコレクション:

DID フィルター

-D オプションで特定ユーザーのイベントのみ受信します。

イベント処理

Jetstream コマンドは受信したメッセージの種別に応じて Laravel イベントを発火します。 イベントリスナーを作成してイベントを処理します。

Firehose

概要

Firehose は AT Protocol の生のイベントストリームです。Bluesky ネットワーク上のすべてのレコード操作をバイナリ(DAG-CBOR)形式で受信します。
DAG-CBOR のデコードはパッケージが自動的に行います。イベントリスナーでは通常の PHP 配列としてデータを受け取れます。

起動方法

イベント処理

Firehose コマンドも Laravel イベントを使ってメッセージを処理します。

設定

config/bluesky.php で接続先ホストやログ設定を変更できます。
.env での設定例:

Labeler との組み合わせ

Labeler サーバーと Jetstream / Firehose を同時に起動できます。Labeler が受け取ったラベリングリクエストの処理に Jetstream や Firehose のデータを利用できます。
Labeler の詳細は Labeler ページ を参照してください。

長時間実行プロセスの運用

WebSocket コマンドは長時間起動し続けるプロセスです。本番環境では Supervisor などのプロセス管理ツールを使用してください。

Supervisor 設定例

/etc/supervisor/conf.d/bluesky-jetstream.conf:

Laravel Forge のデーモン設定

Laravel Forge を使用している場合は、Daemons セクションからデーモンを追加します。
  • Command: php artisan bluesky:ws start -C app.bsky.feed.post
  • Directory: /var/www/html
  • User: forge

Laravel Cloud でのバックグラウンドプロセス設定

WebSocket コマンドは WebSocket クライアント として Bluesky のストリームに接続するため、Laravel Cloud でも動作します。Laravel Cloud のバックグラウンドプロセス(カスタムワーカー)として設定してください。 Laravel Cloud のバックグラウンドプロセス設定で Custom Worker を追加します。 Jetstream の場合:
Firehose の場合:
デプロイ時のプロセス停止・再起動などはすべて Laravel Cloud 側で自動的に処理されます。バックグラウンドプロセスの設定以外に追加の設定は不要です。

注意事項

  • プロセスが予期せず終了した場合、autorestart=true で自動再起動されます。
  • メモリリークを防ぐため、定期的な再起動を検討してください。
  • 大量のメッセージを受信する Firehose では、リスナー内の処理は非同期(Queue Job)にすることを推奨します。
最終更新日 2026年4月25日