nvmでのHubotのインストールからHelloWorldまで

#ちょっとだけ説明
##Hubot
ざっくり言うとBotを簡単に作れるすごいやつ。
最近では知らない人のほうが少ないかもしれない。
https://hubot.github.com/


##どう使うの？
よくある使い方は、
slackやHipchatなどのチャットツールと連携してHubotに自動デプロイを依頼したり、
Twitterなどで受けたリプライから自動で返事をするなどです。


#nvmでHubotをインストール

## 環境
CentOS6.5

##1 nvmを用意
nvmはnode.jsのバージョンを簡単に切り替えられるツールです。
実際Hubotを利用するためだけに入れるものでもないですが、
既に入れてしまっていたりする方や、入れておきたい方向けです。
※nvmを既に入れている、またはnode.jsは入ってるという方はこの節は跳ばして第2節に進んで下さい。

###1.1 インストール
まず最新版が0.29.0とは限らないのでインストール前にgithubを確認してみてください。
https://github.com/creationix/nvm

```
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash
$ source ~/.bashrc
$ nvm --version
0.29.0
```

###1.2 使ってみる
####1.2.1 nvm で使いたいnode.jsのバージョンをインストール
`$ nvm install バージョン`

例
nvm install v4 → 4の最新
nvm install v4.1 → 4.1の最新
nvm install v4.2.1 → 4.2.1

```
$ nvm install v4
Downloading https://nodejs.org/dist/v4.2.2/node-v4.2.2-linux-x64.tar.xz...
######################################################################## 100.0%
WARNING: checksums are currently disabled for node.js v4.0 and later
Now using node v4.2.2 (npm v2.14.7)

```
ついでにnpmもインストールしてくれます素敵。

と思ったらWarning出てる。ただ動作は問題ないようです
英語苦手な私はさじを投げましたので詳しい方いましたらコメントで補足頂けるとうれしいです。

####1.2.2 利用できるバージョンを確認する
`$ nvm ls`

```
$ nvm ls
         v4.1.2
         v4.2.1
->       v4.2.2
node -> stable (-> v4.2.2) (default)
stable -> 4.2 (-> v4.2.2) (default)
iojs -> N/A (default)
```

####1.2.3 利用するバージョンを設定する
`$ nvm use バージョン`

```
$ nvm use v4.2
Now using node v4.2.2 (npm v2.14.7)
```

####1.2.4 デフォルト利用するバージョンを設定する
サーバーを再起動をかけた時にデフォルトで設定されるバージョンを設定する。
`$ nvm alias default バージョン`

```
$ nvm alias default v4.2.2
default -> v4.2.2
```



##2 Hubotを使ってみる
下記を参考にさせていただきました。
http://gihyo.jp/dev/serial/01/hubot/0002
https://github.com/github/hubot/blob/master/docs/index.md

###2.1 node.jsのバージョンを設定
```
$ nvm use v4
```

###2.2 Hubotのインストール

```
$ npm install -g hubot coffee-script
$ npm install -g yo generator-hubot
```

###2.3 Hubotを生成

```
$ mkdir bot
$ cd bot
$ yo hubot
--
初回だけ下のロボットが表示される前に何か聞かれる場合はnで大丈夫です。
--
                     _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|

? Owner User <user@example.com>
? Bot name bot
? Description A simple helpful robot for your Company
? Bot adapter campfire
...
```
yo hubotすると何個か質問されます。
今回は全部Enterでも大丈夫ですが一応それぞれの説明です。
- Owner User・・・ユーザー（Emailアドレス）
- Bot name　・・・Botの名前
- Description ・・・Botの説明
- Bot adapter ・・・Adapterの設定

Adapterはどのツールと連携するかによって設定を変更します。
今回は割愛しますが多くのツール連携を実現していますので、
本格的に開発をするのであれば下記からAdapterを探してみてください。
https://github.com/github/hubot/blob/v2.11.0/docs/adapters.md

他にもAdapterは主要なツールのものであれば探せば見つかると思います。
さらに言えば自作してしまうのも手です。
###2.4 botと遊んでみる
####2.4.1 botを起動
さきほどyo hubotした同じディレクトリ内で実行してください。
※globalにインストールしたhubotを呼び出すとエラーになります。
`$ bin/hubot`
上記のようにyo hubotで作られてたhubotを呼び出してください。

