【Docker】Google HomeやNestを自在に喋らせる方法

公開:2020/10/11
更新:2020/10/26
5 min読了の目安(約4800字TECH技術記事

はじめに

以前、「Google Homeを手軽に喋らせる仕組み(google-home-voicetext)を作った(Dockerにも対応)」という記事を書きました。最近、そのリポジトリにPull requestをいただきまして[1]、環境構築がとても楽になりました。Readme.mdは修正しましたが、もう少し詳しい説明を書こうと思い、この記事を作成しました。

何ができるの?

Googleが販売しているスマートスピーカー(第1世代はGoogle Home、第2世代はNest)を、任意のプログラムから自在に喋らせることができるようになります。環境構築に必要な時間は30分くらいです。

事前準備

必要なハードウェア

  • Google HomeシリーズもしくはNestシリーズ
  • Dockerが動く環境(PC、Mac、Raspberry Piなど)

必要なアカウント

  • Googleアカウント
  • VoiceText Web API用のメールアドレス

環境構築手順

VoiceText Web APIの利用登録

google-home-voicetextはVoiceText Web APIを用いて音声を合成するため、APIキーを用意する必要があります。以下のURLから無料利用登録を行ってAPIキーを取得してください。

https://cloud.voicetext.jp/webapi

Firebaseでプロジェクトを作成

以下のURLにアクセスしてFirebaseのコンソールを開いてください。

https://firebase.google.com/

コンソールを開いたらプロジェクトを作成してください。

プロジェクト名は何でも構いません。

Googleアナリティクスは今回は不要なので無効にします。有効にしても問題ありません。

Firebaseの秘密鍵を生成

設定(歯車アイコン)→「プロジェクトを設定」をクリックします。

「サービスアカウント」をクリックします。表示されたdatabaseURLの値を控えておいてください。

更に「新しい秘密鍵の生成」をクリックします。

「キーを生成」をクリックします。

しばらくするとJSONファイルがダウンロードされるので、ファイル名をfirebase.jsonにリネームしてください。

Cloud Firestoreの設定

「開発」→「Cloud Firestore」をクリックし、「データベースの生成」をクリックします。

「本番環境モードで開始する」を選択したまま「次へ」をクリックします。

Cloud Firestoreのロケーションはどこでも構いません。ここでは東京(asia-northeast1)を選びました。

「コレクションを開始」をクリックします。

「コレクションID」にgooglehomeと入力し、「次へ」をクリックします。

「ドキュメントID」にchant、「フィールド」にmessageと入力し、「保存」をクリックします。

google-home-voicetext-dockerの設定

適当な作業ディレクトリを用意し、リポジトリをクローンします。

git clone https://github.com/sikkimtemi/google-home-voicetext-docker.git

.my.env.sampleをコピーして.my.envを作成します。

cd google-home-voicetext-docker
cp .my.env.sample .my.env

適当なエディタを用いて.my.envを編集します。下記の表を参考にしてください。

変数名 説明
TZ タイムゾーンを設定します。日本の場合はAsia/Tokyoです。
VOICETEXT_API_KEY VoiceTextのAPIキーを設定します。
WIRELESS_IP Dockerを動かすホストのIPアドレスを設定します。有線やWiFiなど複数のIPアドレスが存在する場合は、Google HomeからアクセスできるIPを記述してください。
GOOGLE_HOME_IP Google HomeやNestのIPアドレス[2]を設定します。
FIREBASE_DATABASE_URL 上記で控えておいたdatabaseURLの値を設定します。
FIREBASE_SECRET_KEY_PATH この値は/google-home-voicetext/firebase.jsonから変更しないでください。
VOICETEXT_SPEAKER 声のタイプを設定します。HIKARIを設定するとGoogle Homeの声に近くなります。詳しくはAPIマニュアルの話者一覧を参照してください。

firebase.jsonの配置

上述の「Firebaseの秘密鍵を生成」でダウンロードしてリネームしておいたfirebase.jsonをgoogle-home-voicetext-docker配下に配置します。

google-home-voicetext-dockerの起動

以下の準備ができていることを確認します。

  • .my.envが存在し、各項目が正しく設定されていること
  • firebase.jsonが存在すること
  • Google HomeもしくはNestが同一ネットワークに接続されていること

準備ができていたらDockerコンテナを起動します。

docker-compose up -d

初回はコンテナのビルドが行われるため、やや時間がかかります。

docker-compose logsを実行するとコンテナの中で行われていることが確認できます。正常に起動できた場合は下記のように表示されます。

動作確認

Cloud Firestoreで準備したgooglehome > chant > messageに適当な日本語を入力して、「更新」をクリックします。

Google HomeもしくはNestが喋ったら成功です。

同一ネットワーク内なら下記のようにREST APIで呼び出すことも可能です。

curl -X POST -d "text=テストです" http://{DockerのIPアドレス}:8080/google-home-voicetext

応用例

この環境があれば、任意のプログラムからGoogle HomeやNestを自在に喋らせる事ができるようになります。我が家ではGoogleカレンダーと連携してスケジュールを自動で読み上げさせたり、会社に無事ついたことを自動で家族に知らせたりするのに使っています。

Google HomeやNestは、基本的にこちらから話しかけないと何もしてくれないので、飽きてしまいがちです。もし使われなくなって眠っているGoogle HomeやNestがあったら、勝手にしゃべるように改造して遊んでみてはいかがでしょうか。

脚注
  1. kaoru inoueさん、ありがとうございました。 ↩︎

  2. Google HomeやNestのIPアドレスはスマートフォンのGoogle Homeアプリを開き、ローカルデバイスの設定アイコン(歯車のアイコン)をタップすると確認することができます。 ↩︎