🐍

邪神ちゃんドロップキック画像bot (公式) を支える技術

2023/05/28に公開

背景

邪神ちゃんドロップキック画像botとは

アニメーション作品 邪神ちゃんドロップキック のキャプチャ画像を一定時間毎に投稿する Twitter の bot でした

元々は海外のファンの方が運営していた非公式の Twitter bot で、法的にグレー (というかアウト) だったことが影響しているのか、 Twitter の運営体制が変わったからか、 API が停止され動かなくなっていました。

https://twitter.com/jashinchan_img/status/1661112279473987599

一方で、作品ファンの間では長きに渡って親しまれており、止まってしまったことを悲しむ声が多く寄せられており、私もその一人でした。

許諾を得つつ bot を再始動することはできないか...と考えてたときに、公式アカウントから反応があったので、見切り発車で作ってみたところ、いつの間にか公式化することになりました。

https://twitter.com/jashinchan_PJ/status/1662272667263836161

今回は備忘録がてらこの bot のアーキテクチャについて期しておこうと思います。

構成図

バージョン 1

bot を作るにあたって、まずはざっくりと以下の要件を満たすことを目標としました。

  • 可能な限りシンプルな構成とすること
  • 動作にあたって、特定のベンダーのサービスに依存しないこと
  • 画像の追加・削除が柔軟に行えること

これらの要件を満たすため、以下のような構成を取ることとしました。

  • bot のアプリケーション自体は API 1.1 / 2.0 を適切にサポートしているライブラリのある Python で実装
  • git リポジトリ内に画像データを含めてシンプルな構造に
  • GitHub Actions を用いてコンテナイメージを作り、 Google Cloud Artifact Registry に Push
  • Cloud Run jobs + Cloud Scheduler を利用して GAR のイメージを定期実行

アーキテクチャ図は以下のような形になります。

Version1

バージョン 2

バージョン 1 の構成で動作する形は作れましたが、いくつか問題も見つかりました。

  • 以前の bot から画像データを引き継げるかもしれないことになったが、データが 10GB と膨大だった
    • git のリポジトリで扱える範囲を超えている
    • GitLFS を利用しても厳しい
      • GitHub の LFS の無料枠も 1GB しかない
  • 公式から GitHub のリポジトリに Pull-Request を送ってもらうハードルの高さ

そこで以下のように構成を変更することとしました。

  • 画像データを git リポジトリに直接置くのをやめ、 Google Drive に置くように変更
    • Google Cloud Storage も考えたが、公式側の利便性を考え Drive に
    • このために Google One を契約した
      • 元々 GMail が容量不足だったので良い機会だった
  • Python スクリプトから Drive にサービスアカウント経由でアクセスするように
    • オンデマンドで画像を取得

アーキテクチャ図は以下のようになりました。

Version2

Bot のソースについて

Bot のソースについては GitHub で公開しています。

https://github.com/zeriyoshi/OpenJCDK

Python はそこまで書き慣れていないので、何か気になった点などがあれば気軽に Pull Request など送っていただければと思います。

GitHubで編集を提案

Discussion