🐍
邪神ちゃんドロップキック画像bot (公式) を支える技術
背景
邪神ちゃんドロップキック画像botとは
アニメーション作品 邪神ちゃんドロップキック のキャプチャ画像を一定時間毎に投稿する Twitter の bot でした
元々は海外のファンの方が運営していた非公式の Twitter bot で、法的にグレー (というかアウト) だったことが影響しているのか、 Twitter の運営体制が変わったからか、 API が停止され動かなくなっていました。
一方で、作品ファンの間では長きに渡って親しまれており、止まってしまったことを悲しむ声が多く寄せられており、私もその一人でした。
許諾を得つつ bot を再始動することはできないか...と考えてたときに、公式アカウントから反応があったので、見切り発車で作ってみたところ、いつの間にか公式化することになりました。
今回は備忘録がてらこの bot のアーキテクチャについて期しておこうと思います。
構成図
バージョン 1
bot を作るにあたって、まずはざっくりと以下の要件を満たすことを目標としました。
- 可能な限りシンプルな構成とすること
- 動作にあたって、特定のベンダーのサービスに依存しないこと
- 画像の追加・削除が柔軟に行えること
これらの要件を満たすため、以下のような構成を取ることとしました。
- bot のアプリケーション自体は API 1.1 / 2.0 を適切にサポートしているライブラリのある Python で実装
- git リポジトリ内に画像データを含めてシンプルな構造に
- GitHub Actions を用いてコンテナイメージを作り、 Google Cloud Artifact Registry に Push
- Cloud Run jobs + Cloud Scheduler を利用して GAR のイメージを定期実行
アーキテクチャ図は以下のような形になります。
バージョン 2
バージョン 1 の構成で動作する形は作れましたが、いくつか問題も見つかりました。
- 以前の bot から画像データを引き継げるかもしれないことになったが、データが 10GB と膨大だった
- git のリポジトリで扱える範囲を超えている
- GitLFS を利用しても厳しい
- GitHub の LFS の無料枠も 1GB しかない
- 公式から GitHub のリポジトリに Pull-Request を送ってもらうハードルの高さ
そこで以下のように構成を変更することとしました。
- 画像データを git リポジトリに直接置くのをやめ、 Google Drive に置くように変更
- Google Cloud Storage も考えたが、公式側の利便性を考え Drive に
- このために Google One を契約した
- 元々 GMail が容量不足だったので良い機会だった
- Python スクリプトから Drive にサービスアカウント経由でアクセスするように
- オンデマンドで画像を取得
アーキテクチャ図は以下のようになりました。
Bot のソースについて
Bot のソースについては GitHub で公開しています。
Python はそこまで書き慣れていないので、何か気になった点などがあれば気軽に Pull Request など送っていただければと思います。
Discussion