11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-19

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

(注)この記事はカレシ・カノジョできないエンジニア 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   |
 //////¥  /_____¥   ¥                             /
 ======= |[^_/¥_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     ¥_¥
   | |_¥ /// 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と返すのでテストしてみる。

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とか使ってもっと拡張させようと思います。

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

では、よいお年を!!

11
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?