Note
このドキュメントは2026-02-27 03:34にPLaMo Translation Modelを使用して自動翻訳されました。
FEP-efda: フォロー可能なオブジェクトについて
概要
ActivityStreams語彙では「Follow」アクティビティが定義されており、ActivityPubではこの「followers」コレクションを操作する際の副作用仕様が規定されていますが、具体的にどのようにして何かをフォローすべきかという完全なアルゴリズムは定められていません。本FEPでは、どの種類のオブジェクトをフォロー対象として扱えるべきかに関する指針を提供することを目的としています:
- 対象となるオブジェクトには必ず
followersコレクションが存在すること - もしそのオブジェクトに
inboxがない場合、attributedTo属性を遡って検索し、inboxを持つリソースが見つかるまで再帰的に探索すること。ただし、この再帰の深さは最大1回とすることが望ましい
その後、当該objectに対してFollowアクティビティを構築し、それを発見したinboxへ送信します。Followアクティビティの具体的な構造要件については本FEPの対象外とします。
要求事項
オブジェクトをフォローするためには、Followアクティビティを使用します。このFollowアクティビティを適切に利用するには、以下の点を明確にする必要があります:
1) どのような種類のオブジェクトがフォロー対象となり得るか?
2) objectに対するFollowをどこに送信すべきか?
現在のfediverseにおけるソフトウェア慣行では、フォロー可能な対象に制限が設けられています。例えばMastodonの場合、現在は内部概念として「アカウント」にマッピング可能なアクターのみがフォロー可能であり、これらの「アカウント」はAS2-Vocabで定義されている5つの「actorタイプ」のいずれかに限定されています:Person、Group、Organization、Application、Service。
このため、このような概念的制限を持たない他のソフトウェアでは、自らのアクターをこの5種類のいずれかとして明示的に宣言する必要があります。さもなければ、Mastodonユーザーはそのアクターをフォローできなくなります。ActivityPubでは「users」と「actors」間の明確なマッピングは規定されていないとされていますが、Mastodonにおける「actor」を「user」として解釈することは、事実上、厳密なサブセット以外のリソースをフォローすることを禁止していると言えます。
以上を踏まえ、Mastodonの要件を以下のように表現できます:
- アクターは必ず
type属性としてPerson、Group、Organization、Application、またはServiceのいずれかを持つこと - Followが送信される
inboxを必ず備えていること
提案する修正要求事項とアルゴリズムは以下の通りです:
- オブジェクトには
followersコレクションが存在することが望ましい(存在しない場合、それがフォロー可能かどうかは不明となります) - もしオブジェクトに
inboxがない場合、attributedTo属性を遡って検索し、inboxを持つリソースが見つかるまで再帰的に探索すること。ただし、この再帰の深さは最大1回とすること
アルゴリズム
与えられたオブジェクトOと再帰制限Lに対して、そのフォロー処理を行う一般的なアルゴリズムは以下のように表現できます:
入力: - O(Object): フォロー可能な可能性のあるオブジェクト - L(整数): 再帰の上限値
出力: - エラー OBJECT_HAS_UNKNOWN_FOLLOWERS_COLLECTION - エラー MAX_RECURSION_LIMIT - 成功
(1) 変数INBOXを初期化する
(2) O.followersが存在しない場合、オプションとしてエラー OBJECT_HAS_UNKNOWN_FOLLOWERS_COLLECTIONを返す
(3) O.inboxが存在する場合、その参照先IRIをINBOXに設定する
(4) INBOXが未設定の場合、変数Rを初期化し、その初期値をOとする
(5) INBOXが未設定の間:
(5.1) L > 0であることを確認する。偽の場合はエラー MAX_RECURSION_LIMITを返す
(5.2) R.attributedToを参照し、この参照先リソースに変数Rを設定する
(5.3) R.inboxが存在する場合、その参照先IRIをINBOXに設定する
(5.4) 変数Lの値を L - 1 に更新する
(6) ドキュメントACTIVITYを初期化:
(6.1) ...そのactorは自身とする
(6.2) ...そのtypeはFollowとする
(6.3) ...そのobjectはOとする
(7) INBOXを宛先とし、ボディにACTIVITYを含むHTTP POSTリクエストを送信する
ACTIVITYの具体的な要件についてはプロトコルレベルで定義可能ですが、本FEPではこの正確なプロトコルやその詳細な仕様は対象外とします。本FEPの範囲は、フォロー可能なオブジェクトの種類と、Followアクティビティをどこに送信すべきかを決定することに限定されます。
参考文献
- James M Snell, Evan Prodromou, Activity Vocabulary, 2017
- Christine Lemmer Webber, Jessica Tallon, ActivityPub, 2018
- trwnh, Followアクティビティに関する未解決事項, 2019
著作権
CC0 1.0 Universal(パブリックドメイン献呈)
法律で許容される範囲内において、本Fediverse Enhancement Proposalの著者らは、この著作物に関するすべての著作権および関連する権利を放棄しています。