Slackのボットを作ってみたくなったんですが、さっぱりわかりません。グーグル先生に聞いたら、Node.jsを使うらしいです。とゆーわけで「centos + node.js + npm + nvm インストール - Qiita」のページを参考に、Node.js諸々を導入します。
まず、Node.jsを導入します。
# yum install epel-release # yum install nodejs # node -v
次に、npmを導入します。
# yum install -y npm --enablerepo=epel
どんどん、導入しちゃいます。
# npm install -g hubot yo generator-hubot coffee-script
「SlackのBot(hubot)を作ってみる - Qiita」のページによると、
・hubot -> Hubot本体 ・yo -> Yeomanという雛形作成ツール ・generator-hubot -> YeomanのHubot雛形ジェネレーター ・coffee-script -> HubotはCoffeeScriptで書く
……だそうです。
導入がうまくいかないときは、バージョンと導入場所を確認します。具体的には、アップデート/追加導入します。「Node.jsとnpmをアップデートする方法 – Rriver」を参考に、まずはNode.jsをアップデートします。# npm install -g n # n --latest
次に、npmをアップデートします。
# npm update -g npm
自分の場合は以下のコマンドで、すべてをアップデートしてしまいました。
# npm update -g
それでも導入がうまくいかないとき(ERRが表示される)は、実行したいユーザーで「npm install」コマンドを実行します。その際、-gオプションは外します。
Hubotの導入が終わったら、ボットを作成します。
# su - stic $ mkdir slack_bot $ cd slack_bot $ yo hubot
質問に答えていくと、ボットが作成されます。完了したら、動作確認です。
$ bin/hubot
Enterキーを押してプロンプトが出たら、「ボット名 PING」と話しかけると「PONG」と返事してくれます。
これだけだとつまらないので、追加の動作確認。「CoffeeScript? なにそれ? ミルクと砂糖は入れてね」ぐらい、全然わかっていない状態なので、以下のサンプルスクリプトを使わせてもらいます。
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, '[IPアドレス]'); console.log('Server running at http://[IPアドレス]:1337/');
[IPアドレス]のところは書き換えます。1337ポートを開けておきます。
$ vi helloworld.js
上のサンプルスクリプトを書きます。
$ node helloworld.js
Webブラウザーから http://[IPアドレス]:1337/ へアクセスして、「Hello World」と表示されたらOKです。
ボットを作ったら、Slackと連携させてみましょう。
以下のコマンドを実行します。
$ cd slack_bot $ export HUBOT_SLACK_TOKEN=[コピーしておいたAPI Token] $ bin/hubot --adapter slack
Slack上で、ボットユーザー名の左側が緑丸(●)=有効になったらOKです。
その後、色々ありました。
IBM Bluemix上で動作しているSlackのボットを、IBM Bluemix DevOps Servicesからデプロイしようとした……ら失敗して、ボットのプロセスが起動しなくなってしまいました。色々な意味で「いい」タイミングなので「HerokuとCloud9を利用してiPad開発 - Qiita」のページを参考に、Heroku + Cloud9 + GitHubの環境で再構築しました。以下、それぞれのサービスのアカウントは、すでに持っている前提です。
まずは、Cloud9で「Create a new Workspace」します。「Clone from Git or Mercurial URL」は、GitHubのURLを設定します。「Choose a template」は、GitHubからソースコードをCloneしてくるので「Blank」を選択します。そして、Herokuへログインします。
$ heroku login
必要なかったみたいですが、Gitを作成します。
$ git init
Herokuのアプリを作成します。
$ heroku create [アプリ名称]
Gitでコミットしておいて、Herokuへデプロイします。
$ git add . $ git commit -m 'Heroku Deploy' $ git remote add heroku [HerokuのgitのURL] $ git push heroku master
Slack側で、ボットがアクティブになりません……Slackのボットなので、API Tokenを設定しないといけませんでした。HerokuにWebブラウザーからログインして、該当アプリの「Settings」から「Config Variales」→「Reveal Config Vars」と来て、KEYに「HUBOT_SLACK_TOKEN」を設定して、VALUEにはコピーしておいたAPI Tokenを設定します。右上の「Mores」から「Restart all dynos」を選択すると、Slack側でボットがアクティブになりました。
Cloud9上でコードを追加/編集/削除した場合は、GitHubにも反映させておきます。
$ git remote add github [GitHubのgitのURL] $ git push github master
リンク先記事のように、GitHubにpushされたらHerokuにも自動的にpushしたいです。HerokuにWebブラウザーからログインして、該当アプリの「Deploy」から「Deployment method」→「Connect to GitHub」と来て、GitHubへログインして対象のリポジトリを選択します。自動でデプロイされるように、「Automatic deploys」の「Enable Automatic Deploys」ボタンをクリックして有効にします。
今後は、以下だけでHerokuへアプリが自動的にデプロイされる……はず。
最後に、Herokuのアプリが30分でスリープしないように「hubot-heroku-keepalive」を導入します……といっても、Cloud9のbashで以下のコマンドを実行するだけです。
$ heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web-url | cut -d= -f2)
ところが、なぜかスリープしてしまいます。Webから設定画面で確認したら、VALUEが空でした。アプリのURLは「Open app」で、わかります。これを、KEY「HUBOT_HEROKU_KEEPALIVE_URL」のVALUEに設定します。
# 2017/02/28