新年をシリコンバレーで迎えるための7日間ハンズオン

気づいているでしょうか。今日を含め、あと7日間で2016年が終わります。

今年も仕事に追われ新しい技術の習得がままならず、クリスマスを一緒に過ごす相手もいない・・・そう、世界に一つだけの、ナンバーワンでないロンリーワン・・・(あれ、目から鼻水が)それで2016年を終えてしまってもいいのでしょうか？

大丈夫です。あと7日間あります。Tech-Circle Hands on Advent Calendar最終日は[我々Tech-Circleで開催したハンズオン](https://techcircle.connpass.com/)から厳選し、新年をシリコンバレーで起業!?して過ごすための一日一ハンズオンをご紹介します。これを乗り切れば、特別なオンリーワンとして新年を迎えられるでしょう(※なお、実現性は保証致しかねます)。

では参りましょう！

## Day1 至高のBOTのプロトタイピングを行う

まずは、サービスのプロトタイプを作らねばなりません。今から作るとしたらどんなサービスがいいでしょうか？
それは、BOTと思います。まずは[LINE BOT AWARDS](https://botawards.line.me/ja/)で優勝して、起業資金の1000万円をゲットしましょう。

ではどんなBOTがいいでしょうか？そのアイデアのインプットとして[Tech-Circle BOT Mashup World 2016](https://techcircle.connpass.com/event/30696/)の資料をご紹介します。

[Tech-Circle BOT Mashup World 2016 資料集](https://techcircle.connpass.com/event/30696/presentation/)

一緒に旅をするBOT、CDのジャケットから詳細を教えてくれるBOT、また翻訳のBOTや開発チームで使えるBOTなど、面白BOTから実用BOTまで、様々なBOTのプロトタイプが提示されています。

![image](https://qiita-image-store.s3.amazonaws.com/0/25990/799fa225-b105-a5ba-7b2b-2802f5fb9b32.png)

そして、BOTを作る際のポイントについてもまとめられています。

![tech-circle-15-possibility-of-bot-1-638.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/039e9a17-5ea2-a8fa-6aa4-e48ea9405421.jpeg)
[Tech Circle #15 Possibility Of BOT](http://www.slideshare.net/takahirokubo7792/tech-circle-15-possibility-of-bot)

こちらの資料を読めば、BOTをそもそもどういう風に作るべきか、そしてどんなタイプのBOTがいいのかについて知見が得られると思います。それをもとに、まずはプロトタイプを作ってTwitterやSlackなど、利用しやすいプラットフォームで公開してみましょう。面白いものができたら、どんどんといろんな人からメンションが飛んでくるようになります。そこで・・・

## Day2 対話データの収集を行う

続々とやってくる対話のデータを余すことなく収集し、活用するためにTwitterのようなストリーミングデータをリアルタイムに処理できる基盤を学びます。それが[Apache Spark](http://spark.apache.org/)です。

[Tech-Circle Sparkでツイートをリアルタイム解析するWebアプリの開発(ハンズオン)](https://techcircle.connpass.com/event/21960/)

![c9311178b1bcea5a82f88bd99ceb0b3e.png](https://qiita-image-store.s3.amazonaws.com/0/25990/39555f4b-fd6d-a4c1-3721-da78e527dc3a.png)
[ハンズオン資料](https://github.com/negokaz/spark-hands-on-development)

これでどれだけデータが飛んできても安心です。ハンズオン資料では分散クラスタの構築までカバーしているので、いざとなったらスケールアウトも可能です。

<img width="400" alt="spark.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/25990/5b568dcb-844b-0fd5-eec6-4aae2a1b8584.png">

そして、続々と蓄積されるデータは活用しない手はありません。そこで・・・

## Day3 BOTを機械学習で賢くする

そう、機械学習です。対話に必要な発話生成を行う基本的なモデルが、[Neural Conversational Model](https://arxiv.org/abs/1506.05869)と呼ばれるモデルになります。

![basic.png](https://qiita-image-store.s3.amazonaws.com/0/25990/cc11b219-49d6-cc6a-64df-1f559b96c27c.png)

このベースとなっているのが、Encoder-Decoderモデルというものです。これは最近話題となったGoogle翻訳でも使われているモデルになります。

[Tech-Circle Chainerで自然言語処理を行い翻訳に挑戦(ハンズオン）](https://techcircle.connpass.com/event/23365/)
(こちらの勉強会では、NAISTのYusuke Odaさんをお招きして開催しました)
![encoderdecoder-tis-1-638.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/f425e0c6-7391-be90-4f3a-87ea88cfafa5.jpeg)
[Encoder-decoder 翻訳 (TISハンズオン資料)](http://www.slideshare.net/YusukeOda1/encoderdecoder-tis)

これで収集したデータで学習し、BOTに機械学習を組み込むことができるようになりました。しかし、機械学習を利用したBOTはりんななど山ほど有り、そう真新しいものではありません。シリコンバレーに行くためには、もう一味加えたいところです。そこで取り組むのが・・・

## Day4 BOTをキャラクターとして具現化するVR技術を習得する

そう、VRです。
テキストでしかやりとりできないBOTを、VR空間で実際に出会えるキャラクターに仕立て上げましょう。そのために学ぶのが[Unity](http://japan.unity3d.com/)です。

[Tech-Circle Unity VRハンズオン UnityでVRアプリを作ってみよう！](https://techcircle.connpass.com/event/40052/)

![unityvr-1-638.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/65c0648e-2ac3-c7e3-d8d2-dec74b589c65.jpeg)
[UnityでVRアプリを作ってみよう！ （講演編）](http://www.slideshare.net/MasahiroIde/unity-67370735)

このハンズオンでは、Unityを使ったVRコンテンツの基本的な作り方が学べます。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Tech-Circle VRハンズオンデモ<a href="https://t.co/AfGNeYpcfG">https://t.co/AfGNeYpcfG</a> <a href="https://twitter.com/YouTube">@YouTube</a>さんから</p>&mdash; ピクシィ (@icoxfog417) <a href="https://twitter.com/icoxfog417/status/812525638783377409">2016年12月24日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ちょうど今日(12/25)から[バーチャルYouTuber「キズナ アイ」のモデルも公開された](http://www.moguravr.com/kizuna-ai/)ので、こちらを利用するのも良いと思います(※商用利用については要連絡なので注意してください)。

![201612231043299000.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/8d705496-68f2-293b-5fd3-65e28046bfa6.jpeg)

これで対話BOTが晴れて実体を持つキャラクターになりました。しかし、どうにも無機質な印象を受けます。それもそのはず、この状態では姿があるだけなのでおしゃべり人形と変わりません。シリコンバレーに乗り込むには、対話をより実感のある「体験」にまで仕上げる必要があります。そこで学ぶのが・・・

## Day5 キャラクターに魅力的な動作を学ばせる

強化学習です。
人と人とのコミュニケーションは、言語だけでなく非言語の情報(所作や視線など)も重要であるということがわかっています。一説では、[非言語情報の方が重要](https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A9%E3%83%93%E3%82%A2%E3%83%B3%E3%81%AE%E6%B3%95%E5%89%87)とも言われています。そう、我々に足りないのはまさこれです。

しかし、非言語情報を定量的に評価するのはとても難しいです。人が「かわいいな」と思っても、それがどんなパラメーターにより生起したのかは定義しきれないからです。この「特徴」を定義できない状態では通常の機械学習は行うことはできません・・・が、まさに「なぜかはわからないけど(最終的な)良し悪しはわかる」というような状況で使えるのが強化学習です。

[Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン](https://techcircle.connpass.com/event/43844/)

![techcircle-18-python-openai-gym-1-638.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/785f6021-7770-41b9-c2d6-674969e8c01b.jpeg)
[Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン](http://www.slideshare.net/takahirokubo7792/techcircle-18-python-openai-gym)

強化学習は、[囲碁のプロ棋士に勝ったとして有名になった技術](https://japan.googleblog.com/2016/01/alphago.html)でもあります。このハンズオンでは[OpenAI Gym](https://gym.openai.com/)という強化学習を学習させるためのプラットフォームを使って、実際にゲームを攻略し結果を公式サイトにアップロードすることまでが体験できます(以下は本番当日の参加者の方のツイートです)。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">サンプルだけどOpenAI Gymに投稿してみた。ちゃんと育ててあげると愛着わきそう <a href="https://t.co/7RX0G9d6ek">https://t.co/7RX0G9d6ek</a> <a href="https://twitter.com/hashtag/techcircleja?src=hash">#techcircleja</a></p>&mdash; Yusuke Uchida (@yu4u) <a href="https://twitter.com/yu4u/status/798852776335810560">2016年11月16日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Open AI gymに上げてみた<a href="https://t.co/xjTUzURLTX">https://t.co/xjTUzURLTX</a><a href="https://twitter.com/hashtag/techcircleja?src=hash">#techcircleja</a></p>&mdash; きゅんどう (@ksyundo) <a href="https://twitter.com/ksyundo/status/798851220706193408">2016年11月16日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

人の感性は囲碁より攻略が難しいかもしれませんが、ここが天王山です。シリコンバレーを目指して、人をメロメロ(死語)にする発話と仕草を学習させましょう。

## Day6 インフラ環境の構築を自動化する

さて、これで魅力満載のキャラクターができましたが、現段階ではまだあなたのPCで動いているだけです。世界から殺到する(であろう)アクセスを捌ききるには、やはり多数のサーバー上で動かしてやる必要があります。しかし一つ一つサーバー上で環境を構築していくのは大変ですし、ミスも起こりやすいです。
そこで学ぶべきなのが、Infrastructure As Codeです。ここでは、それを実現できるソフトウェアのうちの一つ、[Terraform](https://www.terraform.io/)を利用します。

[Tech-Circle Terraformを用いてインフラと監視をコードで構築する（ハンズオン）](https://techcircle.connpass.com/event/25496/)

![step-by-stepterraformaws-1-638.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/4fb32e68-3ff3-eadf-06d7-1cf6f19c155e.jpeg)
[Step by stepで学ぶTerraformによる監視付きAWS構築](http://www.slideshare.net/YoTakezawa/terraform-57653858)

Terraform(に限らずInfrastructure As Codeを実現するソフトウェア)では、環境構築の手順を書き出したファイルさえあれば環境構築そのものは自動でやってくれる機能を持っています。
これでAWS、Azure、GCP、お好きな環境であなたのキャラクターを何台ものサーバーで動かすことができるようになります。

<img width="400" alt="step-by-stepterraformaws-13-638.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/25990/ea6fedc4-966f-1add-b829-99bcc2856d0a.jpeg">

もう世界展開は目前、シリコンバレー行きのチケットも購入予約準備ですが、人生にもビジネスにもトラブルはつきものです。障害の検知はいち早くできるようにしておきましょう。そこで学ぶのが・・・

## Day7 サービスの監視を行う

運用監視です。
日本を出立する前に、サービス監視の仕組みを構築しておきましょう。そのために利用するのが、サービス監視用のソフトウェアの雄である[Zabbix](http://www.zabbix.com/jp/)です。

[Zabbix3.0リリース記念！世界最速? Zabbix3.0ハンズオン](https://techcircle.connpass.com/event/27193/)

![tech-circle13-zabbix30-lld-1-638.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/3189bf20-d0d2-b2a3-527e-dcfb9f26b29d.jpeg)
[Tech circle#13 zabbix3.0ハンズオン lld](http://www.slideshare.net/ikedai/tech-circle13-zabbix30-lld)

特にこのハンズオンでは、Zabbix3.0から搭載された障害の予測通知機能についても解説があります。これにより、「障害が起こった」タイミングではなく、「障害が起こりそう」なタイミングで手を打つことが可能になります。

<img width="400" alt="prediction.png" src="https://qiita-image-store.s3.amazonaws.com/0/25990/8ad325cc-bbaf-ec7c-e99d-82335ac54af0.png">

これでフライト中も安心です。きっと、あなたはこの最終日のセクションを、シリコンバレー行きの機内で読んでいることでしょう。GOOD LUCK!あなたの2017年が素晴らしいスタートを切れますように！

[Tech-Circle](https://techcircle.connpass.com/)は、今後も技術トレンドを押さえた「今おすすめしたい技術」を取り上げていきます。興味がある方は、ぜひ一度参加していただければと思います。また、「コレが来る！」という物をお持ちの方は、ぜひ発表者としてもご登壇いただければと思います！