ActivityPubサーバーで投稿の編集

フェディバースのタイムラインに定期的に流れてくる「投稿を編集したい」「編集できるの?」
これは
「サーバーが対応していれば」投稿の編集更新はできます。
ということになる。
自分のいるサーバーが
「投稿の編集」に対応しているなら「編集」して書き直した投稿はホームタイムライン、ローカルタイムラインに反映される。
「投稿の編集」に対応していなければ「編集」するリンクがなかったり「破棄して下書きに戻す」になってたりする、はず。
さらには、投稿の編集に対応している自分のいるサーバーで「編集」しても、フォロワーさんのいるサーバーが対応しているとは限らない。
自分は編集して、ホームタイムラインを見たら誤字も直ってるのに、編集更新未対応のサーバーにいるフォロワーさんのタイムラインでは誤字のまま、ということが起こる。
で、どうしてサーバーごとで対応が違うのかということになるんだけど。
(また、なんか前置きが長くなりそうな…)
ActivityPubの仕様に「Update」というActivityがある。
https://argrath.github.io/activitypub/#update-activity-inbox
これを使ってリクエストを投げれば、文字通り、投稿だけじゃなくてプロフィールなども「アップデート」=「編集更新」することができる。
仕様上できるとはいえ、投稿(Note)の編集更新(Update)はちょっと考えなきゃいけないこともある。
1)1つの投稿には1つのIDが振られる。
2)IDが(No.123)の投稿「タヌキそばとキツネうどん?そりゃタヌキそばに決まってるよ!」がタイムラインに流れてきたのを読んで「おれもだ!」と賛同の「イイネ」
3)後日、ID(No.123)の投稿を見てみたら「タヌキそば?ぷぷぷ、キツネうどんに決まってんじゃん」
4)え?なんで?おれの「イイネ」はたぬきそばにつけたんだが?
投稿の編集更新は、同じIDなのに、中身が全然違ってしまう、ということが起こるかもしれない。
なもんで、Update、投稿の編集の実装には慎重になるということもあるんじゃないかな。
「編集する」ではなくて「破棄して下書きに戻す」(改めて新規投稿する)
という方法で、別IDを振ることで上記の問題は回避できる。
投稿を編集したい・書き直したい、という要求の一番は「誤字脱字の修正」ぐらいだろうし、そんな神経質にならんでも?
とはいえ、不特定多数の参加するコミュニティだし、リスク回避最優先、てことかなあ。
とか、是非の分かれるところがあったりなかったり。
わたしは、ひとつのIDの中身が変わるのは気持ち悪いんで、削除&新規投稿の方がいいかなあ(誤字なんかは後からいくらでも湧いてきてキリがないので放置)
編集更新と違って、削除はだいたいすべてのサーバーが対応してるし。
とはいえ、NoteのUpdate実装は手間もないので実装済(送信)
(受信については、ウチはそもそも投稿の保存数が上限20個なので、Updateが流れてきた時にはすでに元の投稿は流れた後、ということもあるんで未実装)
UpdateのActivityが以下
{
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"Hashtag": "as:Hashtag",
"toot": "http://joinmastodon.org/ns#",
"Emoji": "toot:Emoji",
"sensitive": "as:sensitive",
},
"https://w3id.org/security/v1"
],
"type": "Update",
"id": "https://tokoroten.doncha.net/t2aki/d378b480-a8b3-11f0-a5cb-d391bfe3cb70",
"url": "https://tokoroten.doncha.net/t2aki/d378b480-a8b3-11f0-a5cb-d391bfe3cb70",
"published": "2025-10-14T04:11:14Z",
"actor": "https://tokoroten.doncha.net/t2aki",
"to": ["https://www.w3.org/ns/activitystreams#Public"],
"cc": ["https://tokoroten.doncha.net/t2aki/followers"],
"object": {
"type": "Note",
"id": "https://tokoroten.doncha.net/t2aki/items/05976-20251014",
"url": "https://tokoroten.doncha.net/t2aki/items/05976-20251014",
"published": "2025-10-14T04:04:32Z",
"to": ["https://www.w3.org/ns/activitystreams#Public"],
"cc": ["https://tokoroten.doncha.net/t2aki/followers"],
"attributedTo": "https://tokoroten.doncha.net/t2aki",
"content": "編集更新対応の確認\u003cbr /\u003e→ここは対応している",
"updated": "2025-10-14T04:11:14Z",
}
}
Updateのオブジェクトに、編集したNoteのJSONに「updated」を追加して、リクエストを投げると受け取ったサーバーがUpdateに対応してれば、編集更新を反映してくれる。

↑mstdn.socialで受け取って編集が反映してるところを確認。
ちなみに「updated」の追加が必要なのはMastodonで、Misskey系iceshrimpは「updated」は不要だった。
サーバーごとで微妙に違うことが多いので、やっぱり現物合わせになる…
これもホームページの「おひとり様ActivityPubサーバーの自作実装」に追加しておこう。

