「ある冬の日、俺は運命と出会った」
(注)この記事はカレシ・カノジョできないエンジニア Advent Calendar 2016の20日目の記事です。
初投稿ですが生暖かい目で見てください。
なぜ書こうと思ったのか
- 「冴えない彼女の育て方」というアニメを見て加藤恵LOVEになった
- 加藤恵のような彼女が欲しい
ということで、彼女を造ろうと思います。
別にクリスマスが近いから彼女が欲しいとか、そういうわけでは(ry
もちろんタイトルは「冴えない彼女の育て方」から来ています。
なにするの?
興味本位でhubotとchatworkを連携させてみたので、それのメモ書きとして
「chatworkで送信したメッセージに対して特定のメッセージを返信する」
というbot彼女を作成します。
大きな流れとしては
- 必要なものをインストール
- hubotとchatworkの連携
- 彼女の作成
いちゃいちゃ
となります。
また、本記事では細かい説明は行いません。
気になる方は各自で調べてください。(気が向けば関連記事も書くかも、、)
使用するもの
- chatwork(アカウントを持っていて、API発行されていることが前提)
- hubot
- coffee script
準備(インストール)
nodejsのインストール
今回、chatworkとhubotを連動させる際にcoffee script(nodejs)を使用するのでインストールを行う。
$ sudo yum install epel-release
$ sudo yum install nodejs
$ node -v
hubotをインストールする際にnpmを使用するのでインストールする。
$ yum install -y npm --enablerepo=epel
ひとまずnodejsのインストールは完了。
nodejsの動作確認もしたほうが良いかも。
環境、バージョンによっては正常に動かないことも、、、
(自分もcentOSだとスムーズに出来たが、windowsは手こずった;;)
hubotのインストール
chatwork以外にも様々なツールと連携したりできるhubotを使用する
$ npm i -g yo generator-hubot
これでyoコマンドが使用できるようになる。
yoは様々なアプリケーションを作成し始める際のひな形を生成してくれるツール(らしい)
hubotの実行
生成するbot名のディレクトリを作成してyoの実行をする。
今回はbot名を「kato」として生成
$ mkdir kato
$ cd kato
$ yo hubot
_____________________________
/ ¥
//¥ | Extracting input for |
////¥ _____ | self-replication process |
//////¥ /_____¥ ¥ /
======= |[^_/¥_]| /----------------------------
| | _|___@@__|__
+===+/ /// ¥_¥
| |_¥ /// HUBOT/¥¥
|___/¥// / ¥¥
¥ / +---+
¥____/ | |
| //| +===+
¥// |xx|
実行するとロボットのAAが表示される。(ま、まさかこの娘が加藤恵・・?)
また、質問項目が出てくるので全てエンターで進める。
? Owner: kato <example@gmail.com>
? Bot name: kato
? Description: A simple helpful robot for your Company
? Bot adapter: campfire
「kato」ディレクトリ内で「bin/hubot」を実行するとhubotが起動する。
pingと入力するとPONGと返すのでテストしてみる。
$ bin/hubot
connect deprecated multipart: use parser (multiparty, busboy, formidable) npm module instead node_modules/hubot/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:56:20
connect deprecated limit: Restrict request size at location of read node_modules/hubot/node_modules/express/node_modules/connect/lib/middleware/multipart.js:86:15
Hubot> [Mon Dec 19 2016 18:03:41 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)`
[Mon Dec 19 2016 18:03:42 GMT+0900 (JST)] INFO Using default redis on localhost:6379
Hubot> kato ping
PONG
というように、hubotを起動して
「bot名 コマンド」
と入力すると、コマンドが実行される。
停止する際はexitで抜ける
Hubot> exit
$
これでhubotのインストールと実行は完了。
hubotにはデフォルトで利用できるコマンドもある(翻訳とか)
今回は触れませんが、、
ChatWorkとの連動
akiomikさんが公開しているhubot-chatworkというアダプターを利用する。
以下の作業は作成したbot名のディレクトリ(「kato」)で行う。
$ npm i hubot-chatwork --save
chatworkと連動させるために必要な変数の設定を行う。
export HUBOT_CHATWORK_TOKEN="SAEKANO" # APIのアクセストークンを入力。
export HUBOT_CHATWORK_ROOMS="123,456" # カンマ区切りでルームIDを指定。
export HUBOT_CHATWORK_API_RATE="800" # 1時間あたりのAPIリクエスト数(間隔)を指定。
HUBOT_CHATWORK_API_RATEは値が大きいほどレスポンスが早くなる。
2015年1月段階では5分あたり100回までのリクエストができるらしい。(1時間1200回)
実行
-a オプションでchatworkアダプターを使用してhubotを実行
-n オプションでチャット側で呼び出す際のbot名を指定
$ bin/hubot -a chatwork -n kato
停止する場合は ctrl+c 等で停止する。
ChatWork側での操作
HUBOT_CHATWORK_TOKENで保存したアカウントを
HUBOT_CHATWORK_ROOMSで保存したROOMに追加して、下記のようにメッセージを送る。
すると保存したアカウントが下記のように返却する。
hubotのコマンドを実行するとき同様に
「bot名 コマンド」
でhubotのコマンドが実行される。
この時のbot名はhubotをインストールした時のディレクトリ名ではなく
-n オプションで設定したbot名となる。
これでhubotとchatworkの連携、確認が完了!
もうそろそろ彼女が出来ますよ!!
彼女の作成
今回は簡単に実装するために、チャットで送られたメッセージに特定の言葉を追加して返すようにする。
例)
俺「もうすぐクリスマスだね」
彼女「もうすぐクリスマスだね?本当に、なんだかなーだよね。」
ということで
「送ったメッセージ」+「?本当に、なんだかなーだよね。」(加藤が言う好きなセリフ!)
というメッセージを返すようにします。
coffee scriptの作成
これまでの作業を終えていると、bot用に作成したディレクトリに
「◯◯-script.json」のようなファイルがいくつか作成されている。
また、scriptsディレクトリが作成されており、その中に「example.coffee」というファイルが出来ている。
そこと同じディレクトリに「test.coffee」というファイルを作成して、今回の愛の言葉を作成します。
module.exports = (robot) ->
# すべてに応答
robot.hear /(.*)/i, (msg) ->
msg.send "#{msg.match[1]}?本当に、なんだかなーだよね。"
そしてチャットにメッセージを送ると、、、
どうやら彼女の地雷を踏んだようです、、泣
test.coffeeで作成した内容が
送信されたメッセージに特定文字を追加して返す
という内容なので、加藤自身のメッセージにも反応して無限ループしているようです。
対処法は色々ありますが、せっかくなので名前で呼びかけましょう。
test.coffeeを下記のように修正します。
module.exports = (robot) ->
# すべてに応答
robot.hear /恵 (.*)/i, (msg) ->
msg.send """#{msg.match[1]}?
本当に、なんだかなーだよね。"""
※恵の後ろは全角スペースにしています。
改行込みのメッセージを送るには上記のようにする必要があるみたいです。
上記を保存して、チャットにメッセージを送信すると、、、
どうやら機嫌が治ったみたいですね^^
最後に
ということで彼女ができました。
AIとか入れれば、より彼女っぽくなるかな~と思っています。
次こそは本格的に育てることになりそうです。
今回は、特定の文字を返すだけの実装しかしていませんが
APIとか使ってもっと拡張させようと思います。
拙い内容でしたが、最後まで読んでいただきありがとうございます。
この記事で少しでも多くの人が「冴えカノ」に興味を持って頂けたらと思います。
では、よいお年を!!