つくる · フレームワーク

Fedify

ActivityPub サーバーを作るための TypeScript フレームワーク。連合まわりの面倒を引き受けてくれます。

MIT · TypeScript · fedify.dev · Repo

なぜ存在するか

現場の ActivityPub には、署名の仕組みが四つある——HTTP リクエスト用に二つ、ドキュメント用に二つ。JSON はサーバーごとに形を変え、配達は順不同で届き、仕様書のどこにも書かれていないサーバー固有の癖まである。fedify は、その面倒をまるごと引き受けて、扱いやすい既定値に変えてくれる。著者自身が書いたフィールドガイドが、その痛みの正体を教えてくれる: Why ActivityPub is hard

こんな人に

  • TypeScript か JavaScript で、新しく連合アプリをつくる人 — fedify の本領がいちばん出るところ。Ghost、Hollo、Hackers' Pub が本番で動かしている。
  • すでにあるアプリを、連合対応にしたい人 — Express、 Hono、Next.js、SvelteKit ほか、十以上のフレームワーク統合がある。
  • JSON-LD を手で書くのに疲れた人 — 型つきの語彙だけでも、採用する価値がある。
  • 他の言語で実装している人 — 出力が決定的だから、バイト単位で一致する模範解答になる。

いいところ

  • 連合の中核はまるごと、ひとつのオプションオブジェクト——Hollo ではおよそ二十数行で書かれている。
  • inbox は、ひとつのルーティングテーブル——ハンドラーが動く前に、署名はもう検証済み。
  • actor は、データベースの一件の参照——WebFinger、 NodeInfo、鍵の公開までついてくる。
  • フォロワー全員への配達は、呼び出しひとつ——fan-out、リトライ、順序保証も込み。
使い心地Hollo と Hackers' Pub の実例つきで

道のり

連合は段階を追って育つ。ひとつ確かめてから、次へ進める——見つかる → フォローされる → 話す → 聞く → やり取りする → 一人前になる。最初の三段階は薄く、四段階目に本当の仕事がある。

ロードマップ六つの段階とチェックポイント、そして道がどこまで続くか

心にとめておくこと

  • 永続化は、あなたの仕事 — fedify は何も保存しない。リモートの actor や投稿を写し取るのが、本当の仕事になる。
  • ポリシーも、あなたの仕事 — フォローを受け入れるか、モデレーション、削除をどう扱うか。
  • 鋭い落とし穴もある — 不変な語彙、Object の名前被り、クロスオリジンの再取得、二種類の鍵。
心にとめておくこと落とし穴の数々と、それぞれの出典

運用

  • web と worker、プロセスを分ける。
  • 安全装置は、外さない。
  • デバッグは CLI で、lint はエディタで。
運用運用と、デバッグと、どこから始めるか

あわせて読みたい