Nostrおみくじについて(Nostrasia2025)
これはNostrasia 逆 Advent Calendar 2025の4日目の記事です。 https://adventar.org/calendars/12212
Nostrasia2025でNostr神社のインタラクションとしてNostrおみくじを作りました。

結果的に約60人ぐらいに利用してもらえたようです。 当日の来場者が百数十人程度だったといううわさなので約半数には利用してもらえていたこととなり結構盛況だったのではないかなと思いました。
デザインのあんずさん、当日の設置オペレーションして頂いたKojiraさん、ならびにイベントの運営の皆様ありがとうございました。
どんなもの?
当日行けなかったりみてない人向けの説明

- iPadのデバイスに参拝するとQRコードが表示される。
- QRコードを読み込んでビットコインのLightningウォレットで支払いを行う(NostrのイベントへのZapも可能)
- おみくじ筒が回転しておみくじ番号が出てくる
- デバイスの横のおみくじの入った引き出しから番号のおみくじ札(物理)をもらう
このうち自分が作った部分は1~3のアプリケーション部分になります。 しかしNostr神社(物理)やおみくじ札(紙)のクオリティが非常に高く全体的な体験として面白かったです。
ひとつ惜しいとすればキャッシュレス決済が一般に普及している現在では「デジタルで支払って物理でなにかもらう」というのはまあ普通かなと思われてしまったかもなと思いました。 つくって裏側の仕組みを知っている自分は会場でやってみると、やはりちゃんと動作して物理的なおみくじがもらえるのはかなり感動的ではありました。
おみくじを作ることになったきっかけ
デザイナーのあんずさんがNostrこんな投稿をしていたことがきっかけです。

スレッドで要件をつめて「ゔぁいぶこーでぃんぐ」でPoCを作りました。
(ところでLightningNetworkで支払ってそれに対してデータをなにか返すというのは一般的に L402/LSAT が実現しようとしていることじゃね…?)
要件
詳しい仕組みについてはほかのNostrのアドベントカレンダーとかにでも書こうかなとおもいますがこんな仕組みです。

https://github.com/ocknamo/nostr-fortune-slip/blob/main/docs/system-architecture.md
L402は使いませんが、NostrのzapとCoinosのAPIを使ってリアルタイム性とセキュリティの両立を狙った設計になっています。 現在のNostrおみくじの仕様からはオミットされましたが、会場で公開した段階ではNostrイベントに直にZapした場合も検知する仕組みも含まれていました。
画面はおみくじ画面と設定画面のみのシンプル構成。
PoCを作った
できたのがこれ。 ヴァイブコーディングで3日位で作ったよ。

(いまみるとデザインだせえええ。うわああああ)
めっちゃいいデザインが来る
あんずさんがデザイン作ってくれるといってくれてたので待っていたところクソかっこいいいデザインが上がってきました。
流石にFigmaは共有できないので遠目で見てください。👁

デザインの反映
めちゃかっこいいデザインだったんですが、上がってきたのがけっこうギリギリだったこともあり突貫で対応しました!
そしてできたのがこれ。


あとでリファクタして気が付きましたがこの時点のコードをよく読むと結構ひどいことになっているのですが、しかしなんとかちゃんと動くものが完成し動作確認も完了。
うおおおお。
当日どうだったか
ローカルで独立して動くシステムの特性上、現場で入れなければいけないセンシティブな設定値がいろいろあり、設定値の作成からお任せすると絶対に当日オペレーションで詰まることに気がついたため、Kojiraさんに自分が作った設定値の内容をまとめてメールで送って設定していただきました。
これはいい判断だったようで当日はトラブルなくセッティングし開始できたようです。(たぶん。聞いてないだけでなんかトラブってたらごめん。)
当日朝は用事があり家いたのですが現場で上がってくる初期課題をリアルタイムで修正したり悪戦苦闘していました。

サービスリリースの初期対応みたいだなこれ(そうだが)。
忘れてたけどわれながらけっこう頑張ったかも。
良かった点
- リアルタイム支払い・リアルタイム検知の要件が完全に満たせていた
- 普通に使ってもらえた
- 普通というのは、裏で色々やっているが特に違和感を感じさせないUXにできたということである。(たぶん)
- あんずさんのデザインかっこよかったので全力で反映した
- 会場のネットワークは弱めだったようだが問題なく稼働した
反省点
- NostrのイベントへのZapはいろいろ問題があった
- 意味が伝わらなくてほとんど使われなかった
- 現場にいない人が間違えてZapしてしまう事故
- 実装を複雑化してバグを誘引した
- Zapでsatsが飲み込まれておみくじがひかれないバグ
- satsが飲み込まれておみくじがひかれないバグはLNのQRの方でも起こっていた可能性があるが多分「NostrのイベントへのZap」のせいで実装が複雑化したせい
- 飲み込まれた方でつぶやいてた方には返金しました :sorry:
- iPadでのボタンのスタイル崩れ。現場で使う実機端末での確認ができなかったのが痛い。iPadほしい
- そこまで慣れていないTailwind CSSをいきなり使ったが避けたほうが早く完成できたと思う
お賽銭の行き先
頂いた賽銭は自分がテストで投げた100satsあまりを除きすべてOpenSatsに寄付させていただきました!!

その後のNostrおみくじ
Nostrおみくじがその後どうなったかというと…実はまだあるのです。
リポジトリ: Github
サイト: Nostrおみくじのサイト
イベント後にあんずさんにノーマルモードデザイン(桜)を頂いたのでそちらを反映させていただきました。
その他の機能の変更点として以下があります。
- NostrのNoteへのQRの廃止(NostrイベントへのZapは検知しない)
- おみくじ番号を可変に
- おみくじに対してメッセージを表示する機能を追加し紙のおみくじを用意できなくても使えるようになった
あとめちゃくちゃリファクタリングした。
というわけで、他の場所やイベントでも準備さえできれば使用できる状態になっております。自己責任の範疇でご利用ください。
感想
個人的に構想してたライトニングのバインディング(自動販売機)システムのベータ版ができたという面があり、構想はいろいろ以前から考えてきたものだったのでそれを出力できたのが良かったです。(3日でできたと書きましたが3日でできたわけではない…)
感想としては、あんずさんと仕事できてたのしー。使ってもらえてうれしーって感じでした。
Write a comment