投稿の引用

自分の投稿を引用する

「引用」はActivityPubの仕様には入ってない。私家版ActivityPub日本語訳
サーバーソフトウエア(インスタンス)ごとで対応状況が違うけど、MastodonやMisskeyなどのシェアの大きいサーバーが対応しているのでウチでも少しだけ対応してみました。

仕様的には、Mastodonの仕様fep-044fに合わせました。

※ほかの誰かの投稿を「引用」するのはいろいろ問題があるので、「自分の投稿を引用する」に限定したもの、自己完結型の引用です。

【投稿を引用するのに必要なこと】

  1. 引用対象の投稿が「引用を許可」している
  2. 引用を含んだ投稿の情報が正しいことを検証できる

ざっくり上記の2点

自己完結=自分で自分の投稿を引用するだけなので(1)は不要なんですが、他サーバーからの「引用」に対応するために付加することにしました。

【引用される対象の投稿】

この投稿を引用するために、ActivityのJSONに引用の許可を追加します。

引用のために

「@context」(定義部分)に付加


"quoteUrl": "as:quoteUrl",
"quote": "https://w3id.org/fep/044f#quote",
"_misskey_quote": "https://misskey-hub.net/ns#_misskey_quote",
"quoteAuthorization": {
    "@id": "https://w3id.org/fep/044f#quoteAuthorization",
    "@type": "@id"
},
"gts": "https://gotosocial.org/ns#",
"interactionPolicy": {
    "@id": "gts:interactionPolicy",
    "@type": "@id"
},
"canQuote": {
    "@id": "gts:canQuote",
    "@type": "@id"
},
"automaticApproval": {
    "@id": "gts:automaticApproval",
    "@type": "@id"
},
"manualApproval": {
    "@id": "gts:manualApproval",
    "@type": "@id"
}
	

このへんは、だいたい呪文

NoteのJSONに引用の許可範囲を付加


"interactionPolicy": {
    "canQuote": {
        "automaticApproval": ["https://tokoroten.doncha.net/t2aki"]
    }
}
	

公開許可範囲は3パターン

    「canQuote」(引用できるの?)の「automaticApproval」に記載
  • 「誰でも(all)」
    →https://www.w3.org/ns/activitystreams#Public
  • 「フォロワーのみ(followers)」
    →https://example.com/users/name/followers
  • 「自分のみ(me)」
    →https://example.com/users/name

引用される対象投稿のJSON


{
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        {
            "Hashtag": "as:Hashtag",
            "toot": "http://joinmastodon.org/ns#",
            "Emoji": "toot:Emoji",
            "sensitive": "as:sensitive",
            "misskey": "https://misskey-hub.net/ns#",
            "_misskey_reaction": "misskey:_misskey_reaction",
            "_misskey_license": "misskey:_misskey_license",
            "quoteUrl": "as:quoteUrl",
            "quote": "https://w3id.org/fep/044f#quote",
            "_misskey_quote": "https://misskey-hub.net/ns#_misskey_quote",
            "quoteAuthorization": {
                "@id": "https://w3id.org/fep/044f#quoteAuthorization",
                "@type": "@id"
            },
            "gts": "https://gotosocial.org/ns#",
            "interactionPolicy": {
                "@id": "gts:interactionPolicy",
                "@type": "@id"
            },
            "canQuote": {
                "@id": "gts:canQuote",
                "@type": "@id"
            },
            "automaticApproval": {
                "@id": "gts:automaticApproval",
                "@type": "@id"
            },
            "manualApproval": {
                "@id": "gts:manualApproval",
                "@type": "@id"
            }
        },
        "https://w3id.org/security/v1"
    ],
    "type": "Create",
    "id": "https://tokoroten.doncha.net/t2aki/activity/06007-20251020",
    "url": "https://tokoroten.doncha.net/t2aki/activity/06007-20251020",
    "published": "2025-10-20T13:49:28Z",
    "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/06007-20251020",
        "url": "https://tokoroten.doncha.net/t2aki/items/06007-20251020",
        "published": "2025-10-20T13:49:21Z",
        "to": [
            "https://www.w3.org/ns/activitystreams#Public"
        ],
        "cc": [
            "https://tokoroten.doncha.net/t2aki/followers"
        ],
        "attributedTo": "https://tokoroten.doncha.net/t2aki",
        "content": "\u003e「閣外協力なら必ずしも全部の法案(への賛否)を自民と統一させる必要はない」と述べた。\u003cbr /\u003e\u003cbr /\u003e国民民主の玉木。そりゃオモチャにされるわ。野党で連立かと盛り上がりそうになったのに立憲民主とは政策が違うから合わないとか言い放った当人がまたこれ。\u003cbr /\u003e昔、自民社会さきがけ、という連立政権もあったよなあ\u003cbr /\u003e\u003cbr /\u003e軽薄な印象しかないんだけど、大丈夫かこの人",
        "interactionPolicy": {
            "canQuote": {
                "automaticApproval": [
                    "https://tokoroten.doncha.net/t2aki"
                ]
            }
        }
    }
}
	

【引用を含んだ投稿】

引用投稿は、投稿の中に引用した元投稿を表示することになります。

引用投稿のJSONのNoteに引用についての情報を入れます


"quote": "https://tokoroten.doncha.net/t2aki/items/06007-20251020",
"quoteUrl": "https://tokoroten.doncha.net/t2aki/items/06007-20251020",
"_misskey_quote": "https://tokoroten.doncha.net/t2aki/items/06007-20251020",
"quoteAuthorization": "https://tokoroten.doncha.net/t2aki/quote_auth/06008",
	

「quote」「quoteUrl」「_misskey_quote」は引用する対象投稿のURLを記載(仕様の少し違うサーバーとの互換のために3つ設定)

「quoteAuthorization」が、この引用を含んだ投稿が正しく引用してることを証明するためのURL。

引用を含んだ投稿のJSON


{
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        {
            "Hashtag": "as:Hashtag",
            "toot": "http://joinmastodon.org/ns#",
            "Emoji": "toot:Emoji",
            "sensitive": "as:sensitive",
            "misskey": "https://misskey-hub.net/ns#",
            "_misskey_reaction": "misskey:_misskey_reaction",
            "_misskey_license": "misskey:_misskey_license",
            "quoteUrl": "as:quoteUrl",
            "quote": "https://w3id.org/fep/044f#quote",
            "_misskey_quote": "https://misskey-hub.net/ns#_misskey_quote",
            "quoteAuthorization": {
                "@id": "https://w3id.org/fep/044f#quoteAuthorization",
                "@type": "@id"
            },
            "gts": "https://gotosocial.org/ns#",
            "interactionPolicy": {
                "@id": "gts:interactionPolicy",
                "@type": "@id"
            },
            "canQuote": {
                "@id": "gts:canQuote",
                "@type": "@id"
            },
            "automaticApproval": {
                "@id": "gts:automaticApproval",
                "@type": "@id"
            },
            "manualApproval": {
                "@id": "gts:manualApproval",
                "@type": "@id"
            }
        },
        "https://w3id.org/security/v1"
    ],
    "type": "Create",
    "id": "https://tokoroten.doncha.net/t2aki/activity/06008-20251020",
    "url": "https://tokoroten.doncha.net/t2aki/activity/06008-20251020",
    "published": "2025-10-20T14:15:00Z",
    "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/06007-20251020",
        "url": "https://tokoroten.doncha.net/t2aki/items/06007-20251020",
        "published": "2025-10-20T14:14:46Z",
        "to": [
            "https://www.w3.org/ns/activitystreams#Public"
        ],
        "cc": [
            "https://tokoroten.doncha.net/t2aki/followers"
        ],
        "attributedTo": "https://tokoroten.doncha.net/t2aki",
        "content": "「低劣な人間は低劣なことしか考えない」\u003cbr /\u003e「その代わり、低劣な人間は低劣な人間のやりそうなことがすぐ分かる」\u003cbr /\u003e『公園には誰もいない』結城昌治\u003cbr /\u003e\u003cbr /\u003e\u003e軽薄な印象しかないんだけど、大丈夫かこの人\u003cbr /\u003eわたしも軽薄なので匂いでわかる(え?\u003cbr /\u003e\u003ca href=\"https://tokoroten.doncha.net/t2aki/items/06014-20251020\"\u003eRE:\u003c/a\u003e\u003cbr /\u003e",
        "quote": "https://tokoroten.doncha.net/t2aki/items/06007-20251020",
        "quoteUrl": "https://tokoroten.doncha.net/t2aki/items/06007-20251020",
        "_misskey_quote": "https://tokoroten.doncha.net/t2aki/items/06007-20251020",
        "quoteAuthorization": "https://tokoroten.doncha.net/t2aki/quote_auth/06008",
        "interactionPolicy": {
            "canQuote": {
                "automaticApproval": [
                    "https://tokoroten.doncha.net/t2aki"
                ]
            }
        }
    }
}
	

【引用を認証する】

引用を含んだ投稿の「quoteAuthorization」のURLに確認のためのリクエストが飛んできたら、type:QuoteAuthorizationのJSONを返します。

    以下すべての一致が確認できたら引用OK。
  • idと引用投稿の「quoteAuthorization」
  • attributedToと引用される投稿のattributedTo
  • interactingObjectと引用投稿のid
  • interactionTargetと引用される投稿のid

引用認証のためのJSON


{
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        {
            "gts": "https://gotosocial.org/ns#",
            "quoteAuthorization": {
                "@id": "https://w3id.org/fep/044f#quoteAuthorization",
                "@type": "@id"
            },
            "interactingObject": {
                "@id": "gts:interactingObject"
            },
            "interactionTarget": {
                "@id": "gts:interactionTarget"
            }
        }
    ],
    "id": "https://tokoroten.doncha.net/t2aki/quote_auth/06008",
    "type": "QuoteAuthorization",
    "attributedTo": "https://tokoroten.doncha.net/t2aki",
    "interactingObject": "https://tokoroten.doncha.net/t2aki/items/06008-20251020",
    "interactionTarget": "https://tokoroten.doncha.net/t2aki/items/06007-20251020"
}
	

引用投稿の表示

今日時点の対応状況

mastodon.socialで表示。引用部分は長いと折り畳まれる。

Misskey.ioで表示。

fedibird.comで表示。

mstdn.jpで表示。引用は未対応。

未対応のサーバーもあるので、引用投稿に「RE:」など、元投稿へのリンクをつけている。

以上で「自己完結型引用」の実装となります。

これは、自分の投稿を自分で引用するということ限定なので、バッサリ省いたところがあります。

ほかの人の投稿を引用するには「"type":"QuoteRequest"」のActivity「引用をしても良いですか?」という問い合わせが必要です。

問い合わせた結果、許可が返ってきて初めて引用投稿が成り立つことになります。

詳細は上記したMastodonの仕様を確認してください。

[2025-11-18 09:03:57] v1.0.1

[2025-10-21 10:07:20] v1.0.0

Menu