JavaScript + Hubot で HelloWorldが動くまで

はじめに

この記事について

この記事は2017/03時点においてHubotをゼロから導入してみた記録です

筆者はCoffeeScriptがいまいちよくわかってないのでCoffeeScriptではなくJavaScriptで書きます

Slack連携とかは後々やっていく予定ですが、本投稿ではCUIでHubotが動くまでの環境構築を主眼に置いています

開発環境

Mac OSX 10.11.6

目指す状態

  • Mac上でHubotが動いている状態
    • 他の環境に移行しやすい状態
      • ndenv/npm 使います
  • Hubotの機能としてはHelloWorldが動けば良い

完成するもの

https://github.com/kao-bee/js-hubot

1. hubotが動くNode.jsの環境を用意する

概要

公式ドキュメント に書いてありますが、hubotはNode.jsを使っているので、npmコマンドを使ってインストールします。

なのでnpmコマンドを使えるようにする必要があります。

環境移行のしやすさも考えて、今回はndenv/node-buildを使ってNode.jsを入れていきます

ndenv をインストール

hubot は Node.js で動いているのでNodeのバージョン管理とかをうまくやってくれるndenvを入れます。

ndenv公式 を参考にインストール

ndenv公式 では bash_profile に書いていますが、bashrcに書きたかったのでbashrcに書いてます

$ git clone https://github.com/riywo/ndenv ~/.ndenv
$ echo 'export PATH="$HOME/.ndenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(ndenv init -)"' >> ~/.bashrc
$ exec $SHELL -l

node-build をインストール

ndenvだけだと ndenv install が使えないので node-build も入れます node-build

$ git clone https://github.com/riywo/node-build.git ~/.ndenv/plugins/node-build

node をインストール

今回は 2016/03 時点の推奨バージョンである v6.10.0 を入れることにします

$ ndenv install v6.10.0
$ ndenv rehash
$ ndenv global v6.10.0
$ node -v
v6.10.0

2. hubotをインストール

公式ドキュメント にしたがってhubotをインストール

$ npm install -g yo generator-hubot
$ ndenv rehash
$ mkdir js-hubot
$ cd js-hubot
$ yo hubot

git管理

環境移行をかんがえるのであればgit管理をしておきましょう

$ git init
$ git add .
$ git commit -m "Initial commit"

hubotをコマンドラインから実行してみる

とりあえず下記コマンドを打ってみるとコマンドラインから実行できます

$ ./bin/hubot

これでhubotのインストールは完了です

3. HelloWorldを書く

コードを書く

とりあえず script/sample.coffe を参考にしながらHelloWorldを書いてみます

script/hello.js

module.exports = function(robot) {
  robot.send({}, "Hello! World!");
};

この状態で実行すると

$ ./bin/hubot
js-hubot> Hello! World!
[Tue Mar 21 2017 18:28:19 GMT+0900 (JST)] INFO /Users/kaoru.yamabe/blog/code/js-hubot/scripts/hello.js is using deprecated documentation syntax
[Tue Mar 21 2017 18:33:06 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.
[Tue Mar 21 2017 18:33:06 GMT+0900 (JST)] ERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s  | grep web-url | cut -d= -f2)`
[Tue Mar 21 2017 18:33:06 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379

という感じでHelloWorldと言ってくれます

ちなみに robot.send({}, "HelloWorld"); の 第一引数 {} はオプションで、slackとかで使う場合のチャンネル指定とかする場合はそこで指定します

Error/Warningを消す

今の状態だとerrorやらwarningやらが出ているので消しましょう

using deprecated documentation syntax

まずはこちら

INFO /Users/kaoru.yamabe/blog/code/js-hubot/scripts/hello.js is using deprecated documentation syntax

こちら 書いてあるのですが、documentを書かなければいけないらしいので書きましょう

script/hello.js

// Description:
//   HelloWorld

module.exports = function(robot) {
    robot.send({}, "Hello! World!");
};

hubot-scripts.json を消す

続いてこちら

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.

消せと言われているので素直に消します

herokuの設定を消す

ERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s  | grep web-url | cut -d= -f2)`

今回herokuを使っていないのにherokuの設定が残っているので怒られています

external-scripts.json から hubot-heroku-keepalive などの heroku 関連のものを削除すると消えます

hubot-redis-brain

INFO hubot-redis-brain: Using default redis on localhost:6379

INFOなので無理に削除する必要はありませんが、 こちらも external-scripts.json から hubot-redis-brain の記述を削除すれば消せます

これで、すべてのError/Warningが消えたので、実行すると

$ ./bin/hubot
js-hubot> Hello! World!

となり、綺麗にHelloWorldができました

4. 環境移行をしやすいようにする

概要

とりあえずmac上でhubotが動くようになりましたが 最終的にslack botを作るのであればどこかのサーバ上に置きたかったり 他の人と共同で開発したかったりすることも多いので 他の環境への移行が楽な状態にまでしておきましょう

すでにndenvの導入など流行ってあるので .node-version を設定するだけですけど

.node-version の設定

.node-version に今回使ったnodeのversionを指定しておきましょう。 そうすることで、他の環境に移した時のnodeのインストールが楽になります。

$ echo "v6.10.0" >> .node-version

README を書く

他の人がcloneして動かすまでのプロセスをREADMEに記載しておきましょう

https://github.com/kao-bee/js-hubot/blob/master/README.md

後記

今回はHubotをJavaScript + ndenvで作りました