ActivityPubサーバーに引用を実装

自作実装のActivityPubサーバーに「引用」を実装した。
引用ってナニ?
気になる投稿を見かけて、その投稿についてコメントをつけたい、なんて思った時にその投稿を自分の投稿に埋めこむ、文字通り「引用」する機能。
XなどのSNSではすでに利用されていて、フェディバースでもMisskeyやFedibird、kmyblueなどのサーバーでは実装されている。
なんで今さら?
つい先日、フェディバースでもっともポピュラーなMastodonというサーバーがこの「引用」を実装して運用を始めたから。
「引用」はXなんかのSNSでよく見られる「どれどれ、おれさまがモノ申してやろう」によく使われている。
投稿主の意図とは関係なく「晒しあげ」に使われることが多い、という問題を抱えているんで、Mastodonは引用の導入に消極的だという話があった。
てこともあってのことだと思うけど、引用の導入については、引用する該当の投稿が引用を許可しているか、偽装されていないかなど、ハードルを設けている。
わたしの場合、「おれさまがモノ申す」するような、みっともないマネはしたくない、でも、自分の過去投稿を引用したいことは「言い足したい」などでけっこうある。
ということで、ウチに実装する「引用」は、自分の投稿を自分で引用する「自己完結型」引用とする。
という無駄に長い前置き…老人の特権で勘弁してください。
で、引用の実装。
https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md
↑Mastodonの引用について
これがすべて。
・引用の許可
投稿のJSONに「引用を許可します」を明記する
"interactionPolicy":{"canQuote":{"automaticApproval":["https://www.w3.org/ns/activitystreams#Public"]}}
「interactionPolicy」というそのまんまの要素に、「canQuote」というそのまんまのキー。この値に「public」が指定されていると誰でも引用できる投稿となる。
・投稿を引用する
引用が許可された投稿を引用する
"quote": "https://tokoroten.doncha.net/t2aki/items/05829-20250921",
"quoteUrl": "https://tokoroten.doncha.net/t2aki/items/05829-20250921",
"quoteUri": "https://tokoroten.doncha.net/t2aki/items/05829-20250921",
"_misskey_quote": "https://tokoroten.doncha.net/t2aki/items/05829-20250921",
引用する投稿をJSONに記載する。Mastodonは「quote」だけど、すでに実装済みのサーバーとの互換のために「_misskey_quote」なども記載しておく。
この投稿には引用がついていて、引用する投稿のURLを書いておくね、ということになる、かな。
・引用のチェック
引用を含んだ投稿を受け取ったサーバーは、その引用が「正しいのか/表示していいのか」を確認する必要がある。
引用を含んだ投稿には、引用する投稿のURLのほかに「quoteAuthorization」のURLを記載する。
"quoteAuthorization": "https://tokoroten.doncha.net/t2aki/quote_auth/05833",
このURLにGETでリクエストして、返ってくるJSONで引用の整合性を確認する。
以下が「quoteAuthorization」が返す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/05833",
"type": "QuoteAuthorization",
"attributedTo": "https://tokoroten.doncha.net/t2aki",
"interactingObject": "https://tokoroten.doncha.net/t2aki/items/05833-20250921",
"interactionTarget": "https://tokoroten.doncha.net/t2aki/items/05829-20250921"
}
以下すべての一致が確認できたら引用として表示される。
・idと引用投稿の「quoteAuthorization」
・attributedToと引用される投稿のattributedTo
・interactionObjectと引用投稿のid
・interactionTargetと引用される投稿のid
以上で最低限、自己完結型引用を投稿できる

