2019-08-24に更新

google-home-voicetextのdockerfileを改良する

google-home-voicetextって?

google homeを自発的に話すようにできるgoogle-home-notifierの改良版。

作者の方がdockerfileも用意してくださっているのですが、
docker-composeで立ち上げた後、コンテナにログインして環境構築をする必要があり、しょっちゅうコンテナを作り直す私にとっては使い辛かったので何とか作業を簡略/最適化できないかと思ったのが今回の趣旨です。

自発的にしゃべらせる

alexa vs google home

alexaはリマインダーAPIにプログラムを組んで登録するのが楽なのですが、

  • alexaに話しかける
  • 画面からOAuth認証を行う

などのユーザーアクションを起こさないと、APIアクセスに必要なトークンが払い出されないことがわかり、今回は実装を断念。

その点、google homeはchromecastに用いられているライブラリを使って音声のキャストなどを行うことができるため、比較的実装が容易ということがわかりました。

ただ、機能によってはalexaの方が優れている面もあり、一長一短というところです。

dockerfileの修正

FROM node:10.16

RUN npm update -y -g npm
RUN apt-get update
RUN apt-get install -y vim avahi-daemon libavahi-compat-libdnssd-dev locales
RUN locale-gen ja_JP.UTF-8
RUN echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc

#RUN mkdir /myapps
#RUN cd myapps
#WORKDIR /myapps
RUN git clone https://github.com/sikkimtemi/google-home-voicetext.git
#RUN cd google-home-voicetext/
WORKDIR google-home-voicetext
RUN npm install
#RUN npm install forever -g
RUN patch -uR node_modules/mdns/lib/browser.js < mdns_patch/browser.js.patch
#RUN service dbus start
#RUN service avahi-daemon start
#VOLUME [ "/myapps" ]

#CMD node file-server.js & node api-server.js

あえてコメントアウトしたところも残していますが、READMEと比べながら照合していただけるとよいと思います。

  • コンテナの中でgit cloneします。
  • cloneしたフォルダに移動してnpmインストール
  • npm インストール後にcloneしたソースに含まれるパッチをあてます。
  • 環境変数の設定はcompose側で行います。
  • mdns関連のサービスの起動もcompose側のコマンドで設定します。

docker-compose.ymlの記述

node-google-home:
    build: './speaker'
    #container_name: 'node'
    command: >
      sh -c "service dbus start &&
      service avahi-daemon start &&
      node file-server.js & 
      node api-server.js "
    working_dir: '/google-home-voicetext'
    volumes:
      - ./myapps:/myapps
    ports:
      - '8080:8080'
      - '8888:8888'
    environment:
      - TZ=Japan
      - VOICETEXT_API_KEY=*****
      - WIRELESS_IP=192.168.***.***
      - GOOGLE_HOME_IP=192.168.***.***
      - WIRELESS_MODULE_NAME=en0
      - VOICETEXT_SPEAKER=HARUKA
    tty: true
    restart: always

compose側では、mdns関連のサービスの起動とサーバプロセスの起動を行っています。
foreverをインストールして、プロセスの維持をしようと思ったのですが、何回かmdnsサービスが立ち上がらない時があり、その場合はプロセスの再起動というよりはコンテナを破棄して再度コンテナを立上げるのが良いと判断しました。

おわりに

今回の改良ではdockerfileへの理解が十分でないというのもあり、
(使っていないのですが)ボリュームのマウントがうまくいっていないという問題点も...。


ckoshien

個人開発4年目。普段はアプリケーションエンジニア。 ReactJS/NodeJS/ReactNative/Java

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント