ボットを作る(hubot + slack + heroku)
開発環境
vmware上のubuntu
macからemacsでファイルを編集する。
- vmwareのubuntuを起動しておく
- macのコンソールからの接続:
~ $ ssh ユーザー名@サーバー名
- macのemacsからの接続:
C-x C-f /ssh:ユーザー名@サーバー名:/home/ubuntu/workspace/
node.jsのインストール
- まずはnode.jsのバージョン管理ツールnodebrew を導入する
ubuntuに接続しコンソールから
curl -L git.io/nodebrew | perl - setup
- パスを通す
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.profile
- .profileを読み込む
source ~/.profile
- 確認
nodebrew
- バージョンや使い方が表示されること。
- nodebrewでnode.jsをインストールする
nodebrew install-binary v6.11.1 nodebrew use v6.11.1
- コンソールからnpmをアップデート
npm update -g npm
必要なモジュールのグローバルインストールとボットの作成
- モジュールのインストール
npm install -g yo@1.8.5 --ひな形作成ツール (ジェネレーター) npm install -g generator-hubot --Yeoman を利用した Hubot のジェネレーター。Hubotはボットを作成するためのフレームワーク npm install -g coffee-script@1.12.4
- ボットを作成するコマンドを実行する
cd ~/workspace mkdir myownhubot cd myownhubot yo hubot
基本的にYでOK。アダプターだけslackにしてEnter。
? Bot adapter (campfire) slack
ボットでの処理をJavascriptで書くためにコンソールからファイル作成
touch scripts/hello.js
- hello.jsを書く
'use strict'; //robotという引数を持つ無名関数をモジュールとしている。 module.exports = (robot) => { //HubotのAPIの利用方法が以下。 ///hello>/iは正規表現。マッチしたら次に渡す無名関数を実行するという形式。 //msgオブジェクトからユーザーの名前を受け取り、「hello,ユーザー名」と発言する。 robot.hear(/hello>/i, (msg) => { const username = msg.message.user.name; msg.send('hello, ' + username); }); };
- 書いたらボットをslackのアダプターなしで動かしてみる
コンソールから
cd ../ chmod a+x bin/hubot bin/hubot
とりあえず以下のような感じになる。ユーザーがShellになっている。
npm WARN hubot-help@0.2.2 requires a peer of coffee-script@^1.12.6 but none was installed. npm WARN hubot-slack@4.5.3 requires a peer of hubot@^2.0.0 but none was installed. body-parser deprecated undefined extended: provide extended option node_modules/hubot/src/robot.js:445:21 No history available myownhubot> [Mon Aug 06 2018 13:31:24 GMT+0900 (JST)] INFO /home/ubuntu/workspace/myownhubot/scripts/hello.js is using deprecated documentation syntax [Mon Aug 06 2018 13:31:24 GMT+0900 (JST)] WARNING Loading scripts from hubot-scripts.json is deprecated and will be removed in 3.0 (https://github.com/github/hubot-scripts/issues/1113) in favor of packages for each script. Your hubot-scripts.json is empty, so you just need to remove it. [Mon Aug 06 2018 13:31:24 GMT+0900 (JST)] ERROR hubot-heroku-keepalive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web.url | cut -d= -f2)` [Mon Aug 06 2018 13:31:24 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379 hello> myownhubot> hello, Shell
- 次にslack でhubotを動かす
- slackで開発用のworkspaceを作成する
- https://slack.com/からメールアドレスを入力しGetStarted、新しいworkspaceを作成する
- 諸々入力する
- メールが来たらslackにログインする
- チャンネルの横のマーククリックしてチャンネルを作成する
slackの設定を行う
https://slack.com/services/new
- 上記から検索欄にhubotと入力する。出てきたhubotをクリックすると設定ページが表示されるのでinstallをクリックする。
- ユーザー名を適当に入力。
- APIトークンを控えておく(パスワードみたいなものなので公開しないように注意)
HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- インテグレーションの保存をクリックする。
- 次にこのボットを反応させたいチャンネルに参加させる。
- 先程のチャンネルに参加させる。作成したslackのチャンネルに入る。歯車ボタンから「新しいユーザーを招待する。」を選択。
先ほど作成したボットの名前を入力しinvite.設定は以上。
ボットを起動する
コンソールから
env HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx bin/hubot --adapter slack
これで起動した状態になる。
slackのbotチャンネルでhello>と入力して動作確認。
ボットを常時起動させておくことができるようにHerokuを使う
https://www.heroku.com/
- アカウントを作成する。
- コンソールからHeroku CLIをインストールする(herokuコマンドが使えるようになる)
wget -O- https://cli-assets.heroku.com/install-ubuntu.sh | sh
- 確認
heroku --version heroku-cli/6.15.13-3dce47c (linux-x64) node-v9.3.0
- Heroku CLI から Heroku にログインする。
- コンソールから
heroku login
- 下記のように表示されればログイン完了
Logged in as メールアドレス
githubに新しくリポジトリを作成する。
https://github.com/new
必要な項目を入力して「Create repository」ボタンをクリック
…or create a new repository on the command lineをコンソールにコピペして実行
- 他のファイルもpushする
- herokuで動かすための設定ファイルProcfileを作成する。
- Procfile
web: bin/hubot --adapter slack
- ProcfileはHeroku がアプリケーションを動作させる際に「どのようなコマンドを実行するか」を認識するための設定ファイル。
- サーバーの用意をする。これをやるのは一回だけ。
$ heroku create
デプロイ
git push heroku master
- トークンはherokuのコマンドで登録する。ダブルクォートで囲う。
heroku config:set HUBOT_SLACK_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- 確認
heroku config:get HUBOT_SLACK_TOKEN
動作確認
slackのチャンネルからhello>と発言してみる
- なにか変更したらgit push heroku masterする
- herokuの再起動はコンソールからheroku restart アプリ名