【#コバンザメのつぶやき】#くじスペ通知bot ベータ版リリース【京V同情シス部門】

はじめましての方ははじめまして. そうでない方は…… 一体どこで出会ったんでしょうねぇ お世話になっております (修士) 1 年生のぐぐたくと申します. よろしくお願いします.

今回は

京都大学バーチャルYouTuber同好会が運営する VTuber 紹介ブログ "V推しなんしょ" 第 89 回で紹介させていただきましたくじら大好きアイドル VTuber のくじさきさん.

ku-vtuberlove.hatenablog.com

くじさきさんと言えば限界大学生そして限界トゥイッタラー. くじさきさんのトゥイートを定期的に見に行ったりトゥイート通知をオンにしたりしているコバンザメ (くじさきさんのファン) も少なくないかと思います. 知らんけど.

また, 最近はトゥイートだけでなく Twitter Space (#くじスペ) での雑談や弾き語り配信もそこそこの頻度で実施されています. 課題やらないといけないのに昔の日記引っ張り出してきて「くじさき全然変わってないくじね」とか言って全然課題進んでなかった回があったりなかったりしたそうな. え?超気になる?残念ながらアーカイブとかは無いのでぜひ次の #くじスペ は見逃さずに覗いてみるといいかもしれないくじですね.

……って Twitter Space って通知機能無いからどうやって気付けちゅうねーーん!(大阪人渾身のツッコミ (満点大笑い (読んでる人全員明日腹筋筋肉痛で布団から出られなくなる)))

人間には #くじスペ が始まるのをじっと Twitter アプリ眺めながら待つのは無理やねんな. ということでコンピュータに任せましょう.

ようやく本題

前置きがずいぶん長くなってしまいましたが, つまり「くじさきさんが Twitter Space をやっているかどうかをコンピュータに定期的にチェックさせて, 開始したタイミングで何らかの方法でコバンザメに通知してもらおう」という発想です.

ということで作りました.

f:id:ku_vtuberlove:20220104210451p:plain

使い方

Step 1. くじスペ通知 bot トップページにアクセス

キービジュアルは YuukaUta 先生に描いていただきました.
twspace.kuzisaki.fans

Step 2. [さっそく通知を設定する] をタップ / クリックし, Twitter アカウントでログイン

f:id:ku_vtuberlove:20220104210729p:plain

Step 3. [+ 通知先を追加] から通知先を設定

f:id:ku_vtuberlove:20220104210951p:plain
初期リリースバージョン (v1.2.x) では Discord Webhook bot と任意の URL への GET / POST Webhook に対応しています.

Step 4. #くじスペ が始まると上記手順で設定した通知先に通知

f:id:ku_vtuberlove:20220104211034p:plain
Discord Webhook bot だとこんな感じ

仕組み

REST API サービス

Node.js で動作しています.
Express.js で HTTP サーバを立てて, 通知先の一覧取得 (GET), 新規登録 (POST), 変更 (PUT), 削除 (DELETE) の機能を実装しています.
通知先は Cloud Firestore に記録していて, それぞれのエンドポイントは主に Cloud Firestore の操作を行います.
それぞれのエンドポイントへのリクエストには Firebase Authentication のトークンが必須で, サーバ側でトークンの検証とユーザ情報との交換を行っています.

通知サービス

Node.js で動作しています.
Twitter API v2 Spaces lookup endpoint で特定の Twitter ユーザが今持ってる Twitter Space の一覧を node-cron で定期的に取得します. 前回の取得結果を保持しておき, 今回の取得結果と比較することで, 前回と今回の取得の間に新たに Twitter Space が開始 / 終了したか, 変化がないかを判定します.

開始を検出したときは Cloud Firestore から通知先の一覧を取得し, axios と Promise.allSettled() を用いて HTTP リクエストを投げます. 通知と同時に Cloud Firestore に Twitter Space ID と開始日時を記録します.
終了を検出したときは特に通知はせず, Cloud Firestore に終了日時を追記します.

Public Beta Release に関するお願い

今回のリリースは正式リリースではなく, サーバの耐久テストやプログラムの要改善箇所の洗い出しなども兼ねたベータ版リリースとなります.
そのためサーバダウン等によるサービス障害, サービスを停止しての定期的なメンテナンス等の実施等が発生する可能性があります. 予めご了承ください.

また, 皆様からのフィードバック (不具合報告, 改善要望, 新機能提案, 感想 等) をもとに正式リリースやサービス提供範囲の拡大に向けてサービスの改善を目指します.
些細なことでも構いませんので積極的にフィードバックをお送りいただけますと幸いです. フィードバックは Web サービス内のボタン / リンクよりお送りいただけます.

今後のサービス展開 (予定)

上記の通り, まずは皆様からのフィードバックをもとにサービスのブラッシュアップを行います. おそらく最初のアップデートは「通知先として設定できるサービスの種類を増やす」とかだと思います. また, サーバの利用データと合わせ, 安定してサービスを提供できるよう調整を行います.
その後ソースコードの公開, OSS 化などに向けていろいろと準備をしたりしなかったりという噂があるらしいです. 知らんけど.

最後に

よければ使ってみてね. よろしくお願いしますくじ.


開発・運用・記事執筆: ぐぐたく / Yuta NAKAMIZO
原案: すとら
キービジュアル: YuukaUta