メインコンテンツへスキップ
Labeler は上級者向け機能です。サーバーとして動かし続ける必要があるため、Laravel Forge を使っているか、自力でサーバーを構築できる方を対象にしています。Laravel 初心者には推奨しません。サポートはありません。Laravel Cloud は非対応です。 Labeler は WebSocket サーバーとして常時起動させて nginx の設定を変更する必要がありますが、Laravel Cloud は nginx の設定ができないので Labeler を動かすことができません。

Labeler とは

Labeler は AT Protocol(Bluesky)上でコンテンツにラベルを付けるサービスです。モデレーション、コンテンツ分類、カスタムフィルタリングなどに活用できます。 Labeler の概念を事前に理解しておくことが必要です。 他言語向けのスターターキットも参考になります。 サンプル実装:

準備

Labeler を動かすには以下が必要です。
  • Labeler 専用の新しい Bluesky アカウント(普段使いのアカウントは使用しないこと)
  • Labeler 専用の新しい Laravel プロジェクト(プロジェクトは分けることを推奨)
  • (サブ)ドメイン
  • VPS や AWS EC2 などの本番 Linux サーバー(Laravel Cloud・Laravel Vapor・Vercel は不可)
共有サーバーしか使えない場合は Labeler の運用は困難です。

追加パッケージのインストール

設定

最初に秘密鍵を生成します。
生成した秘密鍵と関連する設定値を .env に追加します。

Labeler クラスの作成

AbstractLabeler を継承した独自の Labeler クラスを作成します。ファイルは任意の場所に置けます。
パッケージが Labeler の処理の大部分を担うので、カスタマイズが必要な部分だけを実装します。
サンプル実装: ArtisanLabeler.php

labels()

ラベルの定義を返します。skyware スターターキットの定数定義が参考になります。

subscribeLabels()

WebSocket 接続直後に呼び出されます。SubscribeLabelResponse をイテレータで返します。

emitEvent()

ラベルを追加または削除するリクエストが来たときに呼び出されます。UnsignedLabel をイテレータで返します。

saveLabel()

署名済みラベルをデータベースに保存します。SavedLabel を返します。
マイグレーションと Eloquent モデルはパッケージ内のサンプルを参照してください。

createReport()

ユーザーからアピールなどが送られてきたときに呼び出されます。

queryLabels()

WebSocket の代わりに HTTP API 経由でラベルをクエリします。Bluesky 公式では使用されず、サードパーティが使用します。不要な場合は空配列を返します。

AppServiceProvider への登録

作成した Labeler クラスを AppServiceProvider::boot() に登録します。

アカウントのセットアップ

Labeler アカウントとして初期化します。
このコマンドではアプリパスワードではなく実際のアカウントパスワードを入力します。処理中に「PLC Update Operation Requested」というメール確認が届くので、コマンドの指示に従って入力してください。
エンドポイント URL が正しく設定されていればローカル環境から実行することもできます。

ラベル定義の宣言

Labeler アカウントにラベル定義を登録します。
このコマンドもローカル環境から実行できます。

その他のコマンド

ラベル定義の削除:
Labeler アカウントを通常アカウントに戻す:

Laravel Forge での実行

SSL を有効化した後、以下の設定で Labeler サーバーを起動します。

nginx 設定

Forge の nginx 設定に 3 つの location ブロックを追加します。

デプロイスクリプト

デプロイ時に Labeler サーバーを停止します。停止後は Supervisor が自動的に再起動します。

バックグラウンドプロセス(デーモン)の設定

Forge のバックグラウンドプロセス設定画面で、Queue Worker タブではなく Custom タブを選択します。 コマンド:
Jetstream や Firehose と同時に起動する場合はオプションを指定します。 bluesky:wsbluesky:firehose コマンドと同時実行はできません。

ラベルの追加

どのようにラベルを付けるかはアプリケーションの実装次第です。サンプルでは Laravel のイベント機能を使い「フォローされたとき」にラベルを付けています。
イベント取りこぼしに備えて、タスクスケジュールでもラベル付けを行うことを推奨します。
最終更新日 2026年5月6日