Google Calendar に登録している当番表を使って Slack Room のトピックを更新する

Google Calendar に登録している当番表を使って Slack Room のトピックを更新する Hubot Script を作りました。
自分が働いている KAIZEN platform Inc. のエンジニアチームでは、現時点で、日々のカスタマーサポート業務から発生する技術的な質問・調査に日替わりで対応する、LiveOps マスター、火・木の週二回、(ほぼ自動化されているものの) デプロイの進行を行う、Deploy マスター という、2つの当番があります。
開発したきっかけ
今まで、毎朝 10:00 から行われる、デイリースクラムなどで、アナログに誰が当番だったか確認していましたが、休暇などで、イレギュラーな進行が発生すると、前回、誰まで担当が回ったか、交代してもらった場合、次は誰に回せばいいかなど、混乱する問題が発生しました。
それに対応するため、それぞれの当番のカレンダーを作成しました。

緑がデプロイ、オレンジが LiveOps です。デプロイが2日にまたがっているのは、本番デプロイ前日に QA 環境にデプロイするためです。
Slack 対応
それぞれの当番には、専用の Slack ルームがあるので、それぞれのルームのトピックを更新する Hubot Script を作りました。
以下のコマンドで、呼び出したルームに応じて、トピックを更新します。
hubot update topic毎朝 6:00 に自動的に Topic 更新を行うため、hubot-cron を使いました。Hubot は、自分自身のメッセージには応答しないため、別に Cron 用の Hubot を立ちあげています。
cronbot 0 21 * * 0-4 say hubot update topic日〜木の 21:00 になっているのは Heroku の Timezone が UTC に設定されているためです。
Slack API
現時点では Webhook から /topic コマンドを叩いても、更新ができないため、Slack API の channels.setTopic メソッドを使う必要があります。
Slack API は OAuth 2 を利用しており、ユーザーに対して発行される Access Token を使うため、発行したユーザーが Topic を更新している様に見えます。(冒頭のスクリーンショットを参照してください)
今後、同じ様に、Slack API を利用したユースケースが増えれば Bot 用にアカウントを取ることを検討すると思いますが、現時点では、Topic 更新にしか使われていないため、現時点では長瀬個人の Access Token を使用して、スクリーンショットの様に、毎朝 @ngs がトピックを更新している様に見えます。
実装コード
長いですが、npm で公開するほど未だ汎用化できていないので、そのまま貼り付けます。
関連記事
2014-08-24
2014-08-02
2014-08-01