はじめに
Hubot は Heroku に構築するのが主流らしいのですが、Heloku のアカウント持ってないし、このためにクレジットカードを新しく登録するのも嫌だったので、既にアカウントがある AWS の Amazon EC2(OS:Amazon Linux)上に構築し、更に Slack と連携する、ということをしてみました。
Amazon Linux のクリーンインストール状態から次の手順で上手くいったので(AWSのセキュリティグループとか Node.js の起動の方法とか、細かいところは気になりますが)、これから導入される方の参考になれば。
前提
- 前述のとおり、サーバは Amazon EC2 (OS は Amazon Linux)を利用します。
-
ここでは EC2 のセットアップ手順については言及しません。
-
今回、私が使った AMI は、Quick Launch の一番上にあるこれです。
-
セキュリティグループの設定で、HTTP の 80番ポートへのアクセスを許可してください。
-
手順
以降、Amazon Linux にログインしてからの手順です。
Node.js、npmコマンドツールをインストール
-
下記コマンドを実行。
$ sudo yum -y install nodejs npm --enablerepo=epel
※
npm
は、次節の Hubot、CooffeeScript をインストールするのに利用します。 -
確認してみます。
$ node -v v0.10.29
$ npm -v 1.3.6
Hubot、CoffeeScript をインストール
-
下記コマンドを実行。
$ sudo npm install -g hubot coffee-script
-
確認してみます。
$ hubot -v 2.8.0
$ coffee -v CoffeeScript version 1.7.1
Redis をインストール
-
下記コマンドを実行。
$ sudo yum -y install redis --enablerepo=epel
-
起動します。
$ sudo /etc/init.d/redis start redis-server を起動中: [ OK ]
※ ちゃんとやるなら、自動起動とかを設定した方がいいです。
Hubot を作成
以降、$ sudo -s
で root ユーザになり作業します。
(理由:個人ユーザだと、Node.js が起動した際に、外部からの HTTPリクエストを listen できなかったため.. Node.js 詳しくないけど、やり方はあるのかな?)
-
下記コマンドを実行。
# hubot --create test_bot
-
動かしてみます。
# cd test_bot # bin/hubot
上記の
bin/hubot
は中身をみるとスクリプトファイルで、中で npm install が走っている模様。
いろいろインストールされましたが、終わると次のようにプロンプトが表示されます。Hubot>
Hubot の基本コマンドである ping をしてみます。
Hubot> hubot ping Hubot> PONG
上記のように
PONG
と返ってこればOKです^^exit
でいったん抜けます。
Slack用アダプタのインストール
-
下記コマンドを実行。
# cd test_bot # npm install hubot-slack --save
補足:
前回までnpm
コマンドは、-g
オプションをつけてグローバル領域にインストールしていました。今回は-g
をつけず、このディレクトリ配下のプロジェクトだけに nodeモジュールをインストールしています。また--save
オプションにより、ディレクトリ配下の package.json にhubot-slack
が依存モジュールとして追記されます。
Slack 側の設定
-
Slack の Integrations ページの Add Service Integrations メニューで、Hubot を選択します。
-
環境変数が 3つ、表示されます。上の 2つ は、後で Hubot を起動する際に利用することになります。
-
Hubot URL には、EC2 の Public DNS を入力します。
- 例:
http://ec2-111-222-333-444.us-west-2.compute.amazonaws.com/
- 今回、使うポートは 80番 なので、特に指定は不要です。
- 例:
-
Label は Slack の設定メニュー上の表示のみで利用するものなので、何でもいいです。
-
すべて入力したら、画面下の Save Integration ボタンで保存します。
Hubot の起動
-
EC2 に戻り、Slackの画面で表示された内容を元に、次のように環境変数を設定。
# export HUBOT_SLACK_TOKEN=[Slackの画面に書いてあった値] # export HUBOT_SLACK_TEAM=[Slackの画面に書いてあった値] # export HUBOT_SLACK_BOTNAME=[任意のボット名(例:hogebot)] # export PORT=80
※ もしくは、
/bin/hubot
(スクリプトファイル)に上記を記載してもOKです。
※ ポートは何も指定していないとデフォルトの 8080番 ポートとなってしまうので、AWS のセキュリティグループの設定と合わせて、80番ポートを指定します。
※ 上記のボット名は、Slack 上で語りかけるボット名となります。 -
Hubot を起動。
# bin/hubot -a slack Successfully 'connected' as hogebot
※ ちゃんとやるなら、バックグラウンドで起動したり、デーモン等にした方がいいです。
-
Node.js の HTTPのサービスが起動しているはずなので、ブラウザで EC2 の Public DNS にアクセスしてみます。
動作確認
Slack のオープンな CHANNELS で、ping してみます。ボット名は、Hubot を起動した時に環境変数で指定したものです。@はつけなくても大丈夫です。
応答が返ってきました^^
注意:
Slack は、オープンな CHANNELS でないと、Hubot が応答しないらしい。ずっと PRIVATE GROUPS で試してて、3時間ぐらい無駄にしました..。
おわりに
Hubot の挙動は CoffeeScript で拡張できるので、これから色々ためしてみようと思います。