このブログで言ったことない気がするけど、素数bot (@sosuubot)というTwitter botを管理している。1時間おきにカウントアップした整数が素数かどうかをつぶやくだけのbotである。 6年前に作ったきりで、Python 2.7製で、Google App Engineで動いている。 デプロイの仕方もメモされずに6年間ずっと動いていた。 55555ぐらいの整数までの素数判定が行われているので、ほんとうに6年間動いていたのだろう。最終デプロイは2014/03/24と書いてあった。
55558 は素数ではありません
— 素数bot (@sosuubot) 2020年7月18日
当時はGCPの中のApp Engineではなく、GAEっていうものがあった気がする。6年前の記憶がもうない。誰か覚えていたら教えてください。 なんかGoogleアカウントを持ってたら無料で使えるプラットフォーム、という感じで、お金もクレカも持ってない高校生にはうってつけだったのだろう。 データベースぽいものがあるけどそのクエリ言語が分からない、とりあえずforループで回してデータ1件だけ取りましょう、みたいなこともやってたと思う。 そういうアプリケーションのソースコードは紛失した。
昔はGAEが好きで、このブログにもちょっと残ってた。
作ったことを忘れていては、たまに思い出すようなbotだったのだけれど、Python3に移行しましょう、古いSSLライブラリは廃止されます、みたいなメールが来ていた。 それも一昨年の話で、今日ちょっと思い立ってモダンにしてみよう、となった。
コードを見てまず最初に autopep8
にかけた。当時は高校生で、コーディング規約みたいな概念を知らなかった。
APIキーを key.py みたいなファイルに書いてからデプロイしましょう、みたいな感じで、今だったら環境変数として渡すと思う。
今見返すと恥ずかしいようなコードだけれど、それでも、こういったbotを動かすことができたという原体験は大切にしたい。
6年経過するといろいろなものが変わっている。
- Python 2.7からPython 3.8にアップデートした
- webapp2っていうフレームワークを使っていたのだけれど、ふつうにFlaskが使えるようになった
- 使い慣れてるしコードそんなに大きくないのでガッと書き換えて移行できた
- ちなみにPython3だとwebapp2は使えなくて、webapp3というのを使う必要がある
- app.yamlが大きく変わって、最終的に3行になった
- デプロイ対象外のファイルを .gcloudignore っていうファイルに記述するようになった
- バージョンを書く必要がなくなった。デプロイ時に指定できるし、自動でいい感じのバージョンを設定してくれる
- handlerとか書かなくてもgunicornでリクエスト受けるようになった
- サードパーティライブラリを使うとき、実装が置いてあるディレクトリを同梱してデプロイしていたのだけれど、requirements.txtがあればデプロイ時にpip installしてくれるようになった
- Windows上でGAEのSDKを使ってて、GUIでぽちぽちやってデプロイしてたけど、GCP SDKを入れて
gcloud app deploy ...
で済むようになった - 以前のバージョンに戻すときの操作が分からなかった*1ので、直してはデプロイしまくった
APIキーを含めてデプロイするとき、secrets manager的なものを使うとよいのだろうけど、secret.yamlを作ってデプロイするという形で無料で済ませている。 Herokuだったら管理画面から環境変数を設定できる。 手元にアクセストークンがなかったので、再発行して1時間以内にデプロイを成功させる必要がある、という感じでたいへんだったけど、よく考えたら趣味で動くbotに可用性を求められることはない。
botのプロフィールに、
なにかあったら @utgwkk までお知らせください
って書いてあるけど、お知らせをもらったことは運用当初にちょっとあったぐらいで、それ以降ずっとない。 作ったきりずっと動いていて存在を忘れてしまう、というのはよかったのではないか。
同じくらいの時期に、高校のホームページの緊急情報をスクレイピングしてお知らせするbotも作ったのだけど、そのソースコードは紛失した。 GAEで動いているもののコードをpullする、みたいなのできるのだろうか。