Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~
Search
Segment
March 17, 2023
Programming
3
3.8k
AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~
Bluesky/AT Protocol 勉強会 #0
https://428lab.connpass.com/event/277114/
Segment
March 17, 2023
Tweet
Share
More Decks by Segment
See All by Segment
Nostr(ノスター)を始めよう
gpsnmeajp
0
330
mocopiを簡易ジェスチャー認識音楽プレイヤーに使ってみた
gpsnmeajp
0
250
分散型SNS nostr 仕組み解説
gpsnmeajp
2
2.4k
クライアントを作ってみてわかったこと
gpsnmeajp
0
300
Nostr概説
gpsnmeajp
0
1.1k
Other Decks in Programming
See All in Programming
GoのGenericsによるslice操作との付き合い方
syumai
3
680
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
100
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
310
5つのアンチパターンから学ぶLT設計
narihara
1
110
関数型まつりレポート for JuliaTokai #22
antimon2
0
150
F#で自在につくる静的ブログサイト - 関数型まつり2025
pizzacat83
0
310
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
310
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.3k
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
130
LT 2025-06-30: プロダクトエンジニアの役割
yamamotok
0
110
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
190
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
280
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Optimizing for Happiness
mojombo
379
70k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Statistics for Hackers
jakevdp
799
220k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Music & Morning Musume
bryan
46
6.6k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
Unsuck your backbone
ammeep
671
58k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
Designing Experiences People Love
moore
142
24k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Transcript
AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~ Bluesky/ATProtocol 勉強会#0
Segment(gpsnmeajp) 普段は電子工作したり、VR向けツール作ったりしてます
Q. BlueSkyって何?
Q. BlueSkyって何? A. 分散型SNSの問題点をいい塩梅で いいとこ取りしようと頑張ってる 未完成品のSNSサービス & プロトコル
Q. BlueSkyって何? A. 分散型SNSの問題点をいい塩梅で いいとこ取りしようと頑張ってる 未完成品のSNSサービス & プロトコル まだ未完成!!いろいろ未整備! でもどんどん進化中!
今回文字が多いです、ゴメンナサイ 説明には誤りがあることがあります 開発者の方々に割と日々ツッコミを受けています 公式ドキュメントも発展途上です ソースコード読みきれない~
まずは(5分)
中央集権の問題点 透明性のないサービス運営 アルゴリズムの押し付け UIの押し付け モデレーションに対する不満
APIの有料化・開発者冷遇 広告 凍結 炎上 その他見たくないものが目に入る 人数と反応があんまり一致しない 投稿 購読・ 配信 購読・ 配信 独自API
再確認: Twitterはすげえぞ 国内ユーザー数: 約6千万人 全世界ユーザー数: 約4億人 (地球人口: 約78億人=5%)
利用料金: 基本無料 (一部機能のみ有料) + 広告 公式スマートフォンアプリ(iOS, Android)、Webアプリあり API 無料開放していた 各種政府機関や報道機関が使用するほどの高いサービス安定性 日夜押し寄せるBot、通報、詐欺、DMCA、ヘイトその他への対応 AIによる自動凍結システムなどによる治安維持 出典: https://www.ownly.jp/sslab/sns-user-detail
再確認: Twitterはすげえぞ 国内ユーザー数: 約6千万人 全世界ユーザー数: 約4億人 (地球人口: 約78億人=5%)
利用料金: 基本無料 (一部機能のみ有料) + 広告 公式スマートフォンアプリ(iOS, Android)、Webアプリあり API 無料開放していた 各種政府機関や報道機関が使用するほどの高いサービス安定性 日夜押し寄せるBot、通報、詐欺、DMCA、ヘイトその他への対応 AIによる自動凍結システムなどによる治安維持 出典: https://www.ownly.jp/sslab/sns-user-detail これが無料、これが基準
これが無料、これが基準 再確認: Twitterはすげえぞ 国内ユーザー数: 約6千万人 全世界ユーザー数: 約4億人 (地球人口:
約78億人=5%) 利用料金: 基本無料 (一部機能のみ有料) + 広告 公式スマートフォンアプリ(iOS, Android)、Webアプリあり API 無料開放していた 各種政府機関や報道機関が使用するほどの高いサービス安定性 日夜押し寄せるBot、通報、詐欺、DMCA、ヘイトその他への対応 AIによる自動凍結システムなどによる治安維持 出典: https://www.ownly.jp/sslab/sns-user-detail
インス タンス A 投稿 購読・配信 購読・配信 インス タンス B リモートフォロー
配信 ActivityPub MastodonAPI MisskeyAPI 連合 Relay インス タンス D インス タンス C インス タンス E みんなで分担しよう 選択の自由を得よう 嫌なら引っ越せるように 連合分散型(分権型) : 相互接続SNS
連合分散型(分権型) : 相互接続SNS インス タンス A 投稿 購読・配信 購読・配信 インス
タンス B リモートフォロー 配信 ActivityPub MastodonAPI MisskeyAPI 連合 Relay インス タンス D インス タンス C インス タンス E みんなで分担しよう 選択の自由を得よう 嫌なら引っ越せるように 中央集権と 同じ構造を内包 ・モデレーションできる ・人が集中する ・ドメインブロック ・責任の集中
インス タンス A 投稿 購読・配信 購読・配信 インス タンス B リモートフォロー
配信 ActivityPub MastodonAPI MisskeyAPI 連合 Relay インス タンス D インス タンス C インス タンス E 中央集権と 同じ構造を内包 ・モデレーションできる ・人が集中する ・ドメインブロック ・責任の集中 引っ越しには 元サーバーの協力が必要 投稿は持っていけない みんなで分担しよう 選択の自由を得よう 嫌なら引っ越せるように 連合分散型(分権型) : 相互接続SNS
Relay Server 投稿 イベント中継 フィルタ 保持 & 過去投稿の再配信 Websocket API
フィルタ登録 配信 Nostr (Websocket) Relay Server Relay Server Relay Server フィルタ登録 配信 Relay Server Relay Server 鍵ペア生成 署名 テキスト投稿 メタ情報投稿 フィルタ登録 配信要求 フォローリスト投稿 表示(重複排除) フォロー=公開鍵リスト作る 無責任分散(多重化) : 公開鍵が唯一我が身の証明 所属なし(身軽) フォロワー引継ぎ 多重化 統制不可能
Relay Server 投稿 イベント中継 フィルタ 保持 & 過去投稿の再配信 Websocket API
フィルタ登録 配信 Nostr (Websocket) Relay Server Relay Server Relay Server フィルタ登録 配信 Relay Server Relay Server 鍵ペア生成 署名 テキスト投稿 メタ情報投稿 フィルタ登録 配信要求 フォローリスト投稿 表示(重複排除) フォロー=公開鍵リスト作る 無責任分散(多重化) : 公開鍵が唯一我が身の証明 所属なし(身軽) フォロワー引継ぎ 多重化 統制不可能 データ保証なし 鍵漏洩救済なし なりすまし スパム ブロック不可
トレードオフ 集権にすると 縛られる & 利便性高い 完全に分散すると 無法地帯 & 自己責任 うまく組み合わせて両立できないか
BlueSkyの目指すところ (5分)
理念 スケーラブルな連合 アルゴリズム選択 アカウントポータビリティ オープンで拡張性のあるプロトコル
WWWがATProtocol ブラウザがBlueSky 既存の問題を解決 ※ちなみにTwitter社が関わっており、Twitterの資金でスタートした、Twitterから独立したプロジェクト。 Twitterそしてジャックが分散・自由・オープンを考えていたことがわかります。
その他IPFSなど Repo Repo PDS Repo 連合分散型(分権型) + 自己認証(🔑) PDS 投稿
フォロー Feed取得 XRPC ATProtocol XRPC ATProtocol DID PLC 検索・おすすめ 統計 名前解決 IPLD Repo 🔑 IPLD Repo 🔑 IPLD Repo 🔑 回復鍵 回復鍵 回復鍵 🔑 🔑 🔑 🔑 署名鍵 🔑 🔑 🔑 🔑署名鍵 🔒 🔒 🔒 クローリング インデクサー クローリング インデクサー フォロー Feed取得 IPLD Repo Repo Repo Repo Repo Repo
具体的になにができるのか? 所属サーバーと、検索・おすすめシステムが分離 → 好きに選べる・好きに見れる データを所属先の同意なく自分で所有・移動できる → そのための鍵とローカルリポジトリ
名前(Handle)やIDを所属とは関係ない独立したものにできる → 引っ越してもフォローや関係が切れない AT Protocolベースのソーシャルアプリを自作できる → BlueSkyは実装のひとつ
Mastodon等従来の連合との違いは? オフライン引っ越しができる (予めカスタムドメインを使用すると)名前を持ち運べる フォロー関係を(元のサーバーに頼らず)維持できる ローカルに依存せず横断的に閲覧・検索できる
おすすめアルゴリズムなどを選択できる PDS IPLD Repo クローリング インデクサー DID PLC
Nostrとの違いは? ユーザー名とパスワードでログインできる 鍵の紛失に怯えなくて済む(ローテーション可) クライアント使用時に鍵の漏出に怯えなくて済む 過去の発言や相互接続はPDS(サーバー)が保証してくれる
通信量が爆発的に発生しない スパムなどへの対策が期待しやすい ❌モデレーションや凍結は発生する ❌PDSが単一障害点になる(not 多重化) PDS IPLD Repo 🔑 🔑 Repo データ is You
AT Protocol/Bskyの 仕組みと用語(8分)
名前解決 IPLD Repo PDS (個人データサーバー) 参照 保持 DID PLC (名前解決サーバー)
DID - Decentralized Identifier 分散識別子/分権識別子/非中央集権型識別子 W3Cの定義する識別子。 ユーザーは1つの不変なIDで表します。 did:plc:ma37ez4i3gmwkvwpytsqeepp
これはデータリポジトリ(その人のすべての履歴)と 紐づいている、所属によらない唯一無二の分散IDです。 これにより、どこに居てもその人であることが決まります。 (→フォロー関係などが持ち運べる) ※Nostrで言うところの秘密鍵に相当
Handle ATProtocolで、その人を表す名前(いわゆるID)に相当 @gpsnmeajp.bsky.social @gpsnmeajp.boobee.blue @gpsnmeajp.achetaria.com いつでも変えられ、いつでも変わりうる表示名です。
人間が取り扱うための名前です。 (ログインや名前解決にも使用する) 所属サーバーから借りる 自分のドメインの DNSレコードで証明する ※Nostrで言うところのNIP-05に相当
DID Document と plc.directory DIDはIDですが、それだけだと紐づけができません。 付随情報が記載されているのがDID Documentです。 ・その人を証明する公開鍵 ・その人はどのPDS(所属サーバー)に所属しているのか
・その人のHandle この情報はPDS(所属サーバー)にあっては意味がないため 独立して運営される名前解決サーバー*に置かれます。 現在運営されているのはplc.directory *DNSに相当 ※Nostrで言うところの/.well-known/nostr.jsonに相当 ※これにより鍵ローテーションが可能になります
DID Placeholder (did:plc) DIDは生成・管理の方法はたくさんありますが ATProtocolとして提唱しているのがdid:plcです。 データリポジトリの最初のハッシュと紐づいています。 鍵ローテーションが可能で、2種類の鍵
署名鍵と、回復鍵の2つでローテーションできます。 ブロックチェーンではなくシンプルで堅牢な サーバーで管理されます。(plc.directoryなど) IPLD Repo did:plc zkxpsaopwdwddwpo edwpqaidfeaws
データリポジトリ AT Protocolでは、ユーザーの投稿や操作の履歴は データリポジトリに保管されます 署名鍵で署名しなければ書き込めません。 すべての情報は連鎖的に記録され、検証可能です。
サーバー上に置かれますが、誰でも取り出し可能で、 ローカルに保存しておくことで引っ越し可能になります。 ルート コミット ルート コミット ルート コミット CID: コンテンツID タイムスタンプ マークル検索ツリー 署名 署名 署名 Repo 署名済み (個人)データ リポジトリ Re po Re po Re po Re po Re po Re po Re po Re po
PDS(個人データサーバー) クローリングインデクサー PDS : スモールワールド データの保管・署名・通信を担うサーバーです。 個人間のイベントを扱うためのシステムです。
ユーザーの所属・認証・フィード・APIの提供などを行います。 ここに署名鍵を預けます。(ユーザーは回復鍵を手元に持ちます) クローリングインデクサー : ビッグワールド 検索・統計・おすすめなどの大規模処理を担当します。 ユーザーは複数あるサービスを自由に選択できます。
その他IPFSなど Repo Repo PDS Repo PDS 投稿 フォロー Feed取得 XRPC
ATProtocol XRPC ATProtocol DID PLC 検索・おすすめ 統計 名前解決 IPLD Repo 🔑 IPLD Repo 🔑 IPLD Repo 🔑 回復鍵 回復鍵 回復鍵 🔑 🔑 🔑 🔑 署名鍵 🔑 🔑 🔑 🔑署名鍵 🔒 🔒 🔒 クローリング インデクサー クローリング インデクサー フォロー Feed取得 IPLD Repo Repo Repo Repo Repo Repo 名前解決やデータの流れ
現状と今後 (2分)
まだ未完成 連合はない 検索もない(もうすぐつく) Androidアプリもない(非公式はあるヨ) クローズドベータ
モデレーション機能もない 掲げている理想の機能の大半はない(が原型はある) 仕様変更はある 夢を語りながら楽しんでいきましょう とりあえず技術的に試したいだけの 場合は有志サーバーの boobee.blue おすすめ
もっと詳しく知りたい場合は AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~
Qiita https://qiita.com/gpsnmeajp/items/eb665d639f088b85454e The AT Protocol https://atproto.com/ Bluesky公式ブログ https://blueskyweb.xyz/ Github https://github.com/bluesky-social/atproto BlueSky Scrapbox https://scrapbox.io/Bluesky/ MatrixのBluesky Devルーム