NIP-94および95に関する議論
NOTE: ⚠️現在執筆途中です⚠️
/icons/hr.icon
前書き
2023年5月4日現在、damusは NIP-94 の kind: 1063 をサポートしておらず、amethystなどの kind: 1063 対応クライアントから送られた画像が表示できないことがある。damusがNIP-94をサポートしていない原因は、NIP-94 (およびセットで語られるNIP-95) の賛成派と反対派の対立に起因していると考えられる。 NIP-94を中心とした議論は複数のNIPが関係する上、github上のissue/PRにとどまらずnostr上にまで広がっており、全体を俯瞰するのが難しい。このページでは関連NIPの概要とそれらのSNS利用における論点、および時系列的な情報などを整理し、俯瞰できるようにしたい。 ⚠️ 本議論に関しては "NIP-9x" とひとくくりに表記されることがありますが、 NIP-92 (Rendezvous Beacons), NIP-93 (Secret Events), NIP-96 (File Distribution over Nostr), 旧NIP-99 (Nostr Data Apps) に関しては無関係に見えるので、今のところ本稿での言及予定はありません。 ⚠️ 本稿執筆前のakiomikのNIP-94/95に関する所感は、NIP-94は「あるべき」寄りの「あった方がいい」、NIP-95は「ない方がいい」寄りの「なくてもいい」という立場です。無意識のポジショントークが含まれる可能性があります。 /icons/hr.icon
NIP-94 (File Metadata)
ファイルのメタデータ (URL、ハッシュ、MIMEなど) を提供するための kind: 1063 を定義する。画像や動画 (以下、メディア) を含む様々なファイル情報を扱うことができる。
NIPとしてはすでにマージ済み。ステータスは draft。和訳に関してはNIP-94のページを参照。 nostrのSNS的利用における典型的なユースケースは「メディアURLを単独のイベントとして扱う」ことである。なおNIP-94には NIP-94 support is not expected to be implemented by "social" clients that deal with kind:1 notes or by longform clients that deal with kind:30023 articles.
拙訳: NIP-94は、 kind: 1 や kind: 30023 を扱うようなSNS系クライアントやブログ系クライアントで実装されることは期待されていない。
という記述があるものの、「推奨されるユースケース」に「pinterest風クライアント」というものがあり、SNS系クライアントにおけるNIP-94利用の温度感に関してはよく理解できていない。
/icons/hr.icon
NIP-95 (Storage and Shared File)
ファイルのバイナリデータをリレーで取り扱うための kind: 1064 と、ファイルヘッダとしての役割を持つ kind: 1065 を定義する。ファイルのバイナリはbase64エンコードされ、リレーのファイルシステム上あるいはMongoDBなどのドキュメント指向DBに保存されることを期待している。小規模なファイルだけでなく大規模なファイルを扱うことも視野に入れている。大規模なファイルを扱う場合、 kind: 1065 が複数の kind: 1064 のIDを持つ (参考)。 ⚠️ NIP-95をNIP-33 (parameterized replaceable event, kind: 30000番台) として扱うかどうか議論があり、PRでもkind番号に関して表記揺れがあります。PRの文中では kind: 30064 (データ) と kind: 30063 (ヘッダ) がでてきますが (出典)、これは古い情報であり現在では kind: 1064 (データ) と kind: 1065 (ヘッダ) が正しそうです (参考)。 2023年5月5日現在はレビュー中 (request changes) となっており、マージされていない。
SNSクライアントの画像アップロード時には、ファイル本体の kind: 1064、ファイルヘッダである kind: 1065、画像つき投稿である kind: 1 (kind: 1065 を e タグで参照)、という3種類のイベントが作成される (出典1, 出典2)。 このフローにはNIP-94のファイルメタデータ kind: 1063 が登場しないが、URL経由で参照したい場合に使う想定に見える (参考)。 /icons/hr.icon
NIP-54 (Inline Image Metadata)
kind: 1 に対して画像メタデータ (URL, ALT, 画像サイズ, ハッシュ) を提供するための imeta というタグを定義する。
NIP-94/95否定派 (と思われる) damus作者のjb55氏によって提案されたが、氏はマージすることを諦めた。 /icons/hr.icon
NIP-94とNIP-95の関係
NIP-95はNIP-94のPRから分離した経緯もあって、当初は利用にNIP-94を前提としていた (出典) ものの、現在ではどちらも単独で利用でき、また組み合わせて利用することもできる想定の模様 (参考)。 NIP-94とNIP-95の kind の利用を整理すると以下のようになる (⚠️は不完全なデータ)。
table:nip-94-95
1063 1064 1065 状態
⚪︎ - - URL経由による外部ファイル参照
- ⚪︎ - ⚠️ 参照不可ファイル
⚪︎ ⚪︎ - ⚠️ ヘッダなし
- - ⚪︎ ⚠️ファイルなし
⚪︎ - ⚪︎ ⚠️ ファイルなし
- ⚪︎ ⚪︎ リレー経由によるファイル参照
⚪︎ ⚪︎ ⚪︎ リレーおよびURL経由によるファイル参照
NIP-94のユースケースとして挙げた「メディアURLを単独のイベントとして扱う」ことのメリットのうち、外部URLに起因しないもの以外はNIP-95の kind: 1065 でも同じメリットが享受できる。また、NIP-94と比べると中央集権的なメディアアップローダに依存しなくてよくなるというメリットもある。
/icons/hr.icon
NIP-94およびNIP-95に対する両陣営の意見 (編集中)
⚠️ 現在記述していることは筆者の主観あるいは妄想ベースです。TODO: 出典の追加
好意的な意見
NIP-94は汎用的である
NIP-95によって分散/非中央集権的なアップローダを利用できるようになる
NIP-95はnostrで作成できるアプリケーションの幅を広げる
否定的な意見
NIP-94は既存データとの互換性が低い
NIP-94はいうてURLを扱うことがメインのユースケースなのに、やりたいことに対して機能が多すぎる
ので、NIP-54みたいにやりたいことだけを素直に仕様化するべき
NIP-95は非効率でリレーやクライアントに負担をかける
/icons/hr.icon
NIP-94とNIP-54の比較 (編集中)
SNS系クライアントにおける、画像添付時のNIP-94の kind: 1063 とNIP-54の imeta の比較。
NIP-94方式のいい点
互換性を無視すれば、クライアント側は kind: 1 中のメディアURLのパース処理を切ることができるようになる
大抵のクライアントはURLのリンク検出処理を行っているのでその部分の負担は変わらない
投稿とメディアそれぞれ別にNIP-36のようなラベル付与が行える twitterのように「作者情報を保持したままメディアのみ引用」が可能になる twitterやirisで提供されているようなメディアタブ (その人が投稿したメディア一覧) の実装が容易になる メディアにALT (代替テキスト) が設定できる
kind: 1063 の contentを利用
ホスティングサイトによるファイル改竄が検知可能になる
(実装によっては) 同一ファイルのイベントを使い回すことで再利用性を高めることができる
過去にアップロードした kind: 1063 をクライアント側がキャッシュしていれば再アップロードは不要
NIP-94方式のよくない点
「古いデータやNIP-94未サポートのクライアントは旧来の形式のまま」であるため、新旧データが混在すると上記の恩恵を中途半端にしか受けられない可能性が高い
e.g. 引用できる画像とできない画像があり、(おそらく見た目には区別できず) ユーザに混乱を引き起こす
NIP-54方式のいい点
NIP-54に対応したクライアントは追加でメタデータを見るようになるだけなので、過去データとの互換性が損なわれない
クライアントは imeta があれば imeta の画像を、なければ本文URLの画像を展開すれば良い
クライアントの実装がNIP-94と比べて簡単そうに感じる
NIP-54形式のよくない点
単独のイベントであるからこそNIP-94方式で実現できるいくつかのことは、NIP-54方式では実現できない
投稿とメディアそれぞれ別にNIP-36のようなラベル付与を行う
投稿とメディアそれぞれ別にzapを行う
twitterのように『作者情報を保持したままメディアのみ引用』する
/icons/hr.icon
議論のタイムライン
2023-03-09: NIP-94のPRが出される
2023-03-10: NIP-94から分離する形でNIP-95のPRが出される
2023-04-20: NIP-94のPRがマージされる
2023-04-28: NIP-54のPRが出される
2023-04-29: NIP-54のPRがクローズされる
/icons/hr.icon
TODO
NIP-94とNIP-54の比較まわりの改善
NIP-94は画像用途以外について
NIP-54はなぜ提案するに至ったか
議論 (やりとり) と結論をどのように取りまとめるかが決まっていない
誰がどういう意見なのかもまとめた方がよさそう
/icons/hr.icon
メモ
NIP-94