nostr はプロトコルです
その上にいろいろなものを作ることができます。
Nostr はアプリではありません。オープンなプロトコルで、軽量でシンプル、かつ拡張性があります。本当に検閲耐性と分散性を備えたネットワーク(SNS・チャット・決済・ブログ・マーケットプレイスなど)を構築できます。誰も所有していません。
このプロトコルはリレーに基づいています。リレーは誰でも運営できるサーバーです。クライアント(あなたが使うアプリ)はリレーと持続的な接続を開き、イベントをリアルタイムで送受信します。誰もあなたを追い出すことはできません。
目次
01
鍵とアカウント
Nostr では個人情報を使ってアカウント登録する必要がありません。メールも、電話番号も、パスワードもいりません。
Bitcoin と同じように、必要なのは一組の鍵だけです。正確には2つです:
npub1…
あなたのユーザー名として機能します。共有可能で、誰にでも公開されます。
nsec1…
これはパスワードのようなものです。秘密にしておく必要があります(だから秘密鍵)。Nostr を扱うあらゆるプラットフォームで、アカウントへのアクセスを可能にします。
秘密鍵は必ず保存しておきましょう。将来アカウントを復元して再ログインするための唯一の手段です。
鍵を手に入れる
一番簡単なのは nstart.me を使う方法です。鍵ペアを生成し、バックアップを案内し、名前や良さそうなリレーを選ばせてくれて、最後に好きなクライアントへ送り出してくれます。
多くのクライアントは初回起動時に鍵を生成することもできます。どちらでも問題ありませんが、初めてなら上の Nstart のほうが親切です。
signer:nsec を怪しいアプリに貼らない
nsec は家の鍵のようなものです。信頼できて鍵を端末の中だけに保管するアプリに貼る分には問題ありません(まっとうなクライアントの多くはそう動きます)。ただし、よく知らないものに貼り付けた瞬間、もう秘密ではなくなります。デフォルトで安全なのは、signer(署名者)に鍵を預けて、使いたいアプリの代わりにイベントに署名してもらう方法です。
人にやさしい名前(NIP-05)
npub1… は覚えやすいとは言えません。NIP-05 を使うと、自分が管理するドメインに小さな JSON ファイルを置くだけで alice@example.com のような読みやすい名前を名乗れます。中央のレジストリではなく、ただの DNS です。
プロフィール情報
鍵にはメタデータを付けられます:表示名、自己紹介、アバター、バナーなど。ほとんどのクライアントでこれらを編集できます。裏側では、これもまた署名されたイベントの1つにすぎません。
Nostr は NIP(Nostr Implementation Possibilities)によって拡張可能です。NIP はプロトコルに何かを追加したいときに書かれる仕様書です。NIP-01 がコアで、それ以外はすべてオプションです。
02
イベント
Nostr に存在する唯一のオブジェクトがイベントです。イベントは小さく、署名された、テキストだけの構造体です。クライアントがリレーに送るものはすべてイベントです:投稿、返信、いいね、プロフィール更新、zap、ダイレクトメッセージ、長文記事、何でも。
イベントの中身はこんな感じです:
// kind 1、プレーンテキストのノート { "id": "c011…4c43", "pubkey": "dec1…4fb3", "created_at": 1761522400, "kind": 1, "tags": [], "content": "おはよう!", "sig": "e1dc…5f1" }
ひとつずつ見ていきましょう:
contentとcreated_atは見たままです。idはこのイベントの一意な識別子です。ネットワーク上で参照するときに使います。pubkeyはイベントを作ったユーザーの公開鍵です。sigは、そのイベントを公開した人がpubkeyに対応する秘密鍵を持っていることを示す暗号学的な証明です。tagsフィールドには好きなタグを入れられます:他のイベントやユーザー、URL、ハッシュタグへの参照など。たとえばノートに返信するとき、元ノートの id はここにタグとして入ります。
kind(種類)
イベントの kind は Nostr の面白いところの1つです。そのイベントがどのタイプかを示す数値です。面白いのは、kind に上限がないところ。何か作りたい人が新しい kind を自由に考案できます。
よく使われる kind の例:
- 0 プロフィール情報(名前・自己紹介・画像)
- 1 短いテキストノート(いわゆる「ツイート」)
- 3 コンタクトリスト(フォロー一覧)
- 6 リポスト
- 7 リアクション(いいね・絵文字)
- 1059 プライベートメッセージ(NIP-17)
- 9735 zap レシート(NIP-57)
- 10002 リレーリスト(NIP-65)
- 30023 長文記事(NIP-23)
- 30311 ライブストリーム
完全な一覧は NIPs リポジトリ にあります。誰でも新しい kind を提案できます。
03
リレー
リレーは Nostr に欠かせない要素です。クライアントからイベントを受け取り、保存し、購読している相手に配信します。やることはそれだけです。
リレー同士は会話しません。あなたがイベントを送れるのは、あなたが接続しているリレーだけです。重要なので2回言いますが、リレーは互いに通信しません。
できれば複数のリレーに接続しておきましょう。クライアントは好きなだけリレーを選ばせてくれますし、それぞれに対して読み・書き・あるいは両方を設定できます。たとえば、読み取り専用で接続し、そこに投稿はしない、という使い方もできます。
もしわたしがリレー A だけに、あなたがリレー B だけに接続していたら、お互い Nostr 上にいても投稿は見えません。どちらかが相手の使っているリレーにも接続する必要があります。
最初は少しややこしく感じるかもしれませんが、実はとても便利な性質です。誰にも共有しない自分専用のリレーを立てて、そこに自分のイベントを全部流せば個人バックアップになります。サッカー専用のリレーに興味がなければ、単に追加しなければいいだけです。
outbox モデル
毎回リレーを当てずっぽうに探さなくていいように、NIP-65 があります。小さなイベントを publish して「書き込み用のリレーはこれ、読み取り用はこれ」と宣言します。最近のクライアント(Damus、Amethyst、Primal、Coracle など)はこのリストを読んで、どこを見ればいいか自動で判断します。
誰かがあなたの投稿を見られないとき、ほぼ確実に「共通するリレーがない」のが原因です。有名どころのリレーを数個と、自分のリレーを1つ選んで publish すれば、この問題はほぼ起きません。
検閲に強い構造
リレーは安く、立てるのも簡単です。小さな VPS や、スペックの低いスマホでも動かせます。リレー同士は通信しないので、1つ落としても他には影響しません。誰かがリレーを止めようとしても、数分後には別の場所に新しいリレーが現れる、という世界です。
世界中に 数百のリレー があり、その数は今も増えています。
04
zap
Nostr で一番かっこいい機能のひとつが、ネイティブの Bitcoin 決済です。zap は投稿やプロフィールに紐づいた Lightning 投げ銭です。小さな稲妻をタップすると sats が動き、公開レシートが投稿に貼られます。
zap はただのチップではありません。「いいね」よりも強い合図になります。いいねはタダですが、zap には身銭が乗っています。人気の投稿では、返信数やリポスト数の横に zap の合計額が並んでいたりします。
クライアントが zap リクエストを組み立て、ウォレットに送ります。
ウォレットが受け取り手の Lightning インボイスを支払います。
公開の zap レシートが publish されます。投稿にそれが表示され、誰でも見られます。
ワンタップ zap
zap を「いいね」並みに手軽にするために、クライアントは Nostr Wallet Connect(NWC)を使います。ウォレットの nostr+walletconnect:// リンクを一度クライアントに貼っておけば、あとはワンタップで zap できます。QR も、インボイスのコピペもいりません。
NWC 対応のウォレット:Alby Hub、Primal Wallet、Coinos、Zeus、Phoenix など。
zap を受け取るには Lightning アドレス(たとえば you@getalby.com)が必要です。最近のウォレットならたいてい自動で1つもらえます。
05
プライベートメッセージ
他のユーザーとエンドツーエンド暗号化されたプライベートメッセージをやり取りできます。今のやり方は NIP-17、別名 gift-wrap(ラッピング)メッセージです。各メッセージは暗号化されたあと、さらに外側のイベントで包まれます。そのおかげで、リレーは「誰が誰と、いつ話しているか」すら分かりません。
以前の DM 仕様(NIP-04、kind 4)はメタデータが漏れていました。kind 4 にしか対応していないクライアントの DM は実質プライベートではありません。多くのクライアントはすでに移行済みです。NIP-17 対応のものを使いましょう。
新しい DM に対応しているクライアント:Damus、Amethyst、Primal、0xchat、Coracle など。
グループチャットには NIP-29 があります。グループをリレー内に置く方式で、Discord のチャンネルに似ています。Flotilla が代表例です。
06
何ができるか
前にも書いた通り、Nostr はデータ共有のためのとても柔軟なプロトコルです。人々はその上に好きなものを作れます。まだ若いですが、すでに動いているものをいくつか紹介します:
🐦 Twitter の代替
Nostr は Twitter の代替として生まれました。そのための多くのクライアントがあります。どれも kind 1 のノートを使います。代表的なもの:
- Primal(web・iOS・Android)
- Damus(iOS)
- Amethyst(Android)
- Notedeck(デスクトップ、カラム表示)
- noStrudel(web)
- Coracle(web)
いくつか試して気に入ったものを選びましょう。
📝 ブログと長文
短いノートではなく長めの文章を書きたいなら、Yakihonne や Highlighter があります。他のすべてと同じく、投稿はクライアントをまたいでポータブルです。
💬 グループとコミュニティ
Flotilla は Nostr 上で Discord 風のグループチャットを提供します。グループはリレーの中にあり、自分で立ててもいいし、他の人のを使ってもかまいません。
🎥 配信とメディア
zap.stream は配信中に zap が飛ぶライブ動画サービス。Flare は動画ホスティング、Fountain と Wavlake はポッドキャストと音楽向けです。
🛒 マーケットプレイス
Plebeian Market や Shopstr を使えば、仲介者なしで sats で物を売買できます。
🧩 ゲーム
マルチプレイヤーゲームも Nostr 上に作れます。Jester はその例で、Nostr 経由のオンラインチェスです。
🔍 エクスプローラーとツール
njump.me はどんな nostr: リンクも共有可能な web ページに変えます。ants.sh はノートやプロフィールを探せる検索クライアント。nostr.watch はリレーネットワークの状態を表示します。
もっと完全な一覧は nostrapps.com と nostr.net にあります。
07
nostr の上に作る
Nostr の上にはまだまだ作れるものがたくさんあります。WebSocket を開いて購読するものはすべてクライアントです。署名済み JSON を WebSocket で受け付けるものはすべてリレーです。参入のハードルは低いです。
最初に読むと良いリソース:
ラテン語で 「Noster」 は「わたしたちの」という意味です。イタリア語の 「Nostra」、スペイン語の 「Nuestro」 も同じ意味。誰のものでもないネットワークにふさわしい名前ですね。