今年もやってきました。
こちらは「クソアプリ Advent Calendar 2025」の15日目の記事となります。
毎年ネタに悩むクソアプリですが、今年は早めに降りてきたためじっくり構想を練ってから着手することができました。
アイデア
降ってきたアイデアは、「音のない配信プラットフォーム」でした。
配信者は普通に音声で配信しますが、視聴者には音声のままはとどかず、Speech To Textの結果だけが表示されていく。というものにしようかなと。
出来たもの
出来たものがこちらの「VoidVoice」です。
VoidVoiceとは
VoidVoice (ボイドボイス/ヴォイドヴォイス)は、
配信者の音声がリアルタイムにテキストへ変換され、
観測者(視聴者)へ一方向に届けられる配信サービスです。観測者(視聴者)は、
気になる発信点(配信部屋)に接続することで、
リアルタイムの配信をテキストで楽しむことができます。観測したテキストはしばらくすると流れ去り、
過去ログとして残ることはありません。また、
リアルタイムの観測者数(同時接続数)は
配信者にも観測者にも表示されません。
ただ、“気配”として曖昧に示されるのみです。VoidVoice は、
音では届かず、テキストとしてだけ現れる配信体験を提供します。
遊び方
空いている配信部屋でご自由に配信してください。誰かが見てるかもしれないし見てないかもしれません。
配信部屋が配信中になっていたら観測してみてください。配信者の音声は届かずただテキストだけが通り過ぎていきます。
技術スタック
今回はこのような感じにしてみました。
- ランタイム、フレームワーク、ライブラリ
- Bun v1.3.4
- Astro v5.x - フロントエンド
- Bun.serve - バックエンド(API, Websocket)
- Nginx (Reverse Proxy)
- Font Awesome v6.7.2
- AWS
- EC2 (Cloud9)
- ALB
- WAF
- Certificate Manager
- Amazon Transcribe - 音声テキスト変換サービス
- Cloudflare
- DNS
- 相棒
- チャッピー(ChatGPT) - アイデア相談、厨二友達
- コピー(GitHub Copilot) - コーディング支援
- GitHub Codespaces (最近はもうローカルマシンで開発しなくなってきた)
- サービス
- Placehold.co - ロゴ画像作成
宇宙っぽい感じのためにAstroを選んだわけではなく、勉強がてらAstroにしようかなぁ程度で選びましたが、結果的には世界観的にも技術的にも大正解でした。Astroすごい好きかもです。
作っていく
Amazon Transcribe を試す
まずは、Amazon Transcribe(Speech To Textサービス)がどんなものか試していきます。
AWSのコンソールからサクッと試せるので、適当に喋ってみて精度などを見ていきます。
感想としては、ゆっくり話さないと正確に写してくれないのと、一般的な用語以外(商品名や商標名)はほとんど認識されないなぁという感じでした。
用語の方は「カスタムボキャブラリー」を作っていけばなんとかなりそうでしたが、今回は割愛しました。
Amazon Transcribe のハンズオン
AWSのGitHubにハンズオンがあったので、それを動かしてみます。
数年前のリポジトリでしたが、アクセスキーだけ設定すればほぼそのまま動きました。
これはあまりに簡単に動いたので、すぐ次の作業へ。
コピーに頼んで、今回のサービスのアイデアである「配信部屋」と「視聴部屋」に分けてもらいます。
ロビーも作ってもらいます。
視聴部屋の方は、コピーに頼んで「スターウォーズのあらすじのやつみたいに上に消えていく風のやつ」にしてもらいました。結構気に入ってます。
ここまで1時間程度
これで終わっておけばよかった。。ここから沼が始まりました。。
拗らせていく
スターウォーズ風にしたことで、妄想が膨らんでいきました。
「この配信者たちはどこから配信してるんだろう」「宇宙?ディストピア?」「視聴者たちはどこから聴いているんだろう」「いや、この場合は”聴く”っていうのか?」などなど・・
そんなときは頼れる厨二友達、チャッピーに聞いてみましょう。
早口ワロス
コンセプト確定
仲良しかよ
用語定義
新しいリポジトリにAWSのハンズオンを移植しつつBun.serve用やAstro用に微修正していましたが、途中で上のように厨二が暴走してしまったため、リネームとリファクタリングが発生しました。
リファクタリングの効率を上げるため、AGENTS.md に用語定義を追加しました。
これはかなり効果的でした。コピーの生成コードにbroadcasterとかlistenerが出なくなりました。すごい。
サービス名決定
長くなるので省略。チャッピーと仲良く相談。
フレーバーテキスト
ここからこれの推敲に二晩かけた
「滲む」の登場ではしゃぐ
疲れてたんだと思う
完成
その後も、なんだかんだやりとりして微調整して、この辺で完成としました。
リポジトリも置いておきますので、ご自由にどうぞ。
感想
Astroが良かった
今回はAstroがかなり良かったです。
アイランドを何も入れなかったため、インタラクティブな部分を生のJSでやってしまってとても疲れたので、このくらいのアプリでもReactかhtmxかをさっさと入れた方が良かったかなというのはありました。
ただ、それ以外は全然優秀でした。
このくらいのものを最短で作る分には必要十分でした。
Websocketの勉強ができた
なんだかんだ苦手意識があって避けてきたWebsocketですが、今回しっかり使うことができて、なんとなくですが理解してきた気がしています。
デプロイ周りでもかなりハマりましたが、勉強にはなったので、今後何かに活きればいいなと思います。
もう少し技術的なことしたかった
拗らせてしまったことで時間使ってしまったので、途中で思いついたアイデアまで着手できませんでした。
どこかひとつの配信部屋を、Amazon Transcribeを使用しない自前サーバーからのWebsocketで自動的に配信するBotみたいにしたいなーと思ってたのですが、できませんでした。
時間があったら挑戦してみたいと思います。
BGM
チャッピーとLocus候補選んでる時に「Rigel(リゲル)」が出てきてからもうずっとこれ流れてました。
※追記
エモ延長戦
おわり
あー楽しかった。



















