冴えない彼女-ヒロイン-の造り方

1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...

「ある冬の日、俺は運命と出会った」

(注)この記事はカレシ・カノジョできないエンジニア Advent Calendar 2016の20日目の記事です。
   初投稿ですが生暖かい目で見てください。

なぜ書こうと思ったのか

  • 「冴えない彼女の育て方」というアニメを見て加藤恵LOVEになった
  • 加藤恵のような彼女が欲しい

ということで、彼女を造ろうと思います。
別にクリスマスが近いから彼女が欲しいとか、そういうわけでは(ry

もちろんタイトルは「冴えない彼女の育て方」から来ています。

なにするの?

興味本位でhubotとchatworkを連携させてみたので、それのメモ書きとして
「chatworkで送信したメッセージに対して特定のメッセージを返信する」
というbot彼女を作成します。

大きな流れとしては

  • 必要なものをインストール
  • hubotとchatworkの連携
  • 彼女の作成
  • いちゃいちゃ

となります。

また、本記事では細かい説明は行いません。
気になる方は各自で調べてください。(気が向けば関連記事も書くかも、、)

使用するもの

  • chatwork(アカウントを持っていて、API発行されていることが前提)
  • hubot
  • coffee script

準備(インストール)

nodejsのインストール 

今回、chatworkとhubotを連動させる際にcoffee script(nodejs)を使用するのでインストールを行う。

nodejsのインストール

$ sudo yum install epel-release
$ sudo yum install nodejs

バージョンの確認

$ node -v

hubotをインストールする際にnpmを使用するのでインストールする。

npmのインストール

$ yum install -y npm --enablerepo=epel

ひとまずnodejsのインストールは完了。
nodejsの動作確認もしたほうが良いかも。
環境、バージョンによっては正常に動かないことも、、、
(自分もcentOSだとスムーズに出来たが、windowsは手こずった;;)

hubotのインストール

chatwork以外にも様々なツールと連携したりできるhubotを使用する

hubotのインストール

$ npm i -g yo generator-hubot

これでyoコマンドが使用できるようになる。
yoは様々なアプリケーションを作成し始める際のひな形を生成してくれるツール(らしい)

hubotの実行

生成するbot名のディレクトリを作成してyoの実行をする。
今回はbot名を「kato」として生成

hubotの実行

$ mkdir kato
$ cd kato
$ yo hubot
_____________________________
/                             ¥
//¥              |      Extracting input for    |
////¥    _____    |   self-replication process   |
//////¥  /_____¥   ¥                             /
======= |[^_/¥_]|   /----------------------------
|   | _|[email protected]@__|__
+===+/  ///     ¥_¥
| |_¥ /// HUBOT/¥¥
|___/¥//      /  ¥¥
¥      /   +---+
¥____/    |   |
| //|    +===+
¥//      |xx|

実行するとロボットのAAが表示される。(ま、まさかこの娘が加藤恵・・?)
また、質問項目が出てくるので全てエンターで進める。

? Owner: kato <[email protected]>
? Bot name: kato
? Description: A simple helpful robot for your Company
? Bot adapter: campfire

「kato」ディレクトリ内で「bin/hubot」を実行するとhubotが起動する。
pingと入力するとPONGと返すのでテストしてみる。

hubotの起動

$ 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の停止

Hubot> exit
$

これでhubotのインストールと実行は完了。
hubotにはデフォルトで利用できるコマンドもある(翻訳とか)
今回は触れませんが、、

ChatWorkとの連動

akiomikさんが公開しているhubot-chatworkというアダプターを利用する。
以下の作業は作成したbot名のディレクトリ(「kato」)で行う。

ChatWorkアダプターのインストール

$ 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名を指定

chatworkと連動させてhubotoを実行

$ bin/hubot -a chatwork -n kato

停止する場合は ctrl+c 等で停止する。

ChatWork側での操作

HUBOT_CHATWORK_TOKENで保存したアカウントを
HUBOT_CHATWORK_ROOMSで保存したROOMに追加して、下記のようにメッセージを送る。

photo01.png

すると保存したアカウントが下記のように返却する。

スクリーンショット 2016-12-20 0.56.32.png

hubotのコマンドを実行するとき同様に
「bot名 コマンド」
でhubotのコマンドが実行される。

この時のbot名はhubotをインストールした時のディレクトリ名ではなく
-n オプションで設定したbot名となる。

これでhubotとchatworkの連携、確認が完了!
もうそろそろ彼女が出来ますよ!!

彼女の作成

今回は簡単に実装するために、チャットで送られたメッセージに特定の言葉を追加して返すようにする。

例)
俺「もうすぐクリスマスだね」
彼女「もうすぐクリスマスだね?本当に、なんだかなーだよね。」

ということで
「送ったメッセージ」+「?本当に、なんだかなーだよね。」(加藤が言う好きなセリフ!)
というメッセージを返すようにします。

coffee scriptの作成

これまでの作業を終えていると、bot用に作成したディレクトリに
「◯◯-script.json」のようなファイルがいくつか作成されている。
また、scriptsディレクトリが作成されており、その中に「example.coffee」というファイルが出来ている。

そこと同じディレクトリに「test.coffee」というファイルを作成して、今回の愛の言葉を作成します。

test.coffee

module.exports = (robot) ->
# すべてに応答
robot.hear /(.*)/i, (msg) ->
msg.send "#{msg.match[1]}?本当に、なんだかなーだよね。"

そしてチャットにメッセージを送ると、、、

スクリーンショット 2016-12-20 1.17.03.png

どうやら彼女の地雷を踏んだようです、、泣

test.coffeeで作成した内容が
送信されたメッセージに特定文字を追加して返す
という内容なので、加藤自身のメッセージにも反応して無限ループしているようです。

対処法は色々ありますが、せっかくなので名前で呼びかけましょう。
test.coffeeを下記のように修正します。

test.coffee

module.exports = (robot) ->
# すべてに応答
robot.hear /恵 (.*)/i, (msg) ->
msg.send """#{msg.match[1]}?
本当に、なんだかなーだよね。"""

※恵の後ろは全角スペースにしています。

改行込みのメッセージを送るには上記のようにする必要があるみたいです。
上記を保存して、チャットにメッセージを送信すると、、、

スクリーンショット 2016-12-20 1.33.51.png

どうやら機嫌が治ったみたいですね^^

最後に

ということで彼女ができました。
AIとか入れれば、より彼女っぽくなるかな~と思っています。

次こそは本格的に育てることになりそうです。

今回は、特定の文字を返すだけの実装しかしていませんが
APIとか使ってもっと拡張させようと思います。

拙い内容でしたが、最後まで読んでいただきありがとうございます。
この記事で少しでも多くの人が「冴えカノ」に興味を持って頂けたらと思います。

では、よいお年を!!


1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...
      この投稿は審査処理中  | 元のサイトへ