Note
このドキュメントは2026-02-27 03:32にPLaMo Translation Modelを使用して自動翻訳されました。
FEP-eb22: NodeInfoによるサポート対象ActivityStreamsタイプの定義
概要
サーバーはAPIでサポートする機能(投票作成や投稿ブーストなど)を明示的に宣言できます。クライアントはこの情報を参照することで、特定の機能をサポートしていないサーバーを識別し、UI上でその機能を表示しないように制御することが可能です。
背景
fediverseが拡大するにつれ、多種多様なサーバーとクライアントが登場することが予想されます。これらすべてが、Mastodonなどの主要なクライアントでサポートされている機能と完全に一致するとは限りません。多様なユーザー体験を提供するため、クライアントとサーバー間で、どの機能をクライアントのUIに表示すべきかを適切に伝達する仕組みが必要です。
例えば、一部のサービスでは公開いいねや投票機能を実装していない場合があります。また、投稿ブースト機能をサポートしていないケースも考えられます。このような場合、ブーストアイコンがクリック時にエラーメッセージを表示すると、利用者にとって混乱を招く原因となります。代わりに、クライアント側でブースト機能の有無を判定し、該当サーバーに接続時にはそのアイコンを表示しないようにする必要があります。
要件
本仕様書における「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」といった用語は、RFC 2119で定義された解釈に従うものとします。
提案内容
NodeInfoにサーバーがサポートするActivityStreamsのタイプとプロパティを明示的に記述します。この情報はActivityPubクライアントだけでなく、Mastodon APIクライアントにおいても利用可能です。既存機能を表現するために新たなキーを考案するのではなく、fediverse標準として既に確立されているActivityStreamsタイプを採用します。
NodeInfoに新たなトップレベルフィールド「types」を追加し、以下の3つの任意項目を設けます:
activities: サーバーが広範にサポートするアクティビティの種類objects: 各サポート対象アクティビティで使用されるオブジェクトの種類properties: 各アクティビティまたはオブジェクトに対して許可されるプロパティ
NodeInfoにタイプ情報が存在しない場合、クライアントはデフォルトで全てのタイプをサポートしているとみなします(現行のほとんどのクライアントと同様の動作)。
特定のアクティビティに対するオブジェクト情報がない場合、クライアントは全ての一般的なオブジェクトに対応していると仮定します。限定的な数のオブジェクトのみが記載されている場合は、サーバーがそのオブジェクトのみをサポートしていると判断します。
オブジェクトに対してプロパティ情報がない場合、クライアントは全ての標準的なプロパティに対応しているとみなします。限られた数のプロパティしか記載されていない場合は、そのプロパティのみをサポートしていると解釈します。
使用例
以下に示すのは、ほとんどのサーバーが実装すべき機能を簡略化したサンプルです。主要なサーバーではさらに多くのアクティビティタイプやオブジェクトをサポートする場合がありますが、ここでは可読性を考慮し項目を絞っています。その他の一般的なアクティビティとしては、Follow、Undo、Accept、Blockなどがあり、これらはActivity Vocabulary仕様書で定義されています。
基本的なソーシャル機能と書籍レビュー(Review)への対応
この例では、BookWyrmが書籍レビューに使用するReviewオブジェクトを追加しています。Reviewに関するプロパティのみが指定されているため、クライアントは他の一般的なアクティビティやオブジェクト、およびそれらのプロパティがすべてサポートされていると判断できます。
{
"types": {
"activities": [
"Create",
"Like",
"Announce",
"Question",
"Move",
"Follow"
],
"objects": [
"Note",
"Article",
"Image",
"Review"
],
"properties": {
"Review": [ "title", "body", "rating", "inReplyToBook" ]
}
}
}
基本的なソーシャル機能はサポートするが、投票機能(Question)は非対応の場合
この例では、Questionタイプと投票に使用されるoneOfプロパティを省略しています。
{
"types": {
"activities": [
"Create",
"Like",
"Announce"
],
"objects": [
"Note",
"Article",
"Image"
],
"properties": {
"Note": [ "summary", "content", "published", "inReplyTo" ],
"Article": [ "name", "content", "published" ]
}
}
}
基本的なソーシャル機能と投票機能はサポートするが、タイトル付き投稿(name)には非対応の場合
この例ではArticleオブジェクトに対して「内容」と「公開日」プロパティのみを指定しており、長文記事についてはタイトル入力を要求しないようにします。
{
"types": {
"activities": [
"Create",
"Like",
"Announce",
"Question",
],
"objects": [
"Note",
"Article",
"Image"
],
"properties": {
"Question": [ "oneOf" ],
"Note": [ "summary", "content", "published", "inReplyTo" ],
"Article": [ "content", "published" ]
}
}
}
基本的なソーシャル機能はサポートするが、投稿ブースト機能(Announce)には非対応の場合
この例では最小限のタイプのみを列挙し、オブジェクトやプロパティの明示的なリストを省略しています。クライアントは、これらのタイプに対して一般的なプロパティ(Note、Articleなど)がサポートされていると仮定する必要があります。
{
"types": {
"activities": [
"Create",
"Like",
"Question",
"Move"
]
}
}
基本的なソーシャル機能とアカウント移行機能(Move)への対応
この例では、アカウント移行に使用されるobjectフィールドとtargetフィールドを記載しています。これらはMoveアクティビティと共に使用されます。
{
"types": {
"activities": [
"Create",
"Like",
"Announce",
"Question",
"Move"
],
"properties": {
"Move": [ "object", "target" ]
}
}
}
関連提案事項
サーバーのサポート機能を記述する方法については、これまでにもいくつかの試みがなされています:
- FEP-9fde: サーバーがサポートする操作を公開するための仕組み: この拡張機能もNodeInfoを使用しますが、逆ドメイン名識別子とバージョン情報を用いて、各サーバーがサポートしている具体的な操作を記述します。これは特定のクライアントが初めて実装した機能と密接に関連付けられており、より一般的なアクティビティタイプとは直接的な関係を持ちません。
- FEP-6481: NodeInfoを用いたActivityPub拡張機能の指定方法: この仕様では、一般的なActivityStreamsタイプに対する「拡張機能」を列挙します。例えばBookWyrmの場合、書籍レビュー用の
Reviewタイプをこのような形式で文書化できます。 - Micropub: サポート対象語彙のクエリ: IndieWebコミュニティが提供するMicropub APIは、ウェブサイトへの投稿インターフェースです。このMicropub拡張機能では、サーバーがサポートする投稿タイプの一覧を返すことができます。
参考文献
著作権情報
本Fediverse Enhancement Proposalの著者は、法律で認められる範囲内において、当該著作物に関するすべての著作権および関連権利を放棄し、パブリックドメインに寄贈します。