generated at
NIP-18

> Repost

リポスト(Twitterにおけるリツイート等に相当)を実現するための仕様


開発者向け

hr
翻訳

リポスト(Reposts)
リポストとは、読む価値がある kind 1 テキスト投稿をフォロワーに知らせるのに使う kind 6 のイベント。

リポストイベントの content はリポスト対象の投稿をJSON文字列化したものとする。これは(リポスト対象の投稿を)素早く参照できるようにするためである。空にしてもよい(MAY)が、推奨されない。
6/17付でこの文が変更された。以前は空にするのが基本、元の投稿を含めるのはオプション扱いだったが、逆転した形。

リポストイベントには、リポスト対象の投稿の id を値に持つ e タグを含めなければならない(MUST)。このタグの3番目の要素に、対象の投稿を取得可能なリレーURLを含めなければならない(MUST)。
(訳註) 実態としてはリレーURLを含めるクライアントは限られている。

リポストイベントに、リポスト対象の投稿の pubkey を値に持つ p タグを含めるべきである(SHOULD)。

引用リポスト(Quote Reposts)
引用リポストは引用リポストされるテキスト投稿の q タグを埋め込んだ kind 1 イベントである。 q タグは引用リポストがスレッドで取得されず、リプライ一覧に含まれないことを保証する。また、投稿へのすべての引用を取得し、数えることが容易となる。

汎用リポスト(Generic Reposts)
kind 6 によるリポストは kind 1 のコンテンツのために取ってあるため、 kind 16 を「汎用リポスト」として用いる。
これには kind 1 以外のあらゆるイベントを含めることができる。

kind 16 によるリポストは、リポストするイベントのイベントの種類 (kind)の番号を文字列化したものを値とする k タグを含むべきである(SHOULD)。

hr
リポストの廃止と復活
2023年1月に一度廃止されたが、クライアント実装の現状に関する網羅的な調査とそれに基づく変更の上で2023年3月に復活した。
廃止の経緯は こちらのIssueを、復活の経緯は こちらのプルリクエスト を参照

引用リポストのqタグの目的について
q タグは、返信スレッドと引用リポストを別々に取得するために2024年2月に導入されました。
詳しい経緯については https://github.com/nostr-protocol/nips/pull/1074 を参照してください。

古い引用リポストの仕様との互換性について
古いバージョン(2024/2/23以前)では引用リポストには e タグを使うことになっていました。

NIP-18の古い仕様の翻訳は以下の通り:
> 引用リポストは e タグが埋め込まれた kind 1 のイベントで表す (NIP-08およびNIP-27を参照)。引用リポストは e タグを含むので、リポスト対象の投稿へのリプライと一緒に表示される可能性がある。

現在の仕様では q タグを使うことになっています。

実装時は互換性に関して、いくつかの選択肢があります。
投稿時
(1) q タグのみを含める(新仕様のみに対応)
(2) q タグと e タグの両方含める(互換性を考慮する)
(3) e タグのみを含める(旧仕様のみに対応)
返信(スレッド)と引用リポストを別々に取得したいという目的を考えると、投稿時は(1)の q タグのみを用いることが望ましいと考えられます。 q タグのみを含める場合、古い仕様にのみ対応するクライアントからは見られなくなってしまいますが、対応するクライアントが増えていくにつれて問題にならなくなるでしょう。
取得時
(1) q タグのみを取得する(新仕様のみに対応)
(2) e タグと q タグを取得する(互換性を考慮する)
(3) e タグのみを取得する(旧仕様のみに対応)
返信(スレッド)と引用リポストを別々に取得したいという目的を考えるなら、引用リポストのみを取得したい場合には q タグだけを取得することになるでしょう。
ただし、古い投稿の場合には旧仕様の引用リポスト( e タグ)が使われています。 e タグで検索するかどうかをユーザに選ばせることができます。

クライアントごとの引用リポストの実装
2024-09-29に確認した情報です。
Iris: 旧 e タグ ( ["e", "<ID>", "<URL>", "mention"] )
Damus: 引用時はタグを含めない模様
nostter: 新 ["q", "<ID>"]
lumilumi: 新 ["q", "<ID>", "<URL>", "<pubkey>"]
Rabbit: 新 q タグ ( ["e", "<ID>"] )