ボットを作る(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 アプリ名