Edited at

Hubot のインストール

More than 3 years have passed since last update.

これは Hubot Advent Calendar 2014 の 2 日目の記事です。

前回は Hubot / ChatOps の概要 について紹介しました。今回は Hubot をインストールしてみましょう。

また @bouzuya の Hubot 連載の第 2 回です。目次は、第 1 回の記事にあるので、そちらをどうぞ。


Hubot のインストール

Hubot のインストール方法は 2.9.x とそれ以前とで大きく変わっています。今回は 2.9.3 を対象としているので、新しいインストール方法を紹介していきます。

ちなみにこんな Qiita 記事を読むより、公式のドキュメント ( というか README ) を読むのが確実です。


yo および generator-hubot のインストール

Hubot 2.9.x は Yeoman ジェネレーターでインストールするようになっています。

Hubot にも Yeoman にも Node.js が必要です。事前に Node.js がインストールされているものとします。Node.js をインストールすれば npm も使える状態になっていると思います。npm で Yeoman (yo) と Hubot のための Yeoman ジェネレーター (generator-hubot) をインストールします。

今回は yo が 1.3.3 、generator-hubot が 0.1.4 です。

# 権限が足りない場合は sudo を付けます。

$ npm install -g yo generator-hubot

$ npm list -g generator-hubot yo
/usr/local/lib
├── generator-hubot@0.1.4
└── yo@1.3.3

これで yo, generator-hubot のインストールは完了です。


あなたの BOT の生成

次は Yeoman ジェネレーターを使って あなたの BOT (Hubot) を生成します。

BOT 名のディレクトリをつくり、そこで yo hubot を実行します。あとは質問に答えていけば OK です。

ちなみに今回の例では、 BOT 名にはウラン (uran) を使っています。

$ mkdir uran

$ cd uran

$ yo hubot

yo-hubot.png


shell アダプターで動かす

ひとまず shell アダプターで動かしてみましょう。 shell アダプターが何かは、またそのうち説明します。

$ ./bin/hubot -a shell -n uran 

いろいろな警告と一緒にプロンプト (uran>) が出たと思います。uran help と話しかけて、コマンド一覧を見てみましょう。

uran> uran help

uran> uran adapter - Reply with the adapter
uran animate me <query> - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead.
uran echo <text> - Reply back with <text>
uran help - Displays all of the help commands that uran knows about.
uran help <query> - Displays all help commands that match <query>.
uran image me <query> - The Original. Queries Google Images for <query> and returns a random top result.
uran map me <query> - Returns a map view of the area returned by `query`.
uran mustache me <query> - Searches Google Images for the specified query and mustaches it.
uran mustache me <url> - Adds a mustache to the specified URL.
uran ping - Reply with pong
uran pug bomb N - get N pugs
uran pug me - Receive a pug
uran the rules - Make sure uran still knows the rules.
uran time - Reply with current time
uran translate me <phrase> - Searches for a translation for the <phrase> and then prints that bad boy out.
uran translate me from <source> into <target> <phrase> - Translates <phrase> from <source> into <target>. Both <source> and <target> are optional
uran youtube me <query> - Searches YouTube for the query and returns the video embed link.
ship it - Display a motivation squirrel
uran>

初期でも色々はいっていますね。

ひとまず、Hubot は無事に動いたようです。


Hubot にもっと話しかける

続けて、いろいろ Hubot に話しかけてみましょう。


hubot ping

ping で応答確認できます。PONG を返してくれます。名前を間違えていると無視されます。

uran> uran ping

uran> PONG


hubot echo

echo で任意のメッセージを返させることができます。

uran> uran: echo ワイがウランや!

uran> ワイがウランや!


hubot time

time で現在時刻を返してくれます。

uran> @uran time

uran> Server time is: Tue Dec 02 2014 21:28:05 GMT+0900 (JST)


Hubot に話しかけるパターン

Hubot に話しかけるのはいくつかのパターンが許容されています。

具体例を挙げると、先頭が名前からはじまる場合や、名前の前に @ がついている場合、後ろに : がついている場合などです。

正規表現で言うと、だいたい "^\\s*[@]?#{name}[:,]?\\s*" こんな感じです。


Hubot を Heroku にデプロイする

と言いたいところなのですが、もう分量が増えてきたので、今日はこのへんでおしまい。

Procfile もきちんと配置されているので、git init, git add -A, git commit, heroku create して git push heroku master とかやれば、動きそうなものなのですが (Heroku アカウント・ heroku コマンドインストール前提) 、 Heroku にデプロイするとなると shell アダプター以外の、実際のチャットに対応するためのアダプターやその設定が必要です。簡単なものとそうでないものとがあります。

ひとまず、人気の高そうな Slack あたりで、明日、説明したいと思います。


最後に

これは対象読者外へのメッセージなのですが、hubot の実行コマンドってアレどう思いますか? ./node_modules/.bin/hubot に配置されるアレです。

あの実行コマンドの #!/usr/bin/env coffee ってぼくはないと思うんですけど、どうなんですかね?あれのせいで実行するために coffee-script を PATH に含めることが前提になりますし、そのために今回も ./bin/hubot とかやってますよね (内部で PATH 設定してます) 。イケてないなあ、って思うんですけど……。

では、今日はこのへんで。