Note
このドキュメントは2026/02/27にTranslateGemma 12bを使用して自動翻訳されました。
FEP-1b12: グループ連携
概要
インターネットフォーラムは、最も古い形のソーシャルメディアの1つです。このドキュメントでは、Groupアクターを使用して、既存のActivitypubプラットフォームでどのように実装されているかを説明します。また、特定のオブジェクトがどのグループに属するかを示すための新しいプロパティを紹介します。
履歴
Friendicaは、バージョン2019.03で連携フォーラムをリリースしました。
Lemmyは、v0.8.0 (2020年10月)で、最初のパブリックベータ版の連携グループを公開しました。
[FEP-400e]は、パブリックに追記可能なコレクションを紹介しており、これを使用してフォーラムを実装することもできます。しかし、これらの実装は、ここで説明されている実装と互換性がありません。
必須事項
この仕様におけるキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、および「OPTIONAL」は、[RFC-2119]で説明されているように解釈されます。
Groupアクター
連携フォーラムは、[Activity Vocabulary]で指定されているGroupアクターによって表現されます。このアクターは、直接人間によって制御されるわけではありませんが、主要な機能を完全に自動化して実行でき、実質的にボットとして機能します。これは、他のPersonアクターと同様の一般的なプロパティを持っています。
グループのフォロー
パブリックグループは、標準のFollow-Acceptワークフローをサポートする必要があります。これにより、同じ語彙を使用してPersonのフォローをサポートする既存の実装との互換性が確保されます。有効なFollowアクティビティを受け取ると、グループは自動的にAccept/Followで応答し、送信者をフォロワーコレクションに追加する必要があります。それに対応して、他のアクターは、Undo/Followアクティビティを送信することで、グループのフォローを解除できます。
Audienceプロパティ
フォーラムでコンテンツを表示するには、コンテンツがどの特定のフォーラムに属するかを知る必要があります。これにより、ユーザーはスレッドからフォーラムのメインページに移動したり、説明やモデレーターなどのメタデータを表示したりできます。現在の実装では、特定の活動またはオブジェクトがどのフォーラムに属するかを簡単に判断する方法はありません。
現在、オブジェクトまたはアクティビティがどのグループに属するかを指定するためのさまざまなアプローチがあります。Lemmy、Friendica、およびLotideは、グループIDをtoフィールドに配置しています。PeertubeはattributedToを使用しています。どちらのプロパティにも、いくつかのプラットフォームが他の目的で使用しているという問題があり、配列として表現されています。したがって、受信したオブジェクトからグループを取得するには、実装はこれらのプロパティをループ処理し、各URLを解決し、Groupに解決するURLが見つかるまで処理する必要があります。これは非常に非効率的です。
このプロセスを簡素化するために、グループ識別子をaudienceプロパティに指定することを提案します。このプロパティはActivitystreamsの一部ですが、まだ広く使用されていません。これにより、拡張は不要であり、既存の実装にも問題を引き起こしません。さらに、プラットフォームは、下位互換性のために、既存の形式で引き続きグループ識別子を連携させることができます。
スレッドとコメント
各Groupアクターは、単一のフォーラムを表します。フォーラムには、ユーザーが投稿した多数のスレッドが含まれており、実装によって異なるオブジェクトで表現される場合があります。スレッドオブジェクトは、スレッドのタイトルを表すnameプロパティを持つ必要があります。
スレッドの例:
{
"type": "Page",
"id": "https://sally.example.org/p/1",
"attributedTo": "https://sally.example.org",
"name": "Hello forum!",
"audience": "https://example.org/my-forum"
}
スレッドには、通常Noteとして表現される返信が含まれる場合があります。これらは、属するスレッド、またはネストされた返信の場合は親返信を参照するinReplyToプロパティを持つ必要があります。
返信の例:
{
"type": "Note",
"id": "https://sally.example.org/p/3",
"attributedTo": "https://sally.example.org",
"inReplyTo": "https://sally.example.org/p/1",
"content": "My first comment",
"audience": "https://example.org/my-forum"
}
inReplyToとaudienceのプロパティを使用すると、返信からスレッドやフォーラムに移動できます。グループからスレッドやコメントに移動するには、グループがすべてのスレッドを含むrepliesコレクションを持つ場合があります。各スレッドは、スレッドに対応するすべてのトップレベルのコメントをリストするrepliesコレクションを持つ場合があります。
Announceアクティビティ
グループの主なタスクは、コンテンツをフォロワー間で配布することです。
グループが受信トレイにアクティビティを受け取ると、ドメインやユーザーのブロックの確認など、いくつかの自動検証を実行する必要があります。グループは、フォロワーからのコンテンツのみを受け入れるなど、追加の検証を要求する場合があります。または、グループモデレーターによる手動承認が必要な場合もあります。アクティビティがこれらのチェックに失敗した場合、グループは送信者にRejectアクティビティで応答する場合があります。
受信したアクティビティが有効と判断された場合、グループはアクティビティをAnnounceアクティビティでラップし、元の活動をオブジェクトとして含める必要があります。ラップされたアクティビティは、変更または削除を行わずに、完全に元の状態を維持する必要があります。これにより、転送されたアクティビティを[Object Integrity Proofs]で説明されている方法で検証できます。
実装は、このドキュメントに基づいており、Lemmy、Friendica、Hubzilla、Lotide、およびPeertubeの既存のグループ実装を参考にしています。これらの実装は、すでに連携を成功させて、本番環境で動作しています。
audienceフィールドは、まだ使用されていない例外です。Lemmyは、バージョン0.17.0でこのサポートを追加する予定です。
参照
- [FEP-400e] Gregory Klyushnikov, FEP-400e: Publicly-appendable ActivityPub collections
- [RFC-2119] S. Bradner, Key words for use in RFCs to Indicate Requirement Levels
- [Activity Vocabulary], James M Snell, Evan Prodromou, Activity Vocabulary
- [Object Integrity Proofs] silverpill, FEP-8b32: Object Integrity Proofs
著作権
CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
可能な限り、このFediverse Enhancement Proposalの著者は、この作品に関するすべての著作権および関連する権利を放棄しました。