Web開発
Bluesky Protocol Services
Bluesky Protocol Services (atproto.com)
要約
Blueskyは、ATプロトコルネットワーク上で運営するパブリックインフラストラクチャのための新ブランド「Bluesky Protocol Services」と新ウェブサイトを発表しました。Jetstream v2では、過去の任意の時点からライブストリームにギャップなく追いつける「Network Replay」機能が追加され、開発者はより効率的にネットワークデータを利用できるようになります。また、Jetstreamの利用を簡素化するTypeScriptおよびGoのSDKもリリースされました。
全文翻訳
本日、Bluesky Protocol Servicesをローンチします。これは、BlueskyがATプロトコルネットワーク上で運営するパブリックインフラストラクチャのための新しいブランドであり、新しいウェブサイトです。
Blueskyは常にBlueskyアプリ以上のものを運営してきました。私たちはJetstreamインスタンス、リレー、そしてatproto上に構築されたBluesky APIエンドポイントを運営しています。しかし、もしあなたがそのインフラストラクチャ上で開発しようとしている開発者であれば、私たちがサービスとして何を提供しているのか、どこから始めれば良いのか、ドキュメントでは常に分かりやすいとは言えませんでした。本日、私たちはそれを修正します。
Bluesky Protocol Servicesは、エコシステム内で開発者が必要とするすべてのドキュメントを整理し、Bluesky提供のインフラストラクチャに関するサービス契約を明確にし、古いdocs.bsky.appサイトを置き換え、この記事で紹介するような将来のリリースを配信するためのクリーンな方法を提供します。
Jetstream v2: Network Replay
新しいサイトと同時にリリースされる主要なリリースはJetstream v2です。Jetstreamは、ほとんどの開発者にとってネットワークをスケールして使用するための最良の方法です。あなたが望むスライスを記述すると、それはWebSocket経由でプレーンなJSONとして配信されます。
しかし、それは履歴を提供できませんでした。もしネットワーク上に既に存在するレコードが必要な場合、リポジトリを自分でバックフィルしてからライブストリームに切り替える必要がありました。Jetstream v2は、その機能性をサーバーに追加します。それはネットワーク全体の圧縮アーカイブを保持し、ライブテールと並んで、それを消費するための新しい方法を追加します。Network Replayを使用すると、過去の任意の時点からキャッチアップし、ギャップなしでライブに切り替えることができます。
あなたはfiltersをplanSnapshotにPOSTし、返されたsealed segmentsをプレーンHTTP経由でダウンロードし、その後、先端でライブWebSocketに接続します。Replayはサーバー側でステートレスであり、コンシューマーごとのカーソル、登録するサブスクリプション、クライアントでのステージングは何もありません。
Jetstreamはあなたのバッファです。ネットワークをスナップショットすることもできます。HTTPのみ(listSegments + getSegment)でアーカイブのポイントインタイムコピーを取得し、ライブテールはありません。同じアーカイブ、同じフィルター、WebSocketなしです。これにより、ローカルでのバックフィルなしで、より洗練されたサーバーサイドのスライスが可能になります。Appを起動し、1ヶ月分の投稿を分析したり、ダウンタイムから回復したりできます。これらはすべて、ライブテールと同じJSON形式で行えます。
これらのアーカイブを提供することは、帯域幅を大量に消費します。サービスが信頼性が高く、安価に実行され続けることを保証するために、これらのリクエストにはAPIトークンが必要になります。ライブテールは認証なしで開いたままですが、アーカイブをリクエストした場合にのみトークンが必要になります。ライブストリームに認証要件を導入する計画はありません。
v2インスタンスは現在、wss://jetstream.us-west.bsky.networkおよびwss://jetstream.us-east.bsky.networkで稼働しています。既存のv1インスタンスはしばらくの間変更なく稼働し続けます。ライブテールはどちらでも同じように動作するため、急いで移行する必要はありません。Network Replayドキュメントで完全なフローを確認してください。
そして!いつものように、このインフラストラクチャはオープンソースであり、セルフホスト可能です。詳細はRunning your own Jetstreamを参照してください。
Jetstream SDK
JetstreamはプレーンなJSONなので、SDKは必要ありません。しかし、いくつかの共通のグルーコードがあります。再接続、重複排除、カーソル管理、イベントのデコードなどです。そのため、新しいJetstream SDKがあります。TypeScriptとGoのクライアントでは、Jetstreamオブジェクトを構築し、フィルターを渡し、デコードされた型付きイベントをfor awaitで処理します。
```typescript
import { Jetstream } from '@bsky/jetstream'
import { app } from '@bsky/sdk/lexicons'
const js = new Jetstream('https://jetstream.us-east.bsky.network')
for await (const evt of js.live({ collections: [app.bsky.feed.post] })) {
if (evt.kind === 'commit' && evt.commit.operation === 'create') {
console.log(evt.commit.collection, evt.commit.record.text)
}
}
```
TypeScript SDKはnpm、npmxから利用可能です。Go SDKはJetstreamプロジェクトの一部として利用可能です。Jetstream SDKドキュメントで詳細を確認してください。
Bluesky TypeScript SDK、lexをベースに再構築
5月にlex SDKを安定プレビューに昇格させ、スタンドアロンのBlueskyドキュメントもそれに続くことを約束しました。それが完了しました。Bluesky TypeScript SDKは@atproto/lexの上に再構築されており、Bluesky固有のヘルパーのためのレガシーコードパスをメンテナンスする必要がなくなりました。これは、プロトコルレイヤーからapp.bskyレコードまで、エンドツーエンドで完全に型付けされたレキシコンツールチェーンです。この新しいサイトのすべてのTypeScriptの例は、これに対して書かれており、レガシーな技術的負債から大きく離れることを示しています。これは私たちにとって良いコード衛生であり、非推奨のSDKに対するLLMの推奨を排除するはずです。
もしあなたがまだ@atproto/apiコードを使用している場合、それは以前と同様に機能し、Bluesky APIガイドは移行リファレンスとして機能します。
endpoints.bsky.appへの更新
最後に、HTTPリファレンスが更新されました。https://docs.bsky.appからこれらのドキュメントを分離することは、実際にはこのオーバーホールのステップ1でした。私たちは今、残りを着陸させています。Replayを支える新しいnetwork.bsky.jetstream.*メソッド(planBackfill, listSegments, getSegment, getBlock)は、完全なリクエストとレスポンススキーマとともにブラウズ可能になり、リファレンスはJetstreamのWebSocketエンドポイントも文書化しています。これにより、Jetstream v2のすべてのサーフェスが1か所に集約されます。
次は何?
上記のすべては本日稼働しています。新しいサイト、v2 Jetstreamインスタンス、SDKプレビュー、更新されたHTTPリファレンスです。もしあなたがネットワークに新規であれば、レコード、レキシコン、ファイアホースがどのように連携するかを視覚的に解説したHow It Worksから始めてください。もしあなたがBlueskyアプリのデータモデルに対して何かを構築しているなら、Bluesky APIガイドはすべてそのまま残っており、新たに書き直されています(詳細は後述)。
もしあなたが今後数週間でReplay上に何かを構築した場合、私たちはそれについて聞きたいと思っています。SDKのオーケストレーションがどこへ向かうかを形作る最も速い方法は、あなたがストリームを何に折り込んでいるかを見せてくれることです。