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

概要

Bluesky Facade は BlueskyManager の薄いラッパーです。BlueskyManager は複数の Agent を管理し、HasShortHand トレイトが頻繁に使うメソッドのショートカットをまとめて提供します。

アーキテクチャ

BlueskyServiceProviderFactory::classBlueskyManager としてスコープ付きシングルトン(1リクエストにつき1インスタンス)で登録します。
Facade の getFacadeAccessor() がこのバインディングを解決します。

BlueskyManager のコアメソッド

BlueskyManager 自身が定義するコアメソッドは以下のとおりです。HasShortHand トレイトのメソッドとは区別して把握しておくと、内部構造の理解に役立ちます。

認証

Agent 操作

HTTP クライアント

ユーティリティ

HasShortHand トレイト

HasShortHand トレイトは、AT Protocol の低レベル API を PHP 向けのわかりやすいメソッドにラップしています。BlueskyManageruse HasShortHand; と記述するだけで、これらのメソッドが Bluesky:: から直接呼べるようになります。
HasShortHand を独立したトレイトにしている理由は、テスト・カスタマイズの容易さです。このトレイトを使えば BlueskyManager のコードをシンプルに保ちながら、豊富な API ショートカットを提供できます。

投稿・フィード

エンゲージメント

フォロー

プロフィール・アカウント

メディア

通知

AT Protocol レコード操作

フィードジェネレーター・ラベラー

よく使うショートカットの例

投稿する

リプライする

リプライは Post::build() で親投稿の StrongRef を設定します。HasShortHand に専用の reply() メソッドはなく、post()Post オブジェクトを渡します。

いいね・リポスト

プロフィールを更新する

upsertProfile() は現在のプロフィールを取得し、クロージャ内で変更した内容を保存します。Profile オブジェクトのメソッドを使って displayName・description などを設定できます。

セルフラベルを設定する

SelfLabels を使って、アカウント全体に対してセルフラベルを設定できます。

任意の API を直接呼び出す

HasShortHand にないメソッドは send() または client() を使います。

Facade 経由と直接利用の違い

Bluesky::post()app(Factory::class)->post() は同じ BlueskyManager インスタンスに対する操作です。
scoped 登録のため、1リクエスト内では login() 後のセッション状態が保持されます。

Conditionable と Macroable

BlueskyManagerConditionableMacroable トレイトも使用しています。

Conditionable: when() / unless()

Macroable: カスタムメソッドの追加

macro() を使うとアプリケーション側から BlueskyManager にメソッドを追加できます。AppServiceProviderboot() 内で定義するのが一般的です。

カスタム Agent の差し込み

withAgent() を使うと、任意の Agent 実装を直接セットできます。
通常の認証(login() / withToken())を使えば自動でエージェントがセットされるため、withAgent() を直接使う機会はテスト時が主となります。

参考リンク

最終更新日 2026年4月26日