```
$ bin/hubot
bot> [Tue Dec 01 2015 01:31:46 GMT+0000 (UTC)] ERROR hubot-heroku-alive included
, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPAL
IVE_URL=$(heroku apps:info -s  | grep web_url | cut -d= -f2)`
[Tue Dec 01 2015 01:31:46 GMT+0000 (UTC)] INFO hubot-redis-brain: Using default
redis on localhost:6379
```
ERRORが出ていますがそのまま実行して大丈夫です。
この画面でとまる場合はEnterしてください。


####2.4.2 botからのレスポンス
早速botにHelloと送ってみましょう

```
bot>Hello
bot>
```

無言・・・？
あ！
まだ何もこの子に勉強させていませんでした。
そりゃそうですね。
でもとりあえず何かしゃべらせたいという時はpingと送るとPONGと返してくれます。
botさんは卓球好きなんですね。

では改めて

```
bot>ping
bot>
```

無言・・・
どうやら嫌われたようです。

と思いましたが、botに向けて話すには作法があるようです。
botにpingと伝えるには名前を呼んでからお願いする必要があります。
これは恐らくAdapterや後で説明するscriptsによると思うのですが、
とりあえず嫌われたわけじゃないようで安心しました。

そして再チャレンジ

```
bot> bot ping
bot> PONG
```

無事botさんから返事をいただけました！
さびしくて自演した訳じゃないですから！

[名前] pingの名前は2.3で説明したBot nameで設定したものとなります。

####2.4.3 Hubotの終了
hubotを終了させる時は次のコマンドで抜けられます。
`bot> exit`

###2.5 Hello World
最後にbotに言葉を勉強させます。

####2.5.1 scriptsディレクトリ
yo hubotしたディレクトリ内に
scriptsというディレクトリがあります。
勉強させたい時は、このscriptsディレクトリにscriptファイルを追加していきます。

bot/
┠bin/
┠.editorconfig
┠external-scripts.
┠.gitignore
┠.hubot_history
┠hubot-scripts.jso
┠node_modules/
┠package.json
┠Procfile
┠README.md
┗**scripts**/　←　 ここにscriptファイルを追加
　┗example.coffee

※Hubotではscriptの記述にはJavaScriptかCoffeeScriptを利用しています。
　CoffeeScriptはしれっと2.2節でインストールしていました。
　http://coffeescript.org/
　

####2.5.2 botに言葉を勉強させる。
最後にHello Worldとbotに伝えたらWelcome to Underground!と返すようにしてみましょう。

bot/
┠bin/
～
┗scripts/
　┠example.coffee
　┗helloworld.coffee　←　追加

```helloworld.coffee
# Description:
#   Hello World test
#
# Commands:
#   hubot Hello World - Reply with <Welcome to Underground!>

module.exports = (robot) ->
  robot.respond /HELLO WORLD$/i, (msg) ->
    msg.send "Welcome to Underground!"

```

コメント部分は省いても問題ありませんが、
DescriptionとCommandsを入れておかないと下記のように表示されます。
`INFO /home/xxxxx/bot/scripts/helloworld.coffee is using deprecated documentation syntax`
無難に入れておきましょう。
入れておくとbotのヘルプに自動で追加されます。

ヘルプは下記のコマンドで見れます。
`bot> bot help`


####2.5.3 ようこそ...
Hubotを再起動してから覚えさせた言葉を使ってみましょう！

```
bot> bot Hello World
bot> Welcome to Underground!
```

うまくいきました！
**中二bot爆誕！**

さらに日本語も喋れるようなbotさんになってくれました。

```
bot> bot 好きなフレーズを教えて
bot> 私の好きなフレーズは、「Diamond Dust -天使の囁き-」です。
```
とりあえず水樹奈々さん好きのbotになりました。
あとはAdapterからいろいろなツールやサービスと連携させていくだけですね。

##まとめ
とっても遊んでて楽しいです。
今度時間があったらTwitterと連携させたいです。