Note
このドキュメントは2026-02-27 03:13にPLaMo Translation Modelを使用して自動翻訳されました。
FEP-82f6: アクターステータス機能
概要
本提案では、ActivityPubプロトコルを拡張し、アクターが短いステータステキストを公開できるようにする仕様について記述します。これにはオプションとして、有効期限設定、リンク添付、および履歴管理の機能が含まれます。
一部の中央集権型コミュニケーションサービスでは、ユーザーがアカウントにステータスを設定する機能を提供しています。このステータスは通常プロフィール画面に表示され、UIの他の箇所では名前の横に表示されることがあります。これらは通常の投稿とは異なり、あらゆる方法で操作することができず、メディア添付も不可で、文字数制限も数百文字程度と短く設定されています。ステータスは常に、そのアクター自体を表示できるすべてのユーザーから閲覧可能です。
要件
本仕様書における「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」といった用語は、[RFC-2119]で定義された解釈に従うものとします。
ステータスオブジェクトの表現形式
ステータスオブジェクトはActorStatus型であり、ActivityPubの基本Objectタイプを拡張したものです。以下のフィールドを持ちます:
attributedTo: このステータスが属するアクターのID。必須。content: ステータステキストの平文内容。必須。published: このステータス更新が作成されたタイムスタンプ。必須。id: このステータス更新を一意に識別するID。必須。endTime: このステータスが有効でなくなるタイムスタンプ。オプション。もし存在する場合、実装はこのフィールドを確認し、過去の時刻を示している場合はアクターのプロフィールやその他のステータス表示箇所において当該ステータスを表示してはならない。attachment: アクターが現在行っている活動に関する追加情報を含むオブジェクト(例:再生中の楽曲やプレイ中のビデオゲーム)。オプション。もし存在する場合、contentにはこのオブジェクトを人間が読みやすい平文形式で代替表現として含める必要があります。例えば楽曲の場合、単に「アーティスト名 — 曲名」といった形式になります。
アクター属性の拡張
以下の2つのOPTIONALフィールドがアクターに追加されます:
status: このアクターの最新または現在のステータス更新。最後のステータスが有効でなくなった場合には存在してはなりません。必ずインライン化されたActorStatusオブジェクトを含む必要があります。statusHistory: このアクターの過去すべてのステータス更新を集めたコレクション。もし存在する場合、実装はこのアクターのステータス履歴を表示するためのUIを提供することが可能です(提供しなくても構いません)。存在しない場合、実装はこのアクターの過去のステータス更新を保存する必要はなく、またUIで表示することも推奨されません。
アクティビティ関連仕様
ステータス更新の作成
ステータス更新は、Create{ActorStatus}アクティビティをフォローワーに送信することで作成されます。このアクティビティを受け取った際、実装はアクターの最新ステータス情報を更新し、かつstatusHistoryコレクションが存在する場合にはそれを履歴に追加します。このアクティビティを送信後、アクターオブジェクトのstatusフィールドはこの新規ステータスで確実に更新されなければなりません。Update{Actor}アクティビティは別途送信する必要はありません。なぜならCreateアクション自体がリモートサーバー上のこのアクターコピーにおける当該フィールドを暗黙的に更新するためです。
もしアクターにstatusHistoryが存在しない場合、以前のステータスは削除されたものとみなされます(あたかもDeleteされたかのように扱われます)。
ステータスのクリア
最新のステータスは、Remove{ActorStatus}アクティビティをフォローワーに送信することで消去されます。このアクティビティを受信した際、objectフィールドのIDがアクターの現在のステータスと一致する場合、実装は当該アクターの現在のステータスを削除します。もしアクターにstatusHistoryコレクションが存在する場合、その履歴には保持されます。statusフィールドに関する前述の取り扱いと同様のルールが適用されます。
ステータスの完全削除
ステータスを完全に削除するには、Delete{ActorStatus}アクティビティをフォローワーに送信します。この際、アクターがstatusHistoryコレクションを持っている場合、当該ステータスは履歴からも削除され、プロフィール上でも非表示になります。そうでない場合、このアクティビティは通常のRemoveアクションと同一の動作となります。
ステータス関連その他のアクティビティ
ステータスは操作対象ではないため、実装はこのステータスを所有するアクター以外をobjectとして参照するいかなるアクティビティも送信すべきではありません。このようなアクティビティを受け取った場合、実装は以下のいずれかの対応を取る必要があります:2xxレスポンスを返すことで無視するか、4xxエラーを返すことで拒否すること。
一度公開されたステータスオブジェクトは、その後Updateすることはできません。
技術的背景
本提案で使用するJSON-LDコンテキストは以下の通りです:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"sm": "http://smithereen.software/ns#",
"ActorStatus": "sm:ActorStatus",
"status": {
"@type": "@id",
"@id": "sm:status"
},
"statusHistory": {
"@type": "@id",
"@id": "sm:statusHistory"
}
}
]
}
文字数制限
実装は、最大100文字または絵文字までのステータスをサポートしなければなりません。より長いステータスを許可することは可能ですが、その場合、表示や保存上の制約により、受信側で自動的に短縮される可能性があります。ユーザーがステータスを入力するテキストフィールドには100文字制限を適用することが推奨されますが、他サーバーから取得したステータス更新を処理する際にはより寛容な対応が可能です。
UI実装例
本セクションは非規範的な内容です。
以下に、各実装がユーザーにステータス更新を表示する際の具体例を示します。
DiscordやGitHubと同様の、履歴機能を持たないシンプルなUI:
有効期限設定が可能なステータス更新画面:
初期Facebook風の、履歴表示機能付きUI:
サンプルステータスオブジェクト
{
"type": "ActorStatus",
"id": "https://example.social/users/1/statuses/1747286633",
"attributedTo": "https://example.social/users/1",
"content": "is desperately trying to bring the old internet back",
"published": "2025-05-15T05:23:53.539Z",
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"sm": "http://smithereen.software/ns#",
"ActorStatus": "sm:ActorStatus"
}
]
}
参考文献
- Christine Lemmer-Webber, Jessica Tallon, Erin Shepherd, Amy Guy, Evan Prodromou, ActivityPub, 2018
著作権情報
法律で認められる範囲において、本Fediverse Enhancement Proposalの著者らは、当該作品に関するすべての著作権および関連する権利を放棄します。このパブリックドメインへの献呈はCC0 1.0 Universal(CC0 1.0)に準拠しています。