Fedify
ロードマップ
連合は、ひとつの機能ではない。段階を追って育つもので、それぞれの段階は独立して確かめられる。ここでは、その道のり全体を高いところから見わたす ——六つの段階、それぞれに fedify が引き受けること、自分で書くこと、そして実際に動かして確認できるチェックポイントがある。最初の三段階は薄く、四段階目に、アプリケーションとしての本当の仕事がある。
1. 見つかる
web フレームワークに createFederation(...) をひとつ差し込み、ユーザーテーブルから Person を返す actor ディスパッチャーと、保存済みの JWK を返す鍵ペアディスパッチャーを用意する。
- fedify が引き受けること — WebFinger、コンテントネゴシエーション、 actor の JSON-LD(
@context、publicKey、assertionMethod)、 NodeInfo のルーティング、RSA と Ed25519 両方の鍵生成。 - 自分で書くこと — データベースの参照と、ユーザーごとに二つの JWK を保管する場所。
- チェックポイント — Mastodon から
@you@your.domainを検索して、プロフィールが表示される。fedify lookup @you@your.domainで actor が見える。 - Docs: tutorial/basics · manual/actor
2. フォローされる
inbox のリスナー——はじめての .on(Follow, …)。
- fedify が引き受けること — ハンドラーが動く前の署名検証、型つきディスパッチ、
Acceptへの署名と配達。 - 自分で書くこと — フォロワーの永続化、
Acceptの送信、そして自動承認か承認待ちにするかのポリシー判断(manuallyApprovesFollowersはただのラベルで、決めるのは自分のコード)。 - チェックポイント — Mastodon アカウントから自分をフォローすると、「リクエスト中」から「フォロー中」に変わり、followers コレクションが 1 件になる。
- Docs: manual/inbox · manual/collections
3. 話す
はじめての送信、Create(Note)。
- fedify が引き受けること —
sendActivityの呼び出しひとつでフォロワー全員への fan-out、shared-inbox の重複排除、backoff つきのリトライ、配達順序(orderingKey)、outbox コレクションの体裁。 - 自分で書くこと — 投稿のモデル、その HTML、メンションとハッシュタグを
tagとして表現すること。 - チェックポイント — 投稿すると、フォロワーの Mastodon タイムラインに届く。試行錯誤のあいだは、
fedify inboxが使い捨てのフォロワーを用意してくれる。 - Docs: manual/send · tutorial/microblog
4. 聞く——ここが本丸
ネットワークから届く Create を受け取り、写し取る——リモートの actor や投稿をデータベースの行として、タイムラインや通知として。
- fedify が引き受けること — どんな形の JSON からも型つきオブジェクトを取り出すこと、ドキュメントローダー、埋め込みオブジェクトのクロスオリジン検証。
- 自分で書くこと — 写し取る仕組みそのもの:
persistActor、persistPost、返信のスレッド化、タイムラインへの fan-in、通知。これは意図的に fedify の仕事ではなく、読んだどのアプリでも連合コードのいちばん大きな塊になっている。時間の多くは、ここに割くことになる。 - チェックポイント — Mastodon からの返信が自分のアプリに現れ、正しい投稿の下にスレッドとしてつながり、正しいユーザーに通知が届く。
- Docs: manual/vocab——自分の設計にとりかかる前に、Hackers' Pub の
persistPostを読んでおくといい。
5. やり取りする
会話としての動詞を、両方向に——Like、Announce、Update、Delete、 Undo。
- fedify が引き受けること — 語彙と配達のすべて。受信側の冪等性キャッシュも。
- 自分で書くこと — upsert で安全な状態遷移、取り消し処理(
Undo(Like)は本当に like を取り除く)、判断をともなう削除—— モデレーションの証拠を消してしまうDelete(Actor)は、既定値ではなく決断であるべき。 - チェックポイント — like と boost が両方向で往復する。投稿を編集すると
Updateが Mastodon 側にも反映され、削除すると向こうでも消える。 - Docs: manual/pragmatics—— それぞれの動詞が、Mastodon 上で実際どう表示されるか。
6. 一人前になる
「連合できる」から、「ちゃんと動く」へ。
- fedify が引き受けること — 差し替え可能なメッセージキュー、リトライポリシー、サーキットブレーカー、恒久的な失敗の報告、 authorized fetch と instance actor、OpenTelemetry トレーシング。
- 自分で書くこと — worker プロセスの分離(
manuallyStartQueueとstartQueue)、失敗の後始末(404 なら剪定、410 Goneならカスケード削除)、モデレーションとブロックのチェック、監視ダッシュボード。 - チェックポイント — manual/deploy の 公開前チェックリスト を、上から下まで。
- Docs: manual/mq · manual/access-control · manual/opentelemetry
見晴らし——道はどこまで続くか
ここまでは、すべてマイクロブログの話。同じ六段階が、fedify の語彙とエコシステムの知見を携えたまま、この先にも伸びていく:
- 長文の記事 — 多言語コンテンツと markdown の
Sourceを持つArticle。Hackers' Pub は、ブログ記事をまるごと連合させている。 - 投票 —
Question、返信としての投票、締め切り時のUpdate。 - 絵文字リアクション —
EmojiReactとカスタムEmoji、Misskey 系譜の作法。Hollo は両方を話せる。 - 引用投稿 — インタラクションポリシーを伴う、FEP-044f の
QuoteRequest/QuoteAuthorization——まだ最前線。 心にとめておくこと を参照。 - アカウント移行 —
Move、フォロワーの転送、エイリアス。参照した二つのコードベースはどちらも対応済み。 - 通報 — サーバー間の
Flag。Mastodon が期待する挙動も織り込み済み。 - リレー — 購読して、提供する。CLI の
fedify relayと manual/relay。 - どんなランタイムでも — Deno、Node、Bun。十以上の web フレームワーク。サーバーレスまで届く KV とキューのアダプター。
そして、この見晴らしの正直な縁も伝えておく——永続化、タイムライン、通知、メディアストレージ、クライアントアプリとその API は、決して fedify の仕事にならない。それは、あなたのアプリケーションの仕事。その境界線は、 心にとめておくこと にきっちり引かれている。
道すがらの FEP
FEP——Fediverse Enhancement Proposals——は、フェディバースが実際どう動いているかを共有するノートで、仕様書より一段くだけている。fedify はそのかなりの数を実装していて、正式な一覧は FEDERATION.md にある。この道のりで実際に出会うのは、次のもの:
- 段階 1、見つかる — FEP-521a (actor が公開鍵をどう公表するか)と FEP-8b32(Object Integrity Proofs—— Ed25519 によるドキュメント署名)が、fedify が二つの鍵ペアを持たせる理由。FEP-f1d5 は NodeInfo。
- 段階 2、フォローされる — FEP-8fcf は follower コレクションをサーバー間で同期させ、 FEP-5feb は、まっとうなサーバーがユーザーを検索インデックスに載せる前に確認する、同意のフラグ。
- 段階 4、聞く — FEP-fe34 は、 心にとめておくこと で出会ったクロスオリジン再取得の既定挙動を支える、origin ベースのセキュリティモデル。
- 見晴らしの先 — 絵文字リアクションは FEP-c0e0。引用投稿は FEP-e232(オブジェクトリンク)と FEP-044f(同意を尊重する引用)の組み合わせ。リレーは FEP-ae0c を話す。アカウントのエクスポートは FEP-9091 に乗る。
- そして、あなたのための FEP — FEP-67ff が言うことは、ただひとつ:連合の挙動を
FEDERATION.mdに書き残すこと。fedify 自身も一つ持っている。自分のサーバーが一人前になったら、あなたも一つ持つといい。