Skip to content

Note

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

FEP-2e40: ActivityPub用語彙拡張プロセス

概要

現在のActivityPub実装では、[AS-NS]で定義されたActivityStreams名前空間とカスタム拡張機能[Mastodon NS]が併用されています。私の知る限り、最適な実践方法は確立されておらず、新たな名前空間を追加するための正式な手順も存在しません。

本FEPでは以下を行います:

  • 特定されたベストプラクティスに基づく「FEP語彙」を作成する
  • 用語衝突のリスクなしにこのFEP語彙に新たなエントリを追加するプロセスを定義する
  • 用語を標準的に扱うための昇格プロセスを規定する
  • 専門的な語彙を作成するための手順を定める
  • [FEP-61CE]を例に、このプロセスの具体的な適用方法を示す

注記:FEPリポジトリ構造との互換性が失われたため撤回されました。詳細は当該Issueを参照してください。

背景および用語解説

JSON-LDコンテキストは[JSON-LD仕様書]の第3.1節「コンテキスト」(https://www.w3.org/TR/json-ld/#the-context)で導入されています。オブジェクトのコンテキストは、その@contextプロパティによって指定されます。

文脈とは、特定の文字列を同等のものと定義する機能と考えることができます。例えば「Note」「as:Note」および「https://www.w3.org/ns/activitystreams#Note」はすべて同一のものを指します。詳細は第3.2節「IRI」(https://www.w3.org/TR/json-ld/#iris)に記載されています。本仕様では前述の3つの文字列をすべて__用語(Term)__として扱います。ここで重視するのは機械可読性を備えた形式です。標準化されたフォーマットを採用することで、[Canon]や[LD-API]で説明されているような各種アルゴリズムを適用可能になります。

もう一つの重要な利点として、提供されたURLを通じて使用すべき用語を定義できる点が挙げられます:[https://www.w3.org/ns/activitystreams#Note]。このリンクをクリックすると、ノートタイプの定義を簡単に参照できます。この形式は__人間可読性__に優れています。

本仕様では、コンテキストと用語に関する詳細なドキュメントを組み合わせたものを__語彙(Vocabulary)__と呼びます。

要件

本仕様書中で使用される「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」といった表現は、[RFC-2119]の定義に従って解釈されるものとします。

FEP語彙の作成手順

ここではFEP語彙を作成・拡張する正式なプロセスを規定します。本節では、機械可読なJSON-LDコンテキストと人間可読なMarkdown形式の説明を含む2つのファイルの配置場所を明確にします。新たな用語を追加する方法については次節で詳述します。

本FEPでは/feps/assets/fep-2e40/namespace.jsonというファイルを以下の内容で作成します:

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    {
      "fep": "https://w3id.org/fep#"
    }
  ]
}

このコンテキストに関する説明は/feps/assets/fep-2e40/namespace.mdに記載されています。ActivityStreamsのコンテキストを含める目的は、多くのオブジェクトが以下のシンプルな形式を取る可能性を高めることにあります:

{
  "@context": "https://w3id.org/fep",
  ...
}

これはJSON-LDによる純粋なJSON表現に可能な限り近いものです。これら2つのファイルは__FEP語彙__を形成します。[W3-ID]へのプルリクエストを通じて、これらのファイルをhttps://w3id.org/fepで公開します。

FEP語彙への新規用語追加プロセス

[FEP-a3ed]に準拠した新たなFEPの作成者は、任意で「Create FEP Term: $TERM」というタイトルのセクションまたは複数のセクションを含めることができます。$TERMは以下の規則に従う必要があり、これは[DID-Reg]第3節「登録プロセス」(https://www.w3.org/TR/did-spec-registries/#the-registration-process)の2~5項に着想を得たものです。

  1. $TERMはその機能を明確に示すものでなければなりません。「myProperty」や「foo」といった汎用的な用語は避けてください。
  2. 著作権、商標、またはその他の知的財産権に関する懸念がある場合、その追加と使用はF/RANDライセンスに基づき権利者から書面による許可を得る必要があります。具体例としては、登録商標名を使用する用語や、著作物のタイトルをプロパティ名として使用する場合、あるいは特許技術を含む拡張機能がその利用に特許ライセンスを必要とするケースなどが挙げられます。
  3. いかなる追加も、他者に直接的な損害を与えるような不当な法的・セキュリティ上・倫理的・プライバシー関連の問題を引き起こしてはなりません。許容されない追加例として、人種差別的な表現を含むもの、少数派集団を迫害するために使用される技術、および同意を得ずに広範に行われる追跡行為などがあります。

さらに、作成者は以下の任意のアクションを実行できます:

  1. /feps/assets/fep-2e40/namespace.jsonに形式fep-xxxx-$TERMの新規用語を追加する
  2. 対応するMarkdown説明ファイルを作成する

以下に、コンテキストファイルの具体例を示します。元のfepコンテキストを含めることで、重複を最小限に抑えられます。同様に、ドキュメントファイルでは当該語彙の概要と、昇格または上書きされる追加用語のみを解説する必要があります。オリジナルのドキュメントについては、__FEP固有の用語__に関する記述を参照してください。

さらに、作成者は[W3-ID]の設定を自身の変更内容に合わせて調整できます。ドラフト段階で「MAY」とされていた義務は、FEPが最終決定されるまでに「MUST」に変更されます。

具体例:理髪師コミュニティ用語彙

Fediverseにおける理髪師コミュニティでは、自身が髭剃りを行うかどうかを示すマーカーが必要であると判断しました。そこで彼らはFEP-ba1bを制定し、shavesHimselfという用語を定義しました。この用語は標準語彙に昇格させないことが決定されました。代わりに、理髪師コミュニティはFEP-ba2bを作成し、その中で専門的な語彙体系fep-barberを導入しています。この語彙のコンテキストは以下の形式を取ります:

{
  "@context": [
    "https://www.w3id.org/fep",
    {
      "shavesHimself": "fep-ba1b-shavesHimself"
    }
  ]
}

標準FEP語彙を含めることで、標準語彙への変更が副次的なfep-barber語彙にも反映されることが保証されます。また、標準語彙の包含後にshavesHimselfの昇格が行われるため、標準語彙がこの用語を上書きすることが防止されます。

謝辞

SocialHubにおける_aschrijver_氏と_trwnh_氏のコメントは、このFEPで議論されている概念を明確にし、定式化する上で大いに役立ちました。

参考文献

著作権

本Fediverse拡張提案の著者は、法律で認められる範囲内において、本著作物に関するすべての著作権および関連または隣接する権利を放棄しています。