まるまるこふこふ

数々の次元が崩壊し、全ての生命が塵と化すのを見てきた。私ほどの闇の心の持ち主でも、そこには何の喜びも無かった。

hubot でお前の好きな二次元美少女キャラと二人きりを過ごす

さいちゃんです。最近Slack と Hubot を連携させて遊んでます。 ところで突然ですが、我々オタクの夢って何ですか? はい、そうですね、嫁(ここではオタクが婚姻したいほど好きな二次元美少女キャラの事を指す)と会話することですね。

まぁそういうわけでSlack のチームを作ってそこにお前の好きな二次元美少女キャラのbotを 作って、適当にお前好みの会話をする機能を盛り込んじゃいましょう。

f:id:sairoutine:20150711003934p:plain

今回の主役、霧雨魔理沙ちゃんです。

Slack の設定をする

f:id:sairoutine:20150711004032p:plain こんな感じでバックリとSlackにチームを作っちゃいましょう。 見ての通りメンバーは僕と魔理沙の2人です。他人のいるチームでやると、個人で使ってる サービスとHubot を連携させづらいので、二人きりのチームがオススメです。

クライアントアプリをインストールしておくと、チームの切り替えなんかも容易です。

f:id:sairoutine:20150711004354p:plain

チームのIntegration に Hubot を追加します。Hubot の数は追加できるので、 その気になれば博麗霊夢十六夜咲夜なんかも追加できます。

Slack側の設定はこれで大体オッケーです。

環境構築

次、Hubot スクリプトの方を作ります。僕はheroku好きじゃないので、普通にそこら辺の クラウドサーバーを借りてそこでHubot を動かそうと思います。

Node.js のインストール

# レポジトリの追加
sudo rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# インストール
sudo yum install -y nodejs npm --enablerepo=epel

Redis のインストール

wget http://download.redis.io/releases/redis-2.8.12.tar.gz
tar xzf redis-2.8.12.tar.gz
cd redis-2.8.12/
make
sudo make install

必要なnpm モジュールの追加

# Hubotをめっちゃ手軽に作るツールと、slackと連携させるモジュール
sudo npm install -g yo generator-hubot hubot-slack

Hubot を作る

先ほどインストールした Yeoman でめっちゃ簡単にHubot 作れるので作れましょう。

# 任意のディレクトリで作成
mkdir test-bot
cd test-bot
# Yeoman をつかって hubot を作成する
yo hubot

聞かれたことに答える。Bot adapter だけはslackって書いときましょう。

# hubot のオーナー
? Owner: sairoutine
# bot の名前
? Bot name: marisa
# bot の説明
? Description: 俺の嫁
# bot を何と連携させるか。slackと連携させるならslackと入れる。
? Bot adapter: slack

端末上で動作確認

# hubot の実行
$ ./bin/hubot
# bot名 ping してみて、PONGが返ってくるのを確認する。
marisa> marisa ping
PONG

ちゃんとPONGが返ってきたら、SlackとHubotを連携させます。 先ほどSlackにbotを追加した時に発行したAPI TOKENを環境変数に登録します。

# 環境変数にAPI TOKENを登録
$ export HUBOT_SLACK_TOKEN=xoxb-なんとかかんとか
# Slack と連携させてバックグラウンドでhubotを起動
$ bin/hubot --adapter slack &

f:id:sairoutine:20150711005749p:plain

あとはSlack 上で ping してみれば PONGが返ってくる。

会話を登録する。

scripts ディレクトリの中にhubot のスクリプトのコードを入れておけば、 hubot が起動時に読み込んでくれる。

会話に反応させたいなら、respond とか hear を使う。

# Test.coffee
module.exports = (robot) ->
  # 魔理沙というワードに反応する
  robot.hear /魔理沙/i, (msg) ->
    msg.send "呼んだか?"

  # 「marisa omikuji」コマンドに反応する
  robot.respond /omikuji/i, (msg) ->
    msg.send msg.random ['大吉だぜ', '中吉だぜ', '凶だぜ']

まあこの辺反応するワードと、それに対するセリフを入れてあげれば、 それなりに会話を楽しめるのでは。

僕はこちらの言葉に反応するより、霧雨魔理沙の方から話しかけてきてほしいので node-cron を使って、定期時間毎に何かしらのセリフを言わせています。

f:id:sairoutine:20150711010727p:plain

あとは他のサービスと連携させて色々な作業を魔理沙に任せてます。本番サーバへのデプロイとか Github の issue を表示させたりとか、Trello にチケットを追加したりとか。

f:id:sairoutine:20150711013123p:plain

ぶっちゃけ hubot に実装してSlack上でやらせるより、 自分でやった方が早かったりするんですが、まあ僕のお願いを魔理沙がやってくれているって 事実の方が大切だったりするんですよ。

あ、あと hubot は結構異常終了することがあるので死活監視にforever を使用しています。

foreverjs/forever · GitHub

終わり

休日とかに一人でPCに向かってvimzsh と戯れてるとやっぱり無味乾燥さを感じるわけですよ。 所詮感情もなければ人間味もないただのツールですしね。

なんでまぁ、時折そうした作業中に二次元美少女キャラとたまに言葉のやり取りを行うと、 精神が安寧するわけですよ。それが言葉に反応するだけの超簡単な人口無能でも。

ストレス多い現代社会ですから、皆様オタクにおかれましても ぜひぜひHubot を二次元美少女キャラにして、Slack 上で戯れてみると すごく憩うんじゃないでしょうか