NIP-94および95に関する議論
NOTE: ⚠️現在執筆途中です⚠️
前書き
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は「ない方がいい」寄りの「なくてもいい」という立場です。無意識のポジショントークが含まれる可能性があります。
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利用の温度感に関してはよく理解できていない。
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経由で参照したい場合に使う想定に見える (
参考)。
NIP-54 (Inline Image Metadata)
kind: 1
に対して画像メタデータ (URL, ALT, 画像サイズ, ハッシュ) を提供するための imeta
というタグを定義する。
NIP-94/95否定派 (と思われる) damus作者の
jb55氏によって提案されたが、氏はマージすることを諦めた。
NIP-94とNIP-95の関係
NIP-95はNIP-94のPRから分離した経緯もあって、当初は利用にNIP-94を前提としていた (
出典) ものの、現在ではどちらも単独で利用でき、また組み合わせて利用することもできる想定の模様 (
参考)。
NIP-94とNIP-95の kind
の利用を整理すると以下のようになる (⚠️は不完全なデータ)。
nip-94-951063 | 1064 | 1065 | 状態 |
⚪︎ | - | - | URL経由による外部ファイル参照 |
- | ⚪︎ | - | ⚠️ 参照不可ファイル |
⚪︎ | ⚪︎ | - | ⚠️ ヘッダなし |
- | - | ⚪︎ | ⚠️ファイルなし |
⚪︎ | - | ⚪︎ | ⚠️ ファイルなし |
- | ⚪︎ | ⚪︎ | リレー経由によるファイル参照 |
⚪︎ | ⚪︎ | ⚪︎ | リレーおよびURL経由によるファイル参照 |
NIP-94のユースケースとして挙げた「メディアURLを単独のイベントとして扱う」ことのメリットのうち、外部URLに起因しないもの以外はNIP-95の kind: 1065
でも同じメリットが享受できる。また、NIP-94と比べると中央集権的なメディアアップローダに依存しなくてよくなるというメリットもある。
NIP-94およびNIP-95に対する両陣営の意見 (編集中)
> ⚠️ 現在記述していることは筆者の主観あるいは妄想ベースです。TODO: 出典の追加
好意的な意見
NIP-94は汎用的である
NIP-95によって分散/非中央集権的なアップローダを利用できるようになる
NIP-95はnostrで作成できるアプリケーションの幅を広げる
否定的な意見
NIP-94は既存データとの互換性が低い
NIP-94はいうてURLを扱うことがメインのユースケースなのに、やりたいことに対して機能が多すぎる
ので、NIP-54みたいにやりたいことだけを素直に仕様化するべき
NIP-95は非効率でリレーやクライアントに負担をかける
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のように『作者情報を保持したままメディアのみ引用』する
議論のタイムライン
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がクローズされる
TODO
NIP-94とNIP-54の比較まわりの改善
NIP-94は画像用途以外について
NIP-54はなぜ提案するに至ったか
議論 (やりとり) と結論をどのように取りまとめるかが決まっていない
誰がどういう意見なのかもまとめた方がよさそう
メモ
NIP-94