2019/06/28

Google Homeアプリを作ってみた

Google Homeには様々なテンプレート的なアクションが用意されており、細かいところに拘らなければ、ほぼコードを書かずにアプリを作成できる。コンテンツさえ用意できれば、リリースすることも可能だ。自分の作りたい物にマッチしたものがあれば…。

今回は、なかった場合として話を進めてみる。しかし、いきなり複雑なアプリを作ってみても、Google Homeアプリ開発の本質でない部分(アプリのビジネスロジック部分)が増えてしまい何の解説なのかわかりにくくなってしまう。それは避けたい。

そこで、「家にいる状況で、これから電車で出かけるとき、Google Homeに尋ねると、間に合う電車の時間を教えてくれる。」を作ってみたい。最寄り駅は、複数路線が乗り入れておらず、上りと下りしかないとする。かなり限定された状況だが、アプリを単純にするため、でも、テンプレートで実装するには無理があるという状況を無理矢理作っているということでご容赦願いたい。以下に利用例を示す。
ユーザ: 「Ok Google, 間に合う電車教えて」
Google Home : 「はい、間に合う電車ですね。上りは○○時○○分、下りは○○時○○分です。」

このようなアプリを作ってみたい。列車の来る間隔が十数分おきで、ランダムなダイヤ編成の路線沿線のちょっとした郊外の住宅での利用を想定している。山手線のように数分に一本くるような状況(なぜなら、駅に行けばすぐに列車が来るから)や、1時間に一本程度しかこない状況(なぜなら、ダイヤ覚えられるから)での利用は想定してない。繰り返しになるがかなり限定された状況であることは、お許しを。

1. Actions on Googleにログインし、プロジェクトを作成する。
2. 様々なテンプレートが用意されているが、ここでは一番下の”Conversational”を選択する。
3. “Build your Actionを開き”Add Action(s)”を実行する。
4. “ADD YOUR FIRST ACTION”を実行する。
5. “Custom intent”を選び”BUILD”を実行する。⇒Dialogflowが作成される。
6. 言語やタイムゾーンを適当に選び作成を実行する。
7. Intentsを選び、”Responses”の”Set this intent as end of conversation”をONにする。
8. さらに”Fulfillment”の”Enable webhook call for this intent”をONにする。
9. “SAVE”を実行する。
10. サイドメニューの”Fulfillment”を選び、”Inline Editor”を有効にする。
11. 17行目、welcomeという関数内、agent.add(“”)に発話させたい文字列(このアプリでは次の列車の発車時刻)を入力する。
12. “DEPLOY”を実行(結構時間がかかる)する。

これで完了である。次の列車の発車時刻を取得するロジックについては、ここでは割愛した。ステップ11で、addの引数に渡す文字列を作るロジックはアプリそれぞれの実装であり、今回は現在時刻で間に合いそうな列車の時刻を埋め込んだ。「のぼり 快速 16時42分」の様な文字列を渡すようにした。現在時刻と列車の時刻表を比較し最適な列車をしゃべらせればよい。そのロジックは作りたいアプリそれぞれに依存する部分なので割愛した。Google Homeがあれば「Ok Google、テスト用アプリにつないで」と言えば、上記ステップ11で入力した文字列を発話してくれるはずである。百聞は一見に如かず。出来上がったアプリの動作(ただし、リリース前アプリ:音声あり)は以下の動画で確認できる。興味のある方はご覧ください。

12ものステップがあるが、数分でおつりがくる程度の作業である。後は適切な文字列を返すロジックをFulfillmentに組み込むだけだ。
呼びかけに使った「テスト用アプリについないで」も、返答の「テストアプリです。」もリリース審査が通れば、ちゃんとした気の利いたメッセージになるはずだ。