はじめに
TinyGo Conference 2025 参加したんですが、めちゃめちゃ楽しかったです
当日いろいろ楽しんだんですが、その中でも特に印象に残ってるのが uji さんの発表内容 ではなく 首から下げている便利デバイスでした。
— uji (@uji_rb) 2024年7月28日
便利すぎるだろ...ということで無事イベント終了後秋月で即購入し、今に至っております。
開催が秋葉原だったので、地の利を活かしてきました #tinygo_conf pic.twitter.com/G0ZBXCvhzo
— convto (@convto) 2025年10月12日
新しいデバイスや技術が登場したらとりあえず uuid v4 を出力させるのが古来からの習わしなので、やっていきます
新しいライフスタイルの提案、あるいは茶番
日々 uuid v4 を生成する中で、 rand source 何にするか頭を悩ませたことはありませんか?
基本的には /dev/urandom などを利用すると思うのですが、真心込めた真性乱数で作りたい方もいらっしゃるはずです。 昨今のビジネスシーンでは疑似乱数を使った uuid v4 を利用するのは失礼とされているため、フォーマルな場では各位必殺の真性乱数を使っていることも多いです。
真心を込めたあなた自身の uuid v4, ほしくないですか?簡単に生成できると非常に嬉しそうですよね。ここで提案するのが wio terminal による uuid 生成です。
Wio Terminal は3ボタンに加えて5入力のジョイスティック、マイク、光センサー、加速度センサーなどを備えています。 これをビジネスバッグに忍ばせておけば、あなたの自然な活動からエントロピーを収集し、真心込めた uuid v4 が生成されます。
想像してください。日常で貯めたエントロピーが収集され、ストリームで uuid v4 が生成される暮らしを。チャットツールに連携して流しておけば、いつでも新鮮な uuid v4 を利用できます。
あなたの暮らしから生成される、完全にパーソナライズされたあなただけの uuid v4 をお届けします。
できたもの
こんな感じでガチャガチャしたり喋ったりするとエントロピー溜まって、量貯まると uuid v4 が出力される
wio terminal + tinygo でめちゃめちゃいらんもの作ったので紹介 pic.twitter.com/mVTR60w0p9
— convto (@convto) 2025年10月18日
Wio Terminal は各種センサーが搭載されていて、せっかくなのでこれらをいい感じに使う
uuid v4 の生成はいうたら 16bytes くらいの rand を取れればよく、センサーからの入力こねて出力すればそれっぽいやろ!ということでやってみました。
各種イベントの取り方など調べるの大変と思うかもしれませんが全然そんなことはなく、 sago35 さんが example をまとめてくれているのでこれをみながら作業してめちゃめちゃスムーズに実装できました。ありがとうございます!
実装の基本方針
- いろんなセンサーから十分な情報が集まるまでガチャガチャ入力受け付ける
- 入力をいい感じのルールで変換してバイト列を得る
- 上記をもとに uuid v4 をつくる
みたいな感じにしています。
「いい感じのルール」が重要なんですが、これは簡素に各種操作に文字を割り当てて、それを連結させて、さいごにsha256ふって先頭16bytesをとる、という感じにしています。同じ操作をした人と同じ uuid v4 が出力された方が運命を感じて便利なため。
実装
ここにおいてるので気になる方は読んでみてください
https://github.com/convto/wio_terminal_uuid/blob/main/main.go
今後の展望
- 常時起動させてストリームにして Slack とかに流したい
- 内部的には操作種別の列なので、それをそのまま渡す web ui 作りたい
- あなたの uuid とエントロピーがシェア可能に
- 加速度センサーも利用したい
- やや面倒でやってない
- v7 対応とかもしたい