表題の通りです。
なんで今更自前でbot作るんだよ
最近はある程度の定型発言をするだけなら便利なサービスがあります。
私の大好きなbotの一つである田舎の昼のサイレンbotもtwittbotを利用して運用されています。
ですが上記のサイレンbotはサイレンという ちょうど を伝えるべきであるのに大体は12:04くらいにサイレンが鳴ります(多分サーバの時計が微妙にずれてるとかだとは思います)。このことが許せないので自分で12時ちょうどに発言するbotを作りました。
(サイレンbot自体は大好きです、大切なことなので二度言います)
成果物
同じサイレンじゃつまらないかなと思ったので別のを作りました。12時に鳴くルビィちゃんbot @noon_pigii_bot です。12時ちょうどにピギィと鳴きます。多少のズレは許してください。
ルビィちゃんかわいいですよね。
ソースも置いておきます。
https://github.com/celeron1ghz/twitter-bot-pigii
実装
最近の世の中は便利で、こういうちょっとしたスクリプトを動かすのに良いlambdaと言うサービスがありますのでちゃっちゃと作ります。
serverless
ちょっと前に正式版になった serverless を使います。
使い方はほんと簡単で
-
Administrator Access
権限があるユーザのkeyとsecretを~/.aws/credentials
なり.envrc
なりに設定する sls create -t aws-nodejs
sls deploy
だけでHello Worldは動いてしまいます。すごい。ほんとロジックを書くことに集中できる感じです。
設定に書けばscheduled eventも設定してくれる、ちょうべんり。
scheduled eventがズレる問題
今回悩んだのはscheduled eventは指定時間ちょうどに発火してくれることを保証していないということです。なので2分前に起動してちょうどになるまでsleepするという泥臭い方法を取りました。今のところはscheduled eventsの発火は遅れても1分くらいなので大丈夫かなという感じですが、lambdaはタイムアウトの最大が5分なので遅れが広がるようなら要調整。まぁ詳しくはソースをみてください。
忘れちゃいけないのはscheduled eventsの時刻はUTCなのでcronの指定は9時間ずらすことくらいでしょうか。
まとめ
lambdaは月ごとに無料枠が湧いてくるサービスなので、serverlessも便利ですし、もっとこういうクソみたいなコードをたくさん書くべきだと思います。