Skip to content

Note

このドキュメントは2026-02-27 03:31PLaMo Translation Modelを使用して自動翻訳されました。

FEP-2931: コレクションを用いたコンテキストの表現方法

概要

FEP-7888では、contextプロパティの使用目的と歴史的背景に基づき、その定義を明確にする試みが行われている。contextは主に「文脈」によって関連付けられたオブジェクトを論理的にグループ化するために用いられ、言い換えれば、あるオブジェクトが「別のオブジェクトとの関係において作成された」ことを表現するためのものである。このFEPは、FEP-7888への対応として、また完全な会話履歴のフェデレーションを実現するため、様々なソフトウェアが採用しているアプローチについて記述している。具体的には、contextを直接「標準的な文脈コレクション」内に含まれると認められたオブジェクト群として表現する方法である。本文書ではこの手法、その適用方法、およびいくつかの課題点について解説する。

標準的文脈コレクションの概念

FEP-7888では「権威ある文脈におけるオブジェクトの標準コレクション」という概念を定義している。これは、contextプロパティが特定のオブジェクトを参照する場合、解決されたオブジェクトのtype属性がその「標準的なコレクション」を表す関係を示すことができるというものである。本FEPにおいて、この「標準的なコレクション」とはコレクションそのものを指す。これにより、以下の規範的な記述が可能となる:

  • contextプロパティがCollectionまたはOrderedCollection型のオブジェクトを参照可能な場合、その標準的文脈コレクションはidによって識別される。

文脈コレクションの具体例表現

(本セクションは非規範的なものである)

{
    "@context": "https://www.w3.org/ns/activitystreams",
    "id": "https://posts.example/1",
    "type": "Note",
    "context": {
        "id": "https://conversation.example",
        "type": "OrderedCollection",
        "items": [
            "https://posts.example/1",
            "https://posts.example/2",
            "https://posts.example/5"
        ]
    }
}

文脈コレクションの処理方法

(本セクションは非規範的なものである)

コレクションによって表現されるコンテキストは、items要素(またはJSON-LD仕様で定義されている場合はorderedItems)を反復処理することで処理可能である。これらの項目は論理的にグループ化されているものとみなしてよい。

文脈コレクションの生成および管理方法

(本セクションは非規範的なものである)

自身の文脈に含まれることを主張するオブジェクトを認識・発見するためのプロトコルについては、本FEPの対象外とする。ただし、自身が言及されたコンテキストを持つオブジェクトを発見した場合、そのオブジェクトを直接コレクションに追加することが可能である。

課題点

(本セクションは非規範的なものである)

C2Sアウトボックス配信ではコレクションを適切に辿ることができない

Collection型を使用することは、ActivityPubで定義されている特定の仕様挙動を強制的に適用することになる。具体的には、文脈コレクションを使用している場合、そのコレクションをフォロー可能にするためには、少なくともフォロー活動に対してAccept Follow応答を返すことができるinboxを付与することでActivtyPubアクターとして構成する必要がある。しかし現在、ActivityPubクライアント-サーバーAPIで定義されているアウトボックス配信アルゴリズムには問題が存在しており、このアルゴリズムは必然的にコレクション自体だけでなく、そのすべての項目を反復処理しようとする。この挙動は、toccbtobcc、またはaudienceといったアドレス指定プロパティを含むペイロードを受け取ったActivityPubアウトボックスにおいて発生する。文脈コレクションが同時にAPアクターとして機能する場合、このコレクションへのアドレス指定は配信を行うサーバーにとって意図せず多大な負荷をかける可能性がある。これは、そのサーバーがコレクション内の潜在的に無制限な数の項目を反復処理することを要求されるためである。

例えば、以下のアクティビティを考えてみよう:

{
    "@context": "https://www.w3.org/ns/activitystreams",
    "id": "https://activity.example",
    "type": "Announce",
    "object": "https://posts.example/7",
    "to": "https://conversation.example"
}

この場合の意図は、https://conversation.exampleinboxにのみPOSTを送信し(これにより文脈コレクションhttps://posts.example/7の存在を通知する)ことであるが、本FEP執筆時点で定義されているアウトボックス配信アルゴリズムでは、代わりに以下のオブジェクトに存在するすべてのinboxプロパティに対して配信を試みることになる:

  • https://conversation.example
  • https://posts.example/1
  • https://posts.example/2
  • https://posts.example/5

この「コレクション展開」挙動を回避する手段は存在しない。したがって、文脈コレクションをフォローするためには単純なActivityPub手法を用いることはできない。この問題に対する潜在的な解決策については、FEP-efda: フォロー可能なオブジェクトを参照されたい。そこでは、FollowアクティビティをattributedTo属性に宛て、attributedTo.inboxへ送信する方法が提案されている。これは直接idにアドレス指定してid.inboxへ配信する従来の方法とは異なる。

この問題は、ActivityPubの「アウトボックスへのPOST」方式を採用せず、代わりにLinked Data Notificationsの「インボックスへのPOST」方式を用いてFollowアクティビティを直接配信する場合には発生しない。

オブジェクトとオブジェクト群に関する意味論的混乱

「会話」のような明示的な概念をモデル化する際、「会話は投稿のコレクションである」という表現と、「会話には投稿のコレクションが存在する」という表現の間には明確な違いがある。前者の関係(「~である」)は曖昧であるか、他の関係性を適切に宣言することを妨げる可能性がある。一方、後者の関係(「~を有する」)は、会話そのものが持つプロパティを、その集合としての投稿群とは異なる形で定義することを可能にする。

実装状況

  • NodeBB
  • Discourse
  • WordPress
  • Frequency

参考文献

著作権

CC0 1.0 Universal(パブリックドメイン献呈)

法律で許容される範囲内において、本Fediverse Enhancement Proposalの著者らは、この著作物に関するすべての著作権および関連する権利を放棄している。