更新日: 2020-05-02
とうとう我が家でもスマートスピーカーのGoogle Homeを購入しました。本当に使えるのか半信半疑ではあったのですが、我が家にはまだ3ヶ月の娘もいるので、抱っこしながらいろいろ指示が出せるスマートスピーカーは結構便利です。子育て中の家族には結構役に立つアイテムだと思います。
スマートスピーカーで有名なのは、Amazon Echo, Google Home, Clova WAVEなどがありますが、Googleが一番一般ユーザに対するサービスとしてはいろいろ出している印象ですし、実際一番お世話になっているのもGoogleのサービスですので、我が家はGoogle Home Miniにしました。
Google Home とは何者か?
Google Home ってAmazonでは売ってないんですね。笑 確かにAmazonで買うならAmazon Echo買ってくれって感じですよね!とういうわけで、楽天で購入しました。セットアップは、Google Homeという名前のアプリ(ややこしい)で簡単にできるようになっています。
一応私もエンジニアですので、約4000円で買ったこの「Google Home Mini」とは一体何者で、この端末自身が持っている機能は何なのか?というのは気になるところです。
そこで今回は、Google Home 自身が持っている機能をいろいろ見てみて、クラウド上で処理される機能と、Google Homeで処理される機能を見極めたいと思います。もちろん、多少の推測がありますので確実にこうだとは言えないので、その辺りはご容赦ください!
ねえGoogle あなたはだれ?
まずは、Google Home 自身に聞いてみましょう!笑
Google Home じゃなくて、Google Assistantなのか!と思いましたね。この質問、初めは妻がしたのですが、Google Assistantですって言われてもなにそれ?って感じできょとんとしていました。
余談はこれくらいにしておいて、話しかけたときに返答してくれるあの声の主はGoogle Assistantです。
Google Assistantとは、Googleが開発した俗に言うAI機能を持ったソフトであり、様々な端末上にインストールされて使われます。複数端末で動作させても設定等が同期していることから、実際に処理が動いているのはGoogleクラウドの中でしょう。
つまり、音声を認識して、応答を選択する処理はGoogle Assistantの機能で、クラウド上で処理されているはず!
この聞き方だと、あたかもわたしの端末上で処理しているように答えますが、以下のように質問するとGoogle Assistantの本音が出ます。
やはり、Google Assistantは、クラウドの中で動いているようです!笑
ねえGoogleあなたの正体はこれだ!
では、本題の私の買ったこの4000円のGoogle Homeは何者なのか?どういう機能があるのか?順に考察していきたいと思います。
音を拾ってくれる
これはGoogle Homeの最もベーシックな機能でしょう!Google Homeは私の発した音声を録音してクラウド上のGoogle Assistantへ送信していると思われます。要はGoogle Home自身は解釈もしていない。Google Assistantに丸投げだな。
音声を再生してくれる
もう一つのベーシックな機能は、Google Assistantから送られてきた音声ファイルを再生することでしょう!そして、再生した音を聞いて私はGoogle Homeがしゃべっていると認識するわけです。Google Assistantに言われた通りに喋ってるだけだな。
初期設定は自分でやってるのね。
ここからはちょっと玄人向けの話です。
Google Homeを初め購入したときには、Wifiの設定をスマホのアプリ経由で行うことになると思います。これらの設定は、Google Home自身がWebAPIを公開しており、そのAPIを利用してスマホアプリが設定を実行しているようです。
このGoogle HomeのWebAPI仕様は、上のような非公式なサイトでまとめられています。あくまで、Google自体が公表している訳ではないので、ご注意ください。もっと公式にいろいろなAPIを公開してくれれば面白くなると思うのですが、これからに期待ですね!
例えば、以下のように実行することでGoogle Home の情報を取得することができます。
$ curl -s http://<google_home_ip>:8008/setup/eureka_info | python -m json.tool { "bssid": "xxxx", "build_version": "151425", "cast_build_revision": "1.39.151425", "closed_caption": {}, "connected": true, "ethernet_connected": false, "has_update": false, "hotspot_bssid": "xxxx", "ip_address": "xxxx", "locale": "ja", "location": { "country_code": "JP", "latitude": 255.0, "longitude": 255.0 }, "mac_address": "xxxx", "name": "xxxx", "noise_level": -95, "opt_in": { "crash": true, "opencast": false, "stats": true }, "public_key": "xxxx", "release_track": "stable-channel", "setup_state": 60, "setup_stats": { "historically_succeeded": true, "num_check_connectivity": 0, "num_connect_wifi": 0, "num_connected_wifi_not_saved": 0, "num_initial_eureka_info": 0, "num_obtain_ip": 0 }, "signal_level": -20, ... }
要は、これらの情報を用いてGoogle Assistantまで繋がるための設定をすることができると考えられます。
ただし、httpのみで、TLSは無理。認証もなし。なので、セキュリティ面ではガバガバです。ローカルLANからしか実行できないので、自宅のWifiに接続されたりしない限りは問題にはなりませんが、接続された場合はいろいろ操作されてしまうと思われます。
Google Assistant以外からも言うこと聞くのね。
Google Homeに自発的に発生させたい場合も多いと思います。例えば、何かの通知をして欲しい場合とかですね!
実際、多くの人がgoogle-home-notifierというライブラリを使ってGoogle Homeにしゃべらせる、ということを実現しています!このライブラリの内部の仕組みは、以下のページがとてもわかり易かったので参考にしてください。
このgoogle-home-notifierは内部でCastv2というプロトコルを使っており、このプロトコルを使ってmp3の音声ファイルをGoogle Homeに対して送信しています。
つまり、Google HomeはこのCastv2というプロトコル通信を受け付けているということになります。このプロトコルの仕様は以下のGithubページにまとめられており、これを読むと、Google Home は ポート8009 (TLS)で待ち受けていると思われます。
このCastv2というプロトコルですが、プロトコルの機能上は認証を行うことも可能らしいのですが、Google Homeではやっていません。やはり、セキュリティ的にはガバガバです。
まとめ) Google Home 全然賢くない。笑
Google Home には私の調べた限り以下の4つの機能が備わっていると考えられます!
- 音を録音してGoogle Assistantに送信する
- Google Assistantから音声ファイルを受け取って再生する
- Web API経由で端末の設定をする
- CastV2で音声ファイルを受け取って再生する
どれも単純な機能だと思います。つまりGoogle Home自身は全然賢くないのです。まあ4000円の端末なのでこんなものでしょう!せめて、もうちょっとセキュリティ面では賢くなってもらいたいものですね!喋りかけてくる人をみんな信用してはだめだよ。