はじめに

今日の東京はクソサムイ。。。皆様もお体壊されないように。。。

Docker

Docker meetup #2 というイベントに行ってきた。

僕はここ半年くらいはどっぷりフロントエンドばかりやっており、サーバーサイドはてんで分からず、いつの間にかサーバーサイドは「食わず嫌い」改め「触らず怖い」になっていた。 (LAMP環境みたいなのは構築できますが、複数台構成とかは経験がない。。) でもDockerに関する発表を見ている限り、全然怖くないじゃん、という感想になった。

そもそもDockerは現行の仕組み上、シェルスクリプトのような感じで書くことが出来る。1行1コマンドのような感じ。 このあたりの気軽さは、その仕組み上がっちりした感じになるChefと比較すると明らかに敷居が低い。

そんなわけで、かねてよりちゃんと実装し直さないといけないなと思っていた、とあるTwitterボットをDocker上に載せることにした。

Google Compute Engine

Docker meetup #2の会場はGoogleの東京オフィスだった。そこで500ドル分のクーポンを貰った。 これを使わない手はないし、Googleの人もGCEでDocker使いましょう!みたいなこと言ってたので使ってみた。

GCE自体は、GoogleのUIで操作できるAWSという印象。実際提供しているもの自体はそこまで違うわけでもないし、そりゃそうなんだけど。 gcutilというツールがあり、基本的にはこれを使ってSSH接続したりする。直接SSHコマンドもOKなんだけど、gcutilは鍵のやり取りなんかもうまくやってくれているので楽。

あと財務管理が楽だという話もあるようで。詳しくは以下スライドをチェック。

Ruby

もともと運用していたTwitterボットは、Webサービスを使って静的にツイートさせていた。 ただ、元となるデータがGoogleスプレッドシート上で管理してあったので、これを直接参照できるようにしたかった。 とりあえず、まずはツイートする「仕組み」を作成することに。

Rubyのtwitterモジュールで、ファイルを実行するたびに(ruby twbot.rb)ツイートするようにした。 twbot.rbでは、だいたい以下の様なことをやっている。

  • 「データソース(Googleスプレッドシート)からデータを取得」
  • 「記録しておいたindexをインクリメントし、それを取得データの配列のindexとして取得」
  • 「取得データのツイート」
  • 「前回ツイートした配列のindexを記録」

なんでRubyかというと、知っている限り一番ラクに目的を果たせるのがRubyのtwitterモジュールだったから、という。

Google Apps Script

上記サイトを参考にしつつ、スプレッドシートのデータをJSONとして得るクチを作成した。このスクリプトの場合は全件をJSONで返すし、ボットスクリプトで「どれをツイートしたか」を保持する仕組みが必要になる(というか僕が作ったものはそうなっている)。

けれど、実際やるんだったらGAS側でカウンターを保持するようにするのが色々楽かもしれない。getSequence()とかそういうノリで、実行するたびに1件ずつ取得していく感じ。

結果

たまに壊れてる時ありますが、原因調査中だったりします。

ともあれ、無事にボットを動かすことが出来た。

まとめ

Docker面白い。うまくやったら結構いいかんじなのでは。

追記

ふと思ったが、これJenkinsでやればいいやんけ案件だった