↑mastodon.socialで引用投稿を表示
上記はいろいろ省略してる。
contextに記載するものもそうだけど、自己完結じゃない場合、ひとさまの投稿を引用する時にはリクエストのキャッチボールが生じるので対応が必要となる。
その投稿を引用したい!
・「"type": "QuoteRequest"」のActivityを引用したい投稿の主にPOSTでリクエストする。
・リクエストを受けたら承認(Accept)/拒否(Reject)のリクエストを返す。
返事を見てから引用をする/しない。
とはいえ、自己完結型は承認もなにもないので、このへんはばっさりスルー。
引用したい側は、引用元に可否を問い合わせるのは「MUST」
引用される側は、返事する/しないはおまかせ
ということだし。
このブログはもともとコード掲載することを考えてなくて、めっちゃ見にくいんで、そのうちホームページの方に改めて掲載します。
「おひとり様ActivityPubサーバーの自作実装::On Golden Pond」
今日時点、引用にしても絵文字にしても、ActivityPubの仕様にはない(?)ので、サーバーごとで対応にバラつきがあって、現物合わせの手探り。
判じ物、当たるも八卦当たらぬも八卦(死語)の世界だなあ。
[09/22 09:50:38]追記
あれ?自己完結するなら、interactionPolicyは不要な気がする。
あとで検証してみよう
[09/23 23:09:35]追記
intractionPolicyは不要だった。
これは「引用しようとするひと向け」のもので、自己完結するなら不要。
intractionPolicyは本家Mastodonの引用制御
・誰でも引用できる
・followerまでが引用できる
・引用できるのは自分だけ
この選択のためにある。
引用を含んだ投稿を表示させる時に、引用されている投稿の引用ポリシーを確認にくるのでは、と疑ったんだけど、アクセスログを見てもそんな形跡もなかった。
ということはquoteAuthorizationの設定だけ約束どおり作っておけば、引用を含んだ投稿を意図通り表示してくれる。
[更新]2025-11-18 09:03:30
立川まんがパークは極楽だった

ほぼ10年ぶりに東京西部地区。立川まんがパークに行ってきた。パラダイス、極楽だった。
その前にお昼ご飯。やっぱりほぼ10年ぶりの武蔵小金井で途中下車。開かずの踏切で有名になったところ、高架工事が終わり駅前が一変していてびっくり。田舎駅舎のたたずまいだったのが駅前ロータリーなど地方小都市にありがちな景色になっていた。
カレーの『プーさん』
野菜チキンカレー1500円。極辛。
素揚げされた野菜が文字通りのてんこ盛り。チキンはほろほろと崩れる柔らかさ。口に入れた瞬間ほわっと広がるクローブの丸くて甘い香りが相変わらずの絶品。ボリュームもたっぷりで、満腹。

武蔵小金井から4駅。だいたい10分ぐらいで立川。立川駅南口を出て徒歩5分ぐらいで「立川まんがパーク」
入口で靴を脱いで靴ロッカーに入れる。このロッカー代が入場料の400円。靴ロッカーの状態で中の人数がわかる、ちょっとしたアイディアだなあ、と妙に感心してしまった。
まんがパークは予約などはできなくて、行ってみて靴ロッカーがいっぱいだったら満員。空くのを待つことになる、らしい。(昨日わたしたちが行ったときから帰るときまで、満員にはなってなかった)

入ると床は基本的に「畳敷き」足の裏が心地よい。漫画の数は4万冊ぐらい?かな(公式HPを参照してください)
どこにどんな本があるのか、探すのが大変だけど、端末が設置されていてタイトルや著者名で検索するとどの棚にあるか教えてくれる。これは公式HPでも調べることができるので事前に調べて目当ての本棚直行も。

『がきデカ』『ドカベン』『ブラックジャック』『アイシールド21』『うしおととら』…あげるとキリがない。本棚の前でいちいち「うをっ!これあるのか」「うひゃーなつかしー」「こっちにするか」「ううう、まずあっちか」などと目移りして困った。
2段ベッドタイプ。これの下、一段目のスペースには小さな机が設置されたタイプもある。もう少し広い押し入れタイプもあって、居心地いいのは間違いない。わたしは2段ベッドの上に陣取って、『うしおととら』を持ち込んで、さっそくごろ寝読み。
子供が多いのに、みんな夢中で漫画を読んでいて、とても静か。

大量の漫画に囲まれ、畳に寝転がって静かな場所でひたすら漫画を読む。気心の知れた友達、親戚の家に行ってごろごろしてる気分。ここは一年中夏休みだ。


立川に住んでいたら通うぞ、これは。
わたしはずっと転がって漫画を読んでたんだけど。
イートインがあって、メニューにはビール、ハイボール、カレーライス、枝豆、唐揚げがあるお父さん向けか。ちなみに食べ物は冷凍ものを渡されて各自レンジでチンする。
ご飯の心配もなく、朝から行って一日中ごろごろできる。素敵すぎる。
打ち上げ(?)は立川の串揚げ割烹。お通しがしっかりしていてこれだけで驚き。串揚げといいつつ、刺身や焼き魚が美味でありました。

