スマートスピーカーを使って業務システムを作る(考察編)


# 前置き
この記事は [OPENLOGI Advent Calendar 2017- Qiita] (https://qiita.com/advent-calendar/2017/openlogi) の12日目です。

![スマートスピーカーと会話する作業員.jpg](https://qiita-image-store.s3.amazonaws.com/0/130428/b1feab14-9aea-f32f-806b-ab417a7fe0a6.jpeg)
⬆︎こんな感じのを作ります。

こんにちは。[株式会社オープンロジ](https://www.openlogi.com/)の@guai3 と言います。
皆さん! WMS作ってますか:question:
我々は、 **未来のWMS** を作っています。WMSを知らない人のために説明すると 
`Warehouse Management system` の略で、物流のための在庫管理システムです。
興味のある方は、是非とも[弊社](https://www.openlogi.com/corp/recruit/index.html)に遊びに来て下さいね。

今年になって[Google アシスタント対応アプリを日本語で作ることができる](https://developers-jp.googleblog.com/2017/10/google-assistant-app-ja.html?m=1)ようになったので、今回は Google Home を使って未来のWMSを作ってみましょう!


# 業務システムとしてのスマートスピーカー
スマートスピーカーは家で使う形で現在は特化していますが、業務用途でもかなり活用できるのではないかと私は考えています。

タブレットやPCなどのGUI端末よりスマートスピーカーが業務システムとして優れている点を以下に挙げてみました。デメリットについては読者の皆様は死ぬほど思い付くと思うので、それらのデメリットを考慮しても以下のメリットが勝る場合は導入を検討してみてはどうでしょうか?

- 両手がふさがっているときも操作できる
- GUIでは何度もボタンを押して画面遷移が必要な機能を音声の自然なインタラクティブなUIで実現できる
- GUIがないので、開発工数が少なくてすむ
- ユーザーがOSの管理をしないので、端末ごとの環境統一がしやすい
- スピーカーなので現場でのアナウンス用の端末として使える
- 端末が6,000円程度から購入できるので業務端末としては格安で導入しやすい(10台買っても60000円❗️)
- 近くの人が何をシステムを使って実現したいのかわかる → 仮にスマートスピーカーが答えられない質問でも近くの熟練者が答えてくれるかもしれない
- GUI端末だと使っている人しか操作がわからないため操作方法が普及しづらいが、スマートスピーカーを使うと、実際に使っている様子が他の人にもわかるため、システムの使い方が普及しやすい
- 年配者などITリテラシーの低い人間にも操作しやすい
- コンシューマー向けの場合は、何を言えばどんな動作するのかユーザーはわからないため、それをカバーするUXを実現するのが大変だが、業務用システムの場合、事前にこの言い方で話しかけて下さいとマニュアルなどで周知すればよいので、その点については考慮しなくてよい
- マニュアルを作りやすい(画面のスクリーンショットとか要らないよ!)

上記を実現するために、Google Home 用の Action on google を Dialogflow を使って作りたいと思います。 何を言っているかわからない方もいるかと思うので、開発にあたって知っておいた方がよい Google Home 周りの用語について説明します。

# 用語解説

## Google Home 
<img src="https://lh3.googleusercontent.com/igThvoKwToXtZOfTANWbgp2ZoLnPBV2KDt9oJuaK419yIHQIo24eIcsCbgWcnfwlFjs=w1000" width=20%>

「OK Google」、「ねぇGoogle」 と話しかければ、Google Assistant が利用できるGoogle製のスマートスピーカーです。
2017年10月23日 にGoogle Home Mini という廉価版も発売されました。上位機種との違いは大きさと音質とボタン操作可能かの違いがあります。
実は、Google home mini では機体の上部をタッチすれば操作が可能でしたが、[バグが発生したため、オミットされてしまいました😂](https://japan.cnet.com/article/35108585/)

普通のBluetoothスピーカーとしても使えるので、スマートフォンとBluetooth接続することも可能です。しかも、Bluetoothスピーカーとしては使用している間も 「OK Google」 といえば「Google Assistant」 の機能を利用できます。

公式サイト
https://store.google.com/product/google_home

## Google Assistant   
<img src="https://developers.google.com/actions/assistant.png" width=20%>
Google が 2016年に発表した音声アシスタントプラットフォームの名称、Google Home だけでなく、他メーカーが開発したスマートスピーカーでも使えます。
さらにAndroidではOS標準の機能として使えますし、iPhoneでもiOSアプリとして提供されています。
各々のハードウェアの特性(Androidフォンでは「自撮りして」というと自撮りをしてくれる。)によって、できることに違いはありますが、それ以外の中心的な機能については共通です。
「OK google 10面ダイスを2個振って」なんていうと、きちんとサイコロを振って目を出してくれるので、急なボードゲーム🎲にも最適です。

公式サイト
https://assistant.google.com

## Actions on google
スマートフォンで言うところのアプリ。
サードパーティが開発するソフトウェア。インストール不要なので、内蔵ソフトのような感覚で使えます。

https://robotstart.info/2017/10/26/best_teacher.html


## Dialogflow（旧 api.ai）

<img src="https://1.bp.blogspot.com/-BmeQyJ-0GuU/Wd0LadZyRrI/AAAAAAAAD-Q/c2EAfIPRgZkqsQ55kuphuWoM6qhOKmj5ACLcBGAs/s1600/image1.png" width=40%>

チャットボットアプリを作る時に良い感じにできるやつです。
Actions on google 以外にも Line や Slackなどにも対応しています。


[Google Developers Japan - Google アシスタント対応アプリを日本語で開発してみよう](https://developers-jp.googleblog.com/2017/10/google-assistant-app-ja.html ) より 引用

> Dialogflow を利用すると自分でサーバーを用意することなく、アシスタント対応のアプリを作成できます。開発者はユーザの入力とそれに対応する応答のパターンを GUI 上で登録していくことで、簡単な会話型のアプリを作ることができます。またパターンに漏れたものや Dialogflow 上だけでは処理できない情報も、その後ろにフォールバック サーバーを設けることで対応できます。会話型エージェントシステムを作成する際に肝となる形態素解析の大部分を Dialogflow に任せることで、アプリの開発をより速く進めることが可能となります。

![aog.png](https://qiita-image-store.s3.amazonaws.com/0/130428/ec41974b-dabe-22bb-5d2c-55909d977f48.png)

#VUI(Voice User Interface) 論考

スマートスピーカーのインターフェースはGUIとは異なり声のみなので、GUIやCUIアプリを開発する時とはUXが異なります。その為、開発する前にある程度の指針と方針を決めましょう。

こちらに Actions on Google の チュートリアルの日本語訳 があるのでそれをを参考にして自分なりの指針を作ります。
[Design in Action "Design Principles and Methodology"を日本語訳しました](
https://www.eisbahn.jp/yoichiro/2017/10/actions_on_google_custom_design_3.html)


以上のことを元に以下の3つの方針を立てたいと思います。

- **実装時にメッセージを自分で読み上げてみよう**
 - 読む分にはよい文章だとしても、聞くと良い文章とは限りません。そのメッセージをスクリプトに書き込む前に、自分で発声してみましょう。

- **エラーメッセージに愛嬌を**
  - エラーメッセージは音声として相手の耳に届くもので、読まれるものではありません。
同じエラーを何回も言われると腹が立ってきます。
言い回しを少し変えるなどして少なくとも5種類は用意しましょう。(5種類の理由は3種類だとユーザーにパターンで返してるなと思われやすいからです。本当はもっと多い方がいいと思いますが、あまりに多いと大変だと思うので、とりあえず5種類にしてみました。)

- **できるだけ短く答えよう**
 - 日本語は英語と異なり、動詞と否定が文の後ろになるので、文を長くするとユーザーをいらだたせます。できるだけ短く返すようにしましょう。特に業務システムは遊びで使われる訳ではないので、単刀直入に返信しましょう。
 

# 仕様

ここではちょっとした在庫問い合わせシステムを作ってみたいと思います。
ユースケースは 倉庫の人が特定の商品がどこに何個あるかを問い合わせるために利用するシチュエーションを想定しています。

```
ユーザー 「OK google 倉庫管理と話す」
google  「こんにちは。在庫管理です」
ユーザー 「ピカチュウのぬいぐるみは何個ある?」
google 「30個です」
ユーザー 「ぬいぐるみは何個ある?」
google 「ぬいぐるみに該当する在庫は3つあります。読み上げますか?」
ユーザー 「はい」
google 「1 ピカチュウのぬいぐるみ 2 ドラえもんのぬいぐるみ 3 みかんのぬいぐるみ です」
ユーザー 「2」
google 「ドラえもんのぬいぐるみは20個です」
ユーザー 「どこにある?」
google 「倉庫の入り口にあります」
ユーザー 「ありがとう 」
google 「どういたしまして」
```
こんな感じで答えてくれるシステムです。
商品を問い合わせたときに名前が似たような商品が4つ以上ある場合は聞いている人がつらいので、適切なメッセージをユーザーに伝える必要があります。
「候補の商品は10あります。もう1度聞いてください」 というようなエラーメッセージがよいでしょう。


# 続く!

ここまでお読み頂きありがとうございました :bow:
次回(12/12)は以下の2つのブログなどを参考にしながら、上記の要件を満たすシステムを使ってみます。 → 12/12追記。 作ってみました! [「OK Google すみません。なんて言わないで」 〜スマートスピーカーで業務システムを作る(実装編)〜](https://qiita.com/guai3/items/293bf18a722922c4cbf9)

[Dialogflow（api.ai）とCloud Functionsを使ってチャットボットを作ってみた]
(https://www.apps-gcp.com/dialogflow-cloud-function-chatbot/)
[Actions on Google と AWS Lambda で Google Home から Slack にポストする - ユニファ開発者ブログ](http://tech.unifa-e.com/entry/2017/10/16/103458)

私はペーペーですが、今後は毎日、弊社の誇る神エンジニアたちが素晴らしい記事を書いてくれますので、興味を持った方は、是非とも毎日こちらのアドベントカレンダーをのぞきに来て下さい。

オープンロジはエンジニアを募集しています。この記事を読んで興味を持った方はこちらのwantedlyからご応募してください。

https://www.wantedly.com/projects/171442