概要
Bluesky Facade は BlueskyManager の薄いラッパーです。BlueskyManager は複数の Agent を管理し、HasShortHand トレイトが頻繁に使うメソッドのショートカットをまとめて提供します。
アーキテクチャ
BlueskyServiceProvider は Factory::class を BlueskyManager としてスコープ付きシングルトン(1リクエストにつき1インスタンス)で登録します。
getFacadeAccessor() がこのバインディングを解決します。
BlueskyManager のコアメソッド
BlueskyManager 自身が定義するコアメソッドは以下のとおりです。HasShortHand トレイトのメソッドとは区別して把握しておくと、内部構造の理解に役立ちます。
認証
Agent 操作
HTTP クライアント
ユーティリティ
HasShortHand トレイト
HasShortHand トレイトは、AT Protocol の低レベル API を PHP 向けのわかりやすいメソッドにラップしています。BlueskyManager に use 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
BlueskyManager は Conditionable と Macroable トレイトも使用しています。
Conditionable: when() / unless()
Macroable: カスタムメソッドの追加
macro() を使うとアプリケーション側から BlueskyManager にメソッドを追加できます。AppServiceProvider の boot() 内で定義するのが一般的です。
カスタム Agent の差し込み
withAgent() を使うと、任意の Agent 実装を直接セットできます。
通常の認証(
login() / withToken())を使えば自動でエージェントがセットされるため、withAgent() を直接使う機会はテスト時が主となります。参考リンク
- 認証方法の比較 — App Password と OAuth の詳細
- Basic client — 認証後の API 操作例
- テスト — Fake を使ったテスト方法
- Source: src/BlueskyManager.php
- Source: src/HasShortHand.php