HubotでSlackに毎日目標を通知するbotを作る (環境構築編)
Hubotとは
Hubotの構成
なぜbotにHubotを使うのか?
- Hubotを使えばメッセージの受信・送信やチャットツールとの連携などbot実装に必要な最低限の機能を自分で実装せずで済む
- CoffeeScriptやJavaScriptで書けるので、学習コストも低い
- Herokuで運用すれば無料で使えるので、サーバー代もかからず手軽
- npmも使うこともできる
Hubotでできること
実装例
データの永続化
- Hubotはデフォルトだとメモリ上に情報を保持するのでHerokuの再起動が走ると消えてしまう
- 永続化のためにはbrainという仕組みを使う。FileやRedisに保存したりする。あとは外部のAPIサーバーヲ使うとか。
- ここら辺は模索する
モジュールインストール
- npm install -g yo generator-hubot
Hubotの雛形作成
$ mkdir hogehoge $ cd hogehoge $ yo hubot ? Owner masaru ? Bot name daily-goal-reminder ? Description A simple helpful robot for your Company ? Bot adapter slack create bin/hubot create bin/hubot.cmd create Procfile create README.md create external-scripts.json create hubot-scripts.json create .gitignore create package.json create scripts/example.coffee create .editorconfig
動作確認
$ ./bin/hubot daily-goal-reminder> daily-goal-reminder ping daily-goal-reminder> PONG daily-goal-reminder>
Slack側の準備
- 以下のURLからHubotを登録します
- HubotはSlackと連携できるアプリの1つです
https://my.slack.com/services/new/hubot
アイコンを設定する
- 好きなアイコンを設定したりできます
Hubot側の準備
$ export HUBOT_SLACK_TOKEN=[設定画面に記述されたAPIトークン] $ ./bin/hubot --adapter slack
動作確認
- ローカルのPCでhubotを起動した状態でSlackにボットを招待して話しかけると返信してくれる
Herokuとの連携
- Herokuでbot用のアプリを作る
Heroku用のCLIをインストール
$ brew install heroku/brew/heroku
Herokuにログイン
$ heroku login
Herokuにプッシュ
$ git init $ git add . $ git commit -m 'first commit' $ heroku git:remote -a [アプリ名] $ git push heroku master
console.error(`a bug known to break npm. Please update to at leastエラーがでる
- package-lock.jsonが依存関係で悪さをしているぽい
- 名前を変更してプッシュしたら通った
Herokuの環境変数にSlackトークンを登録
$ heroku config:add HUBOT_SLACK_TOKEN=[APIトークン]
ここまででHeroku上でHubotが動くようになっている
Herokuの起動設定を行う
定期的にpingしてsleep防止
Herokuのfreeプランは30分以上アクセスがないとスリープするので、 NewRelicのアドオンを入れて定期的にpingします。
Process Schedulerのインストール
さらにfreeプランでは1日6時間は必ずスリープさせないといけません。 そのため使わない時間帯はスリープさせるようにします。FreeプランでOKです。
Overviewからアドオンをクリックします。
APIキーを求められるのでManage Accountからコピーします。
スリープさせても良い時間のwebのdyno数を0に設定します。 選択したい範囲をドラッグすると一括で設定ができます。
Herokuのタイムゾーンを東京にする
Herokuのデフォルトタイムゾーンは協定世界時(UTC)です。
heroku run bash $ date Fri Oct 20 XXXX UTC 2017
アドオンを使う時にタイムゾーンがずれていると困るので、東京に設定します。 環境変数にTZを追加すると上書きされます。
今日の1%
毎日通知する系のBotはHubotで作るのが楽。 でも毎回設定するたびに手順を調べ直していたので今回手順をまとめました。