雑記

Twitterの自作botの仕組みが何となく分かる話

前回、Twitterのbotを作ろうとしたら開発者アカウント作成の記述問題で苦労した話を書きました。今回はもう一歩踏み込んで、作ったbotの仕組みについて書いてみたいと思います。前回と同様にプログラミングが分からない人でも読みやすく、何となく分かった気になれるような記事にするつもりですので、興味のある方はぜひ読んでみて下さい!

【復習】botの作成方法の種類

botの作り方には大きく2通りありまして、1つは既存のサービスを使う方法、もう1つはサービスに頼らず自分で作る方法です。何通りかのメッセージを定期的に呟くというシンプルなbotであれば、既存のサービスに登録してメッセージとツイートの頻度を設定するだけで済みます。サービスにも色んなものがあるので、もっと複雑な物でも同様にして意外と簡単に作れてしまうかも知れません。

今回僕が作りたいのはスマホゲームのイベント情報をツイートするbotで、事前に登録したイベント情報から現在開催中のものだけを選び、かつ終了間近の場合は残り時間も表示します。こうなるとある程度の処理が必要となるので既存のサービスは使えず、自分でどうにかする必要が出てくるのです。(あとは純粋にプログラミングしたいというのがありましたw)

考慮すべきポイント

自分で一から作る場合に考慮すべきポイントには以下のようなものがあり、ここではこれらを1つずつ見ていきたいと思います。

  • botをどこで動かすのか?
  • botをどうやって動かすのか?
  • botで何をツイートするのか?

ちなみに、ツイートするメッセージを作成する処理などのプログラムの部分についてはさすがにプログラミングが分からないと説明できないので、ここでは既に作成できたものとして話を進めます。

botをどこで動かすのか?

まず必要となるのがbotを動かす場所です。パソコンがあれば動かすことはできますが、そのために起動したり付けっぱなしにしたりするわけには行きませんよね。そこで今回はクラウドを使うことにします。

クラウドというのは、どこか遠いところにコンピューターなどのリソースがあって、それらをインターネットを通して使えるような仕組みです。この「どこか遠いところ」が雲みたいにぼんやりとしていることからクラウドと呼ばれるようになったみたいです。離れた場所にあるパソコンをリモートデスクトップで操作するような感じだと思ってもらえばよいでしょうか。

クラウドの中でも僕が使っていたのはAWS(Amazon Web Services)なので、今回もこれを使います。AWSの中にも色々なサービスがあり、プログラムを動かす場合はLambda(ラムダ)というサービスを使います。プログラムをセットしてボタンを押すだけで処理が走り出す優れものです!

botをどうやって動かすのか?

動かす場所はAWS上のLambdaにしましたが、これを動かすのに毎回手動でボタンを押すのは面倒です。タイマーをセットすれば動かしてくれるような仕組みが欲しいところですよね。(というか、そうじゃないとbotって言えないじゃん!w)

AWSのCloudWatch Eventsという機能を使えばそれを実現できます。これを先ほどのLambdaのトリガーに設定すれば、例えば今回なら0時、6時、12時、…というように6時間置きに実行するようになります!

botで何をツイートするのか?

ツイートする内容はプログラムで編集しますが、そのためにはゲームで今どんなイベントが行われているかの情報が必要になります。公式ページから取得するプログラムも書けなくはないですが、ちょっと大掛かりになり過ぎるので、今回は手動で作成したファイルを読み込むようにしましょう。

こんな感じのファイルです。少し見づらいですが、コンマ(,)区切りでイベント名と開始・終了日時が書かれています。(ちなみにこのような形式のファイルをCSV(Comma Separated Value)と呼びます。)

これをLambdaから読み込めるよう、同じAWSのS3というファイル置き場に配置します。これで現在のイベントに合わせたツイートができるようになります!

最終的な構成

こんな感じで、CloudWatch EventsLambdaを呼び出し、LambdaがS3にあるファイルを読み込んでイベント情報のメッセージを作成し、Twitter APIを使ってツイートするという流れができました!

ちなみに、残念ながらAWSの各サービスの利用には料金がかかるので無料でbotを動かすことはできないのですが、それでも今の簡単なbotであれば1日4回動かしても1年でやっと1円くらいという超低価格です。そもそもクラウド自体が初期費用を必要とせず使った分だけ料金を支払うというものなので、今回のようなものを作るのには適した場所なんですよね。

以上、botが動くざっくりとした仕組みの話でした。何となく分かった気になれたでしょうか? それではまた!