『立川まんがパーク』公式HP
平成24 年度第1回立川市文化振興推進委員会
http://www.city.tachikawa.lg.jp/cms-sypher/open_imgs/info/0000000082_0000035864.pdf
『マンガ3万冊を畳でゴロゴロしながら読めて1日400円 「立川まんがぱーく」が素敵すぎる』
http://nlab.itmedia.co.jp/nl/articles/1304/09/news102.html
『プーさん』
http://tabelog.com/tokyo/A1325/A132501/13005962/
『串揚げ割烹 トントン』
http://tabelog.com/tokyo/A1329/A132901/13072774/dtlrvwlst/
[更新]2013-10-04 10:10:20
再検査とか乙一とか

今日は朝っぱらから再検査。…て、おじいちゃんおばあちゃんの検診にぶち当たったようで、予約していたにもかかわらず、30分待ち。んで、実質は問診4分に採血2分。結果は来週。んで、来週いったら今度は便潜血の検査をどうすんのか決めないといけないっぽい。ううううむ。
とポンコツは加速していく。
読書SNSでネタを思いついたんで検討してみたところ、スマートにやるにはjavascriptでの非同期通信がベストっぽい。ページ遷移せずに見せたいところだし。
わたしの環境は。
仕事絡みでは、php、mysql、flash。ウチのポンコツサーバーでは、perl、postgreql。
他に、FreeBSDとかapache、qmqilなんかのインストールだの設定だの、というのがテリトリー。
どれもこれも浅くとっちらかった(=薄っぺらな)知識でやってるけど、その中にJavaScriptは含まれていないのだ。googlemapsで遊ぼうとして途中放置となってるのも、JavaScriptが必須だからなんだよなあ。いいかげん腰据えて解説本なんかを読んでテストスクリプトからちまちまやらんといつまで経っても覚えないんだろなぁ。
と、煮え切らないのは、クライアントサイドでごちゃごちゃしたくないからで。…うぢうぢぐずぐず。
乙一「夏と花火と私の死体」
正直ハズレ。キャラの言動に一貫性が感じられず説得力がなかったなあ。最後まで感情移入できず。評判のいい他作品をブックオフで見つけたら試してみるかしらん。
[09/22 23:05:08]
うーむ。どうにか非同期通信でデータ取得ができるようになったくさい。今日さっそく、北千住で解説本を一冊買った甲斐があったというもんだ。
エディタで直打ちしろっ

ちょっと試しに大きいところのソースを覗く。さすがにポータルと言われるところは、画像の使い方が控えめ。入れ子にしたテーブルを使って画像は最低限に抑えてる印象。企業や個人の一部のページのようになんでもかんでも画像にするのはやはり肌に合わない。
テーブル多用で苦肉のレイアウトも流行じゃないはずなんだけど、ホームページ作成ソフトが吐き出すのはテーブルだらけの面妖なHTML。
スタイルシートが今のところ、わたしベストの解。
エラソに言うくせに、実はよくわかってないんだけど。まとめて書けるのでラクちんなのだ。せっかくHTMLてのは単なるテキストなんだから、妙なソフトで書かないでエディタで書いてくれ。コメント入れてくれ。
今さら驚いたのが、その手の会社って、WEBのデザインをイラストレーターで作って画像にしてラフ出しするんだねぇ。かえって面倒手間無駄労力浪費に思えるのは、わたしのやり方が古いからかな。
世間さまは明日から三連休。どうりで駅がわさわさしてるはずだ。いろいろアレだけどナニします。
[更新]2013-03-29 00:45:31
風邪っぽ。

ううう。朝起きたらノドが痛いぞ、くそ。おまけに身体もだるい。突然こんな寒くなられると対応できないぢゃないかよ。
原稿を何本か入稿したし、今日は早々に退散してしまうかなぁ。とはいえ「急ぎじゃない」仕事が着々と溜まってきてるのはいかがなものか。ちょっとぐらい手をつけておかないとあとで首が絞まるか…。
でも、まるでシャキっとしないぞ。だるぅ。
[更新]2026-02-04 12:43:05

