あなたの大好きなSNSを作ろう
あなたの大好きなSNSを作ろう
これは Nostr Advent Calendar 2025 1日の記事です。
突然ですが、みなさんの大好きなSNSは何ですか?私の好きなSNSは はてなハイク(サ終) / スドハイク です。NostrはSNS(やその他)を作るためのプロトコルですので、SNSを作るための仕様が用意されています。本稿では私がハイク風SNS「ノスハイク」を作った際にどのような仕様を利用したかをご紹介したいと思います。
ハイクって?
「お題でつながるミニブログ」[^1]をコンセプトにはてなが提供していたSNSが「はてなハイク」です。その後継サービスの1つとして有志により運営されているのが「スドハイク」です。機能としては、短文投稿、リプライ、画像添付、ふぁぼ、人フォロー、お題フォロー、人ミュート、お題ミュート、お題検索、等があります。これらはすべてNIPsに定義されている仕様を組み合わせて実現できるはずと考えました。
お題って?
「キーワード(お題)」に沿った投稿が主体であることがハイクの特徴です。キーワードは誰でも作成できます。作成されたキーワードにぶら下がる形でユーザーが投稿していきます。そのキーワードを実装するにあたってぴったりな仕様が NIP-28 です。
NIP-28って?
NIP-28 Public Chat にはチャンネルごとに分かれたチャットのための仕様が定義されています。チャンネルをキーワードに読み替えればハイクのキーワードが実現できそうです。
キーワード無し投稿は?
主体はキーワードへの投稿ですが、ハイクには個人idタイムラインが存在し、キーワード無し投稿は個人id投稿として扱われ、トップページには流れてきません。主に壁打ち用途として使われますが、これは NIP-28 では実現できなさそうです。しかし kind:1 (通常投稿)イベントで代替すればいいですね。[^2]
他の仕様は?
リプライは NIP-10 、ふぁぼは NIP-25 、画像添付は NIP-96/NIP-B7 、人フォローは NIP-02 、お題フォロー/人ミュート/お題ミュートは NIP-51 、お題検索は NIP-50 を使えば実現できます。[^3]
できた!完成!
ちょっと待ってください。ハイクユーザーだけで構成されたSNSならばそれでいいのですが、リレーから送られてくるNostrイベントは他のSNSで署名されたイベントも流れてきます。こんな謎の文字列が含まれた投稿も例外ではありません。
なにこれすごい nostr:nevent1…
これは引用 NIP-18 を含む投稿です。ハイクには引用もリポストもありませんが、他のSNSでは引用もリポストも容赦なく使われています。ここで取り得る選択肢は2つです。
- 無視する
- 対応する
引用もリポストもSNSを荒廃させた元凶だ!要らん!とつよつよ思想を堅持して無視するのも一つの選択肢ですが、私は対応することを選びました。こんな謎文字列表示されても嬉しくないし、別に嫌いではないので。
同様のことがカスタム絵文字 NIP-30 についても言えます。ハイクにはカスタム絵文字は無いですが、投稿やリアクションに普通に含まれたイベントがリレーから容赦なく流れてきます。これも対応しておいたほうが無難でしょう。
他にも Content Warning NIP-36 なんて仕様もありますね。数え上げたらきりがありません。
それは……本当にあなたが大好きなSNSですか?
NostrでSNSを作る際に取れる方針は2つに分かれると思います。
- 完全に独自の仕様と割り切ってオリジナルkindを定義し他のSNSと互換性を断つ
- 他のSNSと互換性を大切にし相互運用性を高める
私は2の方針を取りましたが、他のSNSと似たり寄ったりな仕様となってしまうのは仕方ないですね。1の方針を取って独自のSNSを築くのも魅力的ではありますが、他のSNSユーザーとの交流は何者にも代え難い魅力でもあります。
Nostrは何でも作れる自由なプロトコルですが、他の人たちと歩調を合わせることで生まれる価値というものがあり、それは既存仕様を無視して自分勝手に振る舞うことでは得られないものでもあります。自分が本当に求めていたものは何であるかを見失わずに開発方針を定めて楽しいSNSライフを送りましょう。
ライセンス
この記事はCC0 1.0 Universalの下で公開するものとします。
次回予告
明日2日は新田はず/壱岐てるさんが担当されます。よろしくお願いします。 → Nostrのログファイルの取得とその分析をしてみた2025年版(新田はずの場合)
[^1]:お題に沿って一言どうぞ――“はてな俳句”はTwitter風(1/2 ページ) - ITmedia NEWS [^2]:ハイクでは厳密には個人idもキーワードの一種なのですが、細かい差異には目をつぶりましょう。 [^3]:お題フォローに関して、NIP-51ではチャンネルブックマークとして定義されており、厳密にはフォローと違いますがこれも目をつぶります。
- Reference: https://adventar.org/calendars/12046
- Reference: http://h.hatena.ne.jp/
- Reference: https://h.sudo.ne.jp/
- Reference: https://nos-haiku.pages.dev/
- Reference: https://github.com/nostr-protocol/nips
- Reference: https://github.com/nostr-protocol/nips/blob/master/28.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/10.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/25.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/96.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/B7.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/02.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/51.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/50.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/18.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/30.md
- Reference: https://github.com/nostr-protocol/nips/blob/master/36.md
- Reference: http://creativecommons.org/publicdomain/zero/1.0/
- Reference: https://wanderingdj.jp/wordpress/2025/12/02/nostr%e3%81%ae%e3%83%ad%e3%82%b0%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e5%8f%96%e5%be%97%e3%81%a8%e3%81%9d%e3%81%ae%e5%88%86%e6%9e%90%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f2025%e5%b9%b4/
- Reference: https://www.itmedia.co.jp/news/articles/0712/13/news092.html
Write a comment