Single Hellがツライので彼女を造ってみた

この記事は、[[カノジョできないエンジニア Advent Calendar 2016]](http://qiita.com/advent-calendar/2016/no-girlfriend) の5日目の記事です。

私「今年も彼女が出来ないまま年末を迎えることになるのか…」
???「彼女が出来ないなら造ればいいじゃないか」
私「そ、そうか！　出来ないなら作ればいい…　出来ないなら自分で造ってしまえばいいんだ！」

ということで自分好みの彼女を造ろうと思います。


## <i class="fa fa-question-circle" aria-hidden="true"></i> どうやって彼女を造るか
彼女を造る方法はたくさん有ります。この記事を見ているであろうエンジニアの皆さんであれば色々思いつきますよね?

- 水35Lと炭素20Kgとアンモニア4L... その他諸々を用意して錬成する
- アンドロイドを造ってAIを人並に進化させる
- 現実を微分するか二次元を積分する

~~告白する?確率論的に上記の手法のほうが優れている気がするのですがいかがでしょうか?駄目ですかそうですか~~

色々手法は存在しますが今回は最近よく使われているSlack上に造っていこうと思います.

## <i class="fa fa-exclamation-circle" aria-hidden="true"></i> Slack上で彼女と会話したい

Slack上に彼女を造る方法もたくさん存在します。

- hubot
- botkit
- webhookと適当なスクリプト

まだまだ他にもたくさんあると思いますが今回はMicrosoft Bot FrameworkとMicrosoft Azureで彼女を造っていこうと思います。

## <i class="fa fa-check-circle" aria-hidden="true"></i> Microsoft Bot Framework とは
今年3月に「Build 2016」で発表されたBot作成用フレームワークです。
Bot本体の作成と他のサービスへの接続を別々に考えながら開発することが出来るのでとてもおすすめです！


## <i class="fa fa-files-o" aria-hidden="true"></i> 彼女の作成手順

今回は以下のような工程で造って行きます.

- Bot Frameworkの環境構築
- Botの作成
- Azure へのアップロード
- Bot Directoryへの公開
- Slackとの接続

では駆け足で造っていきます

### 環境構築

まずは[ここ](http://aka.ms/bf-bc-vstemplate)からテンプレートをダウンロードしてきます。
ダウンロードした物はVisual Studioのテンプレートフォルダにそのまま入れます。
必要であれば[ここ](https://aka.ms/bf-bc-emulator)からデバッグ用のエミュレータもダウンロードしておきましょう。

Azureは[ここ](https://azure.microsoft.com/ja-jp/free/)から使えるように準備しておきます。
(学生なら[こちら](http://mspjp.net/article/program/microsoftazure/webapps/4346)！)


### Botの作成

早速造っていきます。
プロジェクトをテンプレートから作成して

![01.png](https://qiita-image-store.s3.amazonaws.com/0/30243/7d4dd869-c161-55b6-c947-d7d54b67dc5d.png)


コントローラ内のPostメソッドにBotの会話パターンを仕込んで

![02.png](https://qiita-image-store.s3.amazonaws.com/0/30243/bb2e34f9-9f21-ceb0-5a28-bdca71fd18c7.png)


出来上がりです！

![03.png](https://qiita-image-store.s3.amazonaws.com/0/30243/eae99639-4e25-cf6f-db33-c0f3ee1595ac.png)


### Azureへのアップロード
出来上がったボットはWeb APIベースの物なのでAzure App servicesに公開します。

![04.png](https://qiita-image-store.s3.amazonaws.com/0/30243/0f54dff6-3b50-c854-45a9-60475dca23ce.png)


### Bot Directoryへの公開
Botを使うためには登録する必要があるので登録します。

![05-2.png](https://qiita-image-store.s3.amazonaws.com/0/30243/0793867b-9965-8c72-ea09-2ef9b870d377.png)




登録すると2つの鍵とパスワードを手に入れられるのでそれをプロジェクトのWeb.Configに書き込んでもう1回アップロードします。

![06.png](https://qiita-image-store.s3.amazonaws.com/0/30243/2e347217-cadd-f3a7-809a-c6419f693315.png)



### Slackとの接続
Bot Connectorを使ってSlackと連携します。

[公式サイト](https://dev.botframework.com/bots)から先程登録した自分のBotからSlackのConnectを選択します。

![07.png](https://qiita-image-store.s3.amazonaws.com/0/30243/44a4afb7-505d-3d27-2dbb-2f8745fa8f9c.png)


必要な情報を召喚したいSlackから引っ張ってきて…
登録をして…
![11.png](https://qiita-image-store.s3.amazonaws.com/0/30243/1fa8aebd-c370-7ce2-e0c7-c409419b2e33.png)


チャンネルに招待すれば完了です！

![13.png](https://qiita-image-store.s3.amazonaws.com/0/30243/3bf5810d-e009-a257-c767-2129c013ec93.png)



## <i class="fa fa-exclamation-circle" aria-hidden="true"></i> 彼女が造れた！
![12.png](https://qiita-image-store.s3.amazonaws.com/0/30243/97cc7f64-939e-43cb-c38c-530474977128.png)

これさえできれば今日から貴方も<b>自分好み</b>の彼女を造れるのです！
私「これでクリスマスは悲しくないぞ！」

---

クリスマスの夜、彼の部屋からはすすり泣く声が聞こえましたとさ

## 終わりに

 Bot Frameworkは本当に簡単にBotを作成できるツールです。もちろん賢いBotを作るためには形態素解析や機械学習等専門的な知識が必要になりますが、他のサービスとの連携や公開等は非常に簡単ですし、Cognitive Serviceをはじめとする様々なAPIと組み合わせれば比較的簡単により人間に近いコミュニケーションが出来るBotを作る事ができます。年末のお休み期間にお試ししてみると楽しいですよ！　QiitaにもBot Frameworkのチュートリアルが何個か載っているので気になったかたは是非是非やってみてください！


~~追伸：Bot作りは楽しいですがやっぱり彼女も欲しいです~~