比べてわかった、Google HomeとAmazon Echoの大きな違い

Google Home（Google Assistant）とAmazon Echo（Amazon alexa）をしばらく平行利用して、特に違いを感じた部分をざっくりとまとめてみた。

まずは実際に1ユーザーとして、何ができて何ができない、どちらがどの点で優れているのか、を確かめたかったので、プログラミング要素は薄め。

# 3行で
* 日本（日本語）環境では現状Google Home優勢
* IFTTTでいろいろやりたいならGoogle Home
* 家電連携はどっちもeRemote mini（RM mini 3）買っておけばOK

# 空前のスマートスピーカーブーム（？）に乗ってみた
日本国内でスマートスピーカーがアツイ。

運良くAmazon Echoがすぐに手に入ったので、以来alexaに生活の一部を手伝ってもらっている。Google Home miniが半額で売っていたので、ついでにこっちも衝動買い。

どちらもほとんど似たようなことができそうなイメージを抱いていたが、比べてみるとそれぞれ得手不得手があることがわかった。本記事では、明らかな優劣が認められた点に絞ってまとめてみた。

なお、本記事はあくまで執筆時点での日本（日本語）環境におけるもので、アメリカ等では事情が全然違う可能性があることに注意。


# 単体でできることの比較

まずはGoogle Home（Google Assistant）とAmazon Echo（Amazon alexa）単体でできることを比較してみる。


## 天気予報

*「明日の天気は？」*

Siri登場時からみんなが聞いてきたド定番。端的に答えてくれる質問の割に有益なので、朝ハンズフリーでサクッと聞けるのは実際便利だったりする。

ただ、もちろんそれはちゃんと予報が当たれば…という話で、ハッキリ言ってしまうとGoogle以外使い物にならない。

以下はGoogleとAmazon、そして参考までにAppleが参照している天気予報サービスを端的にまとめた表である。

| | Google | Amazon | Apple |
|---|---|---|---|
| 参照先 | [ウェザーニューズ](http://weathernews.jp/) | [AccuWeather](https://www.accuweather.com) | [The Weatcher Channel](https://weather.com/) |
| 精度 | ◯ | △ or × | × |

ウェザーニューズの精度が圧倒的に良い。AccuWeatherもTheWeatherNewsもダメダメで使い物にならない。気温はまだしも、せめて雨が降るとか降らないとかは当てて欲しい･･･
（そりゃあ、サンフランシスコに住んでたら細かい天気なんて気にならないもんな！？

というわけで、**天気予報はGoogle Homeが圧勝**。


## 経路案内

alexaは経路案内未対応。**Google Assistantは経路案内が可能で、交通機関を利用した経路案内にも対応している**。

ただし、何時までに◯◯へ行きたい、というようなリクエストには未対応で、現時刻からの案内となる。

**2017/12/24 追記**
「ここから○○駅に22時に到着」や、「○○駅から○○駅まで電車で22時に到着」と言うと、時間を指定できるとコメント頂きました。
ただし、「分」までは指定できないようです。

## 買い物

Google Assistantでは買い物はできず、ショッピングリストに追加することしかできない。
対して**alexaなら、過去にamazon.co.jpで購入したものであれば声だけで買い物ができる**。

ただし、Amazonで買い物をするにはプライム会員であることが条件となるので注意。


## 音楽

GoogleもAmazonもLINEもAppleも、「スピーカーなんだから音楽聴くっしょ？えっ聴かないの！？」ってくらい押しているけれど、有料サブスクリプションの音楽サービス使う人はまだ日本国内では少ないイメージ。

広告が途中で流れても良ければ無料で音楽が楽しめる [Spotify](https://www.spotify.com/jp/) を利用している人もいるんじゃないだろうか。

Google HomeはSpotifyに対応しているし、無料プランでも利用可。
対してAmazon Echoは残念なことに有料プランも無料プランも現状対応していない[^1]。

**もし無料で音楽が聴きたいのであれば、迷わずGoogleを選択するのが吉**。

ちなみに個人的に使っているApple Musicは（もちろん）どちらも非対応😇。

## カレンダー

alexaはGoogleカレンダーと連携して予定を読み上げてもらうことができる。

ただし、**連携できるのは1アカウントのみ**。複数人で利用する場合は、全員の予定を1つのアカウントにまとめる必要がでてくるし、仮にそうしても全員分読み上げられるのはあまり実用的とは言えない。

対して**Google Homeは6人まで声を登録ができる**ので、呼びかけた時の**声によってアカウントを切り替えて**予定を読み上げてくれるので便利だ[^2]。
  
ただこの機能、声真似して別人になりすますことも不可能ではないし、声色を変えると本人と認識してくれない、など少し問題もある[^3]。とはいえ、日常家の中で使う分にはほぼ問題ないだろう。我が家でも普通に使う分にはしっかり聞き分けてくれた。

というわけで、**1人暮らしでないならばGoogleに軍配が上がる**。

## リマインダー

**2018/2/11 追記**
いつのまにかGoogle Homeでリマインダーが設定できるようになっていた。
alexaでもリマインダーが設定できるが、そのUXには大きな違いがあったので紹介する。

### alexa
まずはalexaの場合。
たとえば以下のようにしてリマインダーを設定できる。

```
User「alexa、リマインダーを設定（して）」
alexa「何のリマインダーですか」
User「〇〇」
alexa「いつリマインドしましょうか」
User「14:30」
alexa「では午後2時30分にリマインダーをセットします」
```

```
User「alexa、毎週火曜日の朝7:00に〇〇をリマインド（して）」
alexa「はい、では毎週火曜日の午前7:00にお知らせします」
```

設定した時刻になると、

「（ピッコーン）〇〇のリマインダーです、（ピッコーン）〇〇のリマインダーです」

と2回繰り返して教えてくれる。
プッシュ通知の設定をONにしてあれば、スマホにもプッシュ通知される。（はずなのだが、我が家の環境ではiPadには通知されるものの、iPhoneにはなぜか通知されずバグがある模様）

ここで設定したリマインダーはスマホのalexaアプリからも確認や編集ができる。

alexaのリマインダーは結構優秀で、使い勝手が良いと感じた。
具体的には以下のポイント。

1. 繰り返し設定（毎日、平日、毎週末、毎週〇曜日から選択可能）
2. アプリから作成や修正、削除が可能
3. アラームと違い、勝手に止まってくれるので「alexa、ストップ」と言わなくて良い
4. どんなリマインダーなのか読み上げてくれる（上限128文字）

個人的には3番目と4番目が結構おもしろいと感じている。
今のところ外部連携でalexaを喋らせるAPIは存在していないのだが、
**アプリからリマインダーを設定することで、家の中にいる人にメッセージを伝える、というような使い方が実質可能ということになる。**


### Google Home（Google Assistant）
さて、続いてGoogle Homeの場合。

設定方法はalexaとほぼ大差ないのだが、通知方法がalexaとは大きく異なる。

設定時刻になると、「（ポ）ピコーン」と1回控えめに音がなり、Google Home miniの場合本体上部のLEDライトが1つ点灯する。
そして、Google Homeやスマホだけでなく、PC/Macのブラウザにもプッシュ通知される点がalexaとは大きく異なる。

ちなみにGoogle HomeのLEDライトは「ねぇ、Google、リマインダーを教えて」と言って、当日のリマインダーを確認すると既読扱いになり消灯する模様。

不便だと感じたのは、アプリからはリマインダー一覧を直接表示できるメニューが見当たらず、Google Assistantに「リマインダーを表示」と言って（書いて）、表示してもらう必要があったこと。
また、アプリからはリマインダーを編集することができず、作成と削除のみ対応だったことも少し気になった。

また、繰り返しのリマインダーを作成した場合、Google Assistantアプリ上では繰り返しであることが判断できず、削除もできないという仕様の模様。

やや不可解な挙動だが、これはGoogleカレンダーのリマインダー機能をGoogle Home（Google Assistant）から利用できるようにしているが、完全に対応できていないために発生しているように感じた。
Googleカレンダーでは、リマインダーの編集が可能で、繰り返し設定の確認もでき、削除も可能だった。

結論としては、リマインダーはあくまでGoogleカレンダーのサービスであり、簡易的な作成や確認はGoogle Home（Google Assistant）上でも行える、という認識でいたほうが良さそうだ。

### 結論

カレンダー上で確認したり、PC/Macで通知される方が嬉しいならGoogle。
家の中で音声で通知される方が嬉しいならalexa。

## アラーム

どちらも大差ないのだが、Google Assistantにお願いする場合は言い回しに注意する必要がある。

「ねぇ、Google。7時になったら**教えて**」  

というような言い方をすると、~~「すいません、リマインダーの作成にはまだ対応していません」と言われてしまう[^4]。~~
前項のリマインダーが設定される。（**2018/2/11 追記**）

なお、「ねぇ、Google。7時になったら**起こして**」と言えば、アラームが設定される。


# IFTTT連携を比較

Google AssistantもAmazon alexaも [IFTTT](https://ifttt.com/) で様々なサービスと連携ができる。
どちらもアクションには対応しておらず、トリガーのみ利用可能。

さて、比較してみるとすぐにわかることだが、両者はスタンスがかなり違う。

alexaのトリガーには、「特定のフレーズ」の他に「ショッピングリストに商品が追加された時」や「新しい音楽が流れた時」、「TODOリストが編集された時」など特定のシチュエーションで発火するトリガーがたくさんある。

<img width="1343" alt="alexa_ifttt.png" src="https://qiita-image-store.s3.amazonaws.com/0/12896/9ea17264-47be-9ce0-592d-baaccc5f1476.png">

対してGoogle Assistantには、「特定のフレーズ」しか存在しない。
しかし、この「特定のフレーズ」の自由度や実用性が非常に高いのが特徴だ。  

<img width="1347" alt="google_assistant_ifttt.png" src="https://qiita-image-store.s3.amazonaws.com/0/12896/0f81641e-5e12-bfa4-6fb1-7b6ec762a4c6.png">

## 特定のフレーズ

### alexa

話しかけて使えるトリガーの「特定のフレーズ」だが、alexaは本当にシンプル。
決まったワードに反応する。これだけだ。

<img width="468" alt="alexa_specific_phrase.png" src="https://qiita-image-store.s3.amazonaws.com/0/12896/b5907d06-8974-4253-2672-429287fcca2d.png">

### Google Assistant

Google Assistantは結構使い勝手が良い。  

* オプションで2つフレーズを追加できるため、言い間違い/言い換え/認識ミスをカバーできる
* 変数（数字 `#` と文字列 `$` それぞれ1つ）を使える
* 応答の文言を指定できる（alexaは「はい」としか言わない）

<img width="285" alt="google_assistant_specific_phrase.png" src="https://qiita-image-store.s3.amazonaws.com/0/12896/9a748b49-de60-c1b4-7800-b8ff318fba2f.png">

ここまでできると結構やれることがある。  

たとえば、「家事リストに `$` を追加(して)」と言ったら、「家事リストに `$` を追加します」と応答させた上で、iOSのリマインダーに `$` を追加するといったことが可能だ。

ちなみに、ここで設定したアプレットはもちろんiOSのGoogle AssistantアプリやAndroidからも利用できる。

### alexaでは使うのがめんどうくさい

かなり重大な問題がコレ。

| | Google Assistant | alexa |
|---|---|---|
| 使い方 | ねぇ、Google。◯◯◯◯ | アレクサ、◯◯◯◯（を）トリガー |

alexaからIFTTTの「特定のフレーズ」を使う場合、日本語では「アレクサ、◯◯（を）トリガー」と言う必要がある（英語なら "alexa, trigger xxxxx."）。

想像できるかもしれないが、非常に面倒くさい。
言い回しも気持ち悪くなることが多い。

正直これだけでGoogle Homeを使いたくなる理由になりうる…

## まとめ

IFTTTを使えば、alexaもGoogle Assistantもずいぶんやれることが増える。
ただし、実用的なのはGoogle Assistantかもしれない。


# スマートホーム（家電連携）を比較

あくまで個人的な感覚だが、いわゆるIoTな家電をGoogle HomeやAmazon Echoのために1から全て買い揃える人は稀だろう…

現実的な線でいくと、おそらく大多数の人が落ち着くのが、**赤外線リモコンの代わり**に声で操作してくれるデバイスの導入。というわけで、選択肢は自ずと限られてくる。

## alexa

### スマートホームスキルかカスタムスキルか

重要なのはスマートホームスキルに対応している製品かどうか。  

スマートホームスキルであれば、例えば直感的に「アレクサ、テレビをつけて」と言ってテレビをつけることができる。

対してカスタムスキルの場合、「アレクサ、[スキル名]で◯◯をして」というように、必ずスキル名を付けて命令しなくてはならない。もしくは一度「アレクサ、[スキル名]をスタート」と言ってスキルを起動してから命令することも可能だが、家電を操作するためにそのステップを踏むのはさすがにナンセンス。

例えば [RATOC Systems スマート家電コントローラ RS-WFIREX3](http://www.ratocsystems.com/products/subpage/smartphone/wfirex3_tokutyo.html) はカスタムスキルでの連携なので、「アレクサ、家電リモコンでテレビをつけて」と言う必要があるわけだ。

まとめると、もしも以下2点を気にしないのであれば問題にはならない。

1. テレビなど操作対象の名称に加えて、スキル名を覚えておく必要がある
2. 「アレクサ、[スキル名]で◯◯」と一気に言い切る必要がある（途中でつっかえて言い間違えるとアウト）

### スマートホームスキル対応製品

価格や実用性を加味すると、現状 [LinkJapan eRemote](http://linkjapan.co.jp/product/eremote) 一択という状況。  
また、スマートホームスキルの制限から、以下のような制限がある。

* すべての機器を照明として登録する必要がある
* エアコンの温度を調整するなど、こまかい操作をするにはひとつひとつデバイスとして登録する必要がある

[Alexa｜Link Japan](http://linkjapan.co.jp/alexa) にも よくあるご質問 として以下のような記載がある。

> １、電源のON/OFFのみ対応でしょうか？
> 
> 現在、弊社eRemoteは家電の電源ON/OFFのみサポートしています（照明については、明るさ調整も対応）。  
> 
> Amazon社が提供する開発スキルには、標準スマートホームスキルとカスタムスキルがあります。  
> 
> 現時点、TVのチャンネル変更やエアコンの温度調整を行うためには、カスタムスキルを利用する必要がありますが、弊社では標準スマートホームスキルを採用致しました。
その理由は、音声によるコントロールのしやすさです。  
> 
> 標準スマートホームスキルの場合、「アレクサ、照明をつけて」と呼びかけるのに対し、カスタムスキルの場合、例えば、「アレクサ、イーリモートを使って、照明をつけて」というように、毎回、”イーリモートを使って”と呼びかけする必要があります。また、標準スマートホームスキルを使えば、グループ機能に対応でき、他社製品も含めて、一回でまとめて操作できます。  
> 
> 弊社ではお客様の使いやすさを第一に考え、標準スマートホームスキルを採用しました。今後チャンネル変更やエアコンの温度調整などにも対応していくと思われ、弊社も随時対応して参ります。  
> 
> eRemoteをご利用のお客様へはご不便をお掛け致しますが、何卒、ご理解の程、宜しくお願い申し上げます。

とはいえ逆に言えば、電源のON/OFFやよく使う操作に絞れば簡単に登録もできるし、直感的に使うことができる。

我が家ではこのようにエアコンやテレビ、照明を登録して使っているが、レスポンスも良く重宝している。ある程度バラツキはあるが、呼びかけてから2,3秒程度で実行される。

こんな感じで公式アプリから登録すると、（同じ名前が複数あるのは、アプリから使いやすいように照明としてではなく普通にエアコンやテレビとして登録もしているから）

<img width="375" alt="IMG_9408.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/12896/04636e42-c40a-d2ea-1597-98dfbed0ce23.png">

alexaアプリにも表示される。

<img width="375" alt="IMG_9409.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/12896/b3d929ac-d3f8-da39-90e1-954798974ba4.png">

そして地味に便利なのが、シーン/グループを活用して、複数の家電を一気に操作できる機能。例えば家に照明がたくさんある場合、まずはひとつずつ登録して、次に「電気」とひとまとめにしてグループ登録する。すると、「アレクサ、電気消して」だけで家中の照明を一気に消すことができる。

<img width="375" alt="IMG_9410.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/12896/e15885a9-9cfe-a7f5-5d01-f2f986efc05c.png">

<img width="375" alt="IMG_9411.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/12896/f1dfd49b-8858-a731-ff3f-75f17593ee0f.png">

ただ、使ってみてわかったこととして、名前の付け方を工夫する必要があるケースがあるので、それには注意が必要だ。  

例えば、「アレクサ、日テレをつけて」と言ってテレビのチャンネルを変えられると便利だと思ったのだが、肝心の「日テレ」というような固有名詞だとうまく認識されずうまくいかなかった。他にも4チャン、4チャンネルを試したがこちらもだめだった。（他にもいくつか…）

直感的な名前が付けられないと、それぞれ名前を覚える必要があり非常に面倒になるため、うまく名前をつけられるかどうかで実用度が変わってくるかもしれない。


## Google Assistant

### Nature Remo

赤外線リモコンに限ると、Googleと直接連携できる製品は日本ではauの [赤外線リモコン 01 | au HOME デバイス](https://www.au.com/auhome/device/ura01a/) くらいしかないんじゃないだろうか。しかしこの製品、もちろんauユーザーしか使えないので正直使い物にならない。

前述のIFTTTと連携するのが前提になるが、現状ノンプログラミングで使うには、 [Nature Remo](http://nature.global) が一番相性が良さそうで、売れ行きも好調なようだ。

しかし、価格が¥13,000と高価なのがネック…

### eRemote mini（RM mini 3）

価格を抑えたいエンジニアにオススメなのが、 [LinkJapan eRemote](http://linkjapan.co.jp/product/eremote) 。

公式にGoogle Home（Google Assistant）との連携機能は提供されていないが、すでにハックされ仕様が判明しているため、少しプログラミングすれば連携が可能だ。

詳しくは以下の記事を参考に、Node.jsが動かせるRaspberry Piや余っているMacを常駐するだけで簡単に家電を操作できる。

* [Google Homeとスマートでない家電を接続する - Qiita](https://qiita.com/akuroda/items/c0fecf532b614287fada)
* [Google Homeに話しかけてエアコンを操作してみる - Qiita](https://qiita.com/miso_develop/items/204b2e16b1e58e52dc07)

iOS端末を持っているなら、おすすめは以下の手順。

1. IFTTTからFirebaseのrealtime DBを更新できるように準備
2. 1つ目の記事にある [Homebridge Broadlink RM](https://github.com/lprhodes/homebridge-broadlink-rm) を使い、赤外線リモコンのコマンドをキャプチャ、rmlist.jsを用意
3. Raspberry PiやMacに [homebridge-broadlink-rm/helpers/getDevice.js](https://github.com/lprhodes/homebridge-broadlink-rm/blob/master/helpers/getDevice.js) と [broadlinkjs-rm](https://github.com/lprhodes/broadlinkjs-rm) を用意し、実行する

この時、上記の記事中のコードを少し改良して、ひとつの音声コマンドから複数の赤外線リモコンコマンドを実行するようにしてあげると、alexaのシーン/グループを再現できるのでおすすめ。

```js:index.js
...

//RM mini3 ir send
const rmSend = (commands) => {
    // 複数のコマンドを実行できるように改良
    commands.forEach(function(command) {
        const hexDataBuffer = new Buffer(rmlist[command], "hex")
        rm.sendData(hexDataBuffer)
    }
}

//database更新時
...

db.ref(path).on("value", function(changedSnapshot) {
  //値取得
  const value = changedSnapshot.child(key).val()
  if (value) {
    
    //コマンド生成
    const command = getJsonData(value.split(" ")[0], {

      ...

      // 全ての照明
      "light": () => {
        let index = 1
        if (value.split(" ")[index] == "の" || value.split(" ")[index] == "を") index++
        const commands = getJsonData(value.split(" ")[index], {
          // コマンドを配列で渡して複数の家電を操作
          "つけ": ["front_light_on", "back_light_on"],
          "消し": ["front_light_off", "back_light_off"],
          "default": false
        })
        return commands ? () => rmSend(commands) : commands
      },
      
      // 前方の照明
      "front_light": () => {
        let index = 1
        if (value.split(" ")[index] == "の" || value.split(" ")[index] == "を") index++
        const commands = getJsonData(value.split(" ")[index], {
          "つけ": ["front_light_on"],
          "消し": ["front_light_off"],
          "default": false
        })
        return commands ? () => rmSend(commands) : commands
      },

      ...

      //default
      "default": () => false,

    })()

    ...

  }
})
```

# まとめ

Amazonでお買い物できないと困る、Amazon Prime Musicで音楽が聴きたい、という理由がない限りは、正直現状の日本（日本語）環境ではGoogle Homeを買っておけばいいんじゃない？と個人的には思っている。

もちろんalexaのカスタムスキルをつくって遊んでみたい、という理由があればまた話は変わってくるが、スマートホームの項でも触れたように、カスタムスキルは使うのが結構めんどうくさい。

アメリカではみんな気にせず便利にいくつもスキルを使いこなしているんだろうか…

カスタムスキルに似たものとして、Google Home（Google Assistant）では [Actions on Google](https://developers.google.com/actions/) を使えばいろいろできる。
cf. [Actions on Googleでapi.aiを使ってGoogle Homeに何か言わせてみる - Qiita](https://qiita.com/syarihu/items/53ea1a65f481f8121109)

というわけで、Amazon Echoの招待メールが届かなくてつらい日々をまだ送っている人は、Google Homeも検討してみて欲しい。


# おまけ
## Amazon Echo買うプライム会員は気をつけて

~~いろんなところで騒がれているので、知っている人も多いかもしれないけれど、結構重要なので一応…~~

~~amazon.com と amazon.co.jp アカウントを統合しているプライム会員は要注意。現時点で以下のような問題があり、いまだ解決していない模様[^5]。~~

1. ~~amazon.co.jpアカウントでセットアップすると、Wi-Fi設定時にエラー1が表示されセットアップが完了できない😇~~
2. ~~amazon.comアカウントではセットアップできるが、プライム会員限定の機能（お買い物、プライムミュージック）が使えない😇~~

~~というわけで我が家のAmazon Echoではお買い物ができない🙄~~

**2017/12/22 追記**
現在は修正されている模様。Amazonからメールが来て、お詫びに500円クーポンもらいました✌️


## 「ねぇ、Google」や「アレクサ」を認識したら音を鳴らす

「ねぇ、Google」や「アレクサ」と呼びかければ反応してくれるわけだけど、どうしても時折うまく認識されずに反応してくれないことがある。

反応してくれない場合、同じことをもう1回言わないといけないので、内容によっては結構めんどうくさいし時間もかかる。

GoogleもAmazonも、アプリから設定することで呼びかけた時に音を鳴らすことができるので、煩わしいと感じないならば設定しておくことをおすすめ。

* [「OK Google」が認識されたときに音を鳴らす - Google Home ヘルプ](https://support.google.com/googlehome/answer/7410241?hl=ja)
* [Amazon.co.jp ヘルプ: AlexaおよびAlexa対応端末に関するFAQ](https://www.amazon.co.jp/gp/help/customer/display.html/?nodeId=201602230)


[^1]: 日本国内でも次期未定ではあるが、Spotifyに対応予定とのこと。ただし、現在対応している地域では有料会員のみ利用可能であり、同様の仕様になる可能性がある。 [https://twitter.com/AmazonHelp/status/932027961200599042](https://twitter.com/AmazonHelp/status/932027961200599042)
[^2]: [Google Home で Voice Match を設定する - Google Home ヘルプ](https://support.google.com/googlehome/answer/7323910?hl=ja)
[^3]: [声のなりすましは意外と簡単？--グーグルとアマゾンのスマートスピーカでテスト - CNET Japan](https://japan.cnet.com/article/35110923/)
[^4]: Google Assistantアプリからの場合は、Googleカレンダーにリマインダーが追加される
[^5]: Twitterで設定できるようになったと報告している人もいるが、自分のアカウントではいまだエラー1となる…