---
title: なんとなく理解するActivity Pub - インスタンスを添えて-
tags:  #jmlt  
author: [こばさん](https://www.docswell.com/user/noko1024)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/87DYLQX57G.jpg?width=480
description: なんとなく理解するActivity Pub - インスタンスを添えて- by こばさん
published: March 30, 24
canonical: https://www.docswell.com/s/noko1024/Z8GXG9-2024-03-30-160452
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/87DYLQX57G.jpg)

なんとなく理解するActivity Pub
- インスタンスを添えてJMLT vol.7 in Sapporo
Yuhei Kobayashi
@ynstg


# Page. 2

![Page Image](https://bcdn.docswell.com/page/VJP62LPDE8.jpg)

$ whois noko1024.net
-
小林 侑平 (@ynstg / @noko1024)
釧路工業高等専門学校 創造工学科 電気工学分野 4(2)年
道内の勉強会やイベントに出没
株式会社TAIAN でアルバイト中(バックエンド)
今日は分散型SNSのお話をします


# Page. 3

![Page Image](https://bcdn.docswell.com/page/2EV3DQ2G7Q.jpg)

実はSNSを運営しています
おやすみすきー ( oyasumi.ski )
-
100アカウント (DAU 10アカウント)
約100サーバーと連合中
In/Out : 10万/1万くらい (1日あたり)


# Page. 4

![Page Image](https://bcdn.docswell.com/page/57G3YWLDJL.jpg)

ことのはじまり


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4EQ5M3YXJP.jpg)



# Page. 6

![Page Image](https://bcdn.docswell.com/page/KJ49V1W271.jpg)

障害対応の様子


# Page. 7

![Page Image](https://bcdn.docswell.com/page/LE1K3GYKJG.jpg)

ちゃんと分散型SNSを学ぼう


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GEWDPKGPJ2.jpg)

分散型SNSって知ってますか？
異なる運営者に分権化・分散化されているSNSのこと
複数のソーシャル・ウェブサイトの連合として構成されており、
各サイトのユーザーは連合内の他のサイトのユーザーと通信をすることができる
-
Mastodon
Misskey
Bluesky など
↔ 中央集権型SNS (Facebook,Twitter,Instagram…)


# Page. 9

![Page Image](https://bcdn.docswell.com/page/47ZGKZL6E3.jpg)

サーバー間の相互連携 (連合) のおはなし
MastodonやMisskeyで採用されているプロトコルがActivity Pub
W3Cが策定
1.
2.
サーバー⇔サーバー間の連合プロトコル
クライアント⇔サーバー間のプロトコル
この2つが定義されている


# Page. 10

![Page Image](https://bcdn.docswell.com/page/YJ6YQZWL7V.jpg)

Activity Pub の概要


# Page. 11

![Page Image](https://bcdn.docswell.com/page/GJ5GRWMMJ4.jpg)

Activity Pub の重要なキーワード
✱
✱
✱
Actor
Object
Activity
Actor が Object を Activity する


# Page. 12

![Page Image](https://bcdn.docswell.com/page/9E2YDQ9RER.jpg)

ActorのInbox / Outbox
全てのユーザーアカウントはActorと表現される
全てのActorは次のものをもつ
✱
✱
inbox: 世界中からメッセージを受け取る場所
outbox: 他へメッセージを送る場所
実際にはただのAPIのエンドポイント


# Page. 13

![Page Image](https://bcdn.docswell.com/page/D7YG2W457M.jpg)

つまり...
-
アリスはボブにメッセージを送るためにボブのinbox に POST できる
(サーバからサーバ →連合のみ)
-
アリスはアリスの最新のメッセージを読むためにアリスのinbox を GET できる
(クライアントからサーバ)
-
アリスは世界中にメッセージを送るためにアリスのoutbox に POST できる
(クライアントからサーバ)
-
アリスはボブ(あるいは少なくともアリスが読むことを許されている人)がどんなメッセージを
書いたかを見るためにその人のoutbox を GET できる
(クライアントからサーバ or サーバからサーバ)


# Page. 14

![Page Image](https://bcdn.docswell.com/page/VENG89Y4J8.jpg)

メッセージ...?
-
実際はObject
→ Activity Streams で定義された JSON-LD (JSON for Linked Data)
-
ActivityもObjectClassの拡張として定義されている
Alice が Note を Createする
Bob が AliceのNote を Like する


# Page. 15

![Page Image](https://bcdn.docswell.com/page/Y79WK2P473.jpg)

改めて Activity Pubの概要


# Page. 16

![Page Image](https://bcdn.docswell.com/page/G78NR5DVJD.jpg)

なるほど
ちょっと立ち戻って


# Page. 17

![Page Image](https://bcdn.docswell.com/page/L7LPKYMRJR.jpg)

これって何が起きていた?


# Page. 18

![Page Image](https://bcdn.docswell.com/page/4EM42NYPJW.jpg)



# Page. 19

![Page Image](https://bcdn.docswell.com/page/PERWMD9YJ9.jpg)

inbox queue が詰まる
inbox , outboxに到着したオブジェクトたちはキューに追加され、
非同期で処理されている
→他のサーバーから到着したオブジェクトを自分のタイムラインに反映するのが遅れ
ていた
とりあえず 他のサーバーに迷惑をかけていなかったので一安心
ちなみに...
misskeyだと Bull
mastodon だと Sidekiq が担当


# Page. 20

![Page Image](https://bcdn.docswell.com/page/P7XPV1Q4JX.jpg)

ちょっと付録
『Actor が Object を Activity する』
どうやって真正性を証明しよう？
→ HTTP Signatures を付けて署名しています


