NIP-34はNostrリレー上でgitリポジトリ、パッチ、issueをホスティングするためのイベントkindを定義します。これにより、GitHubやGitLabのような集中型ホスティングプラットフォームに依存せずに、完全に分散化されたコードコラボレーションが可能になります。

仕組み

リポジトリは名前、説明、クローンURLなどのメタデータを含むアドレス可能イベント(kind 30617)として表現されます。リポジトリオーナーはこのイベントを公開してNostr上でプロジェクトを確立します。

パッチ(kind 1617)は、リポジトリに適用できるgit format-patchの内容を持ちます。コントリビューターは対象リポジトリを参照するイベントとしてパッチを送信します。これはLinux kernelのようなプロジェクトで使われてきたメールベースのpatch workflowを反映しています。

Issue(kind 1621)は従来のissue trackerのように機能します。pull requestにはkind 1618と1619を使い、status updateには1630から1633を使います。issue、patch、pull requestへの返信にはNIP-22コメントを使います。

イベントKind

  • 30617 - リポジトリアナウンスメント(アドレス可能)
  • 30618 - ブランチとタグのためのリポジトリ状態アナウンスメント
  • 1617 - パッチ送信
  • 1618 - Pull request
  • 1619 - Pull request update
  • 1621 - Issue
  • 1630-1633 - open、merged/resolved、closed、draftのstatus event

なぜ重要か

NIP-34はdiscoveryとtransportを分けます。実際のリポジトリは通常のGit serverに置いたままでも、Nostr eventがdiscovery、discussion、patch exchange、status trackingのためのrelay-distributedな層を提供します。これにより、プロジェクトはgit-nativeなtoolingを保ったまま、単一forgeのdatabaseやAPIへの依存を減らせます。

特に重要なのが、最も早い一意なcommitを入れるrタグです。これによってクライアントは、同じ基盤リポジトリ系統に属するmirrorやforkをグループ化できます。名前だけではこの判定は難しいです。

実装状況

  • ngit - リポジトリとパッチをNostrに公開するためのコマンドラインツール
  • gitworkshop.dev - Nostrでホストされたリポジトリを閲覧するためのWebインターフェース
  • Notedeck - NIP-34ビューアのドラフトサポートを持つデスクトップクライアント

主要ソース:

言及箇所:

関連項目: