Google Home Developer Center へようこそ。スマートホーム アクションの開発方法を学習できます。注: アクションの構築は、引き続き Actions Console で行います。

ローカル フルフィルメント

Local Home SDK は、スマートホーム インテントをルーティングするためのローカル フルフィルメント パスを追加し、スマートホームと Google アシスタントの統合を強化するためのものです。

Local Home SDK を使用すると、スマートホーム ビジネス ロジックを含むローカル フルフィルメント アプリを TypeScript または JavaScript で作成できます。作成したアプリは、Google Home デバイスまたは Google Nest デバイスに読み込んで実行します。アプリは、ローカルエリア ネットワーク(LAN)上の Wi-Fi 経由で既存のスマート デバイスと直接通信して、既存のプロトコル経由でユーザー コマンドを実行します。

この SDK の統合により、レイテンシの短縮や信頼性の向上など、スマートホーム アクションのパフォーマンスが向上します。ローカル フルフィルメントは、二次的なユーザー確認を使用するものを除き、すべてのデバイスタイプとデバイス トレイトに対応しています。

始める サンプルを試す

仕組みを理解する

ローカルホーム プラットフォームは、クラウド フルフィルメントから SYNC レスポンスを取得すると、mDNS、UDP ブロードキャスト、または UPnP を使用してユーザーのローカルエリア ネットワークをスキャンし、アシスタントに接続されたスマート デバイスを検出します。

プラットフォームは IDENTIFY インテントを送信し、IDENTIFY レスポンス内のデバイス ID を以前の SYNC レスポンスによって返されたものと比較して、検出されたデバイスがローカルで制御可能かどうかを判断します。検出されたデバイスがハブまたはブリッジの場合、プラットフォームは REACHABLE_DEVICES インテントを送信して、そのハブをローカルに通信するためのプロキシ デバイスとして扱います。

受信したレスポンスでローカル デバイスを確認すると、プラットフォームは、ユーザーの Google Home デバイスまたは Google Nest デバイスへのローカル フルフィルメント パスを確立してから、ローカル フルフィルメント用のユーザー コマンドをルーティングします。

ユーザーがローカル フルフィルメント パスを含むスマートホーム アクションをトリガーすると、アシスタントは EXECUTE インテントまたは QUERY インテントを、クラウド フルフィルメントではなく Google Home デバイスまたは Google Nest デバイスに送信します。デバイスはローカル フルフィルメント アプリを実行してインテントを処理します。

この図は、ローカル フルフィルメントの実行フローを示しています。実行パスが Google アシスタントを搭載したスマートフォンからユーザーのインテントを取得して、ユーザー インテントが Google Cloud によって処理され、それが Google Home デバイスでローカルで実行されて、コマンドがデバイスハブにまたは直接デバイスに発行されます。デベロッパー クラウドは代替クラウドとして使用できます。
図 1: スマートホーム アクションのローカル フルフィルメント パスを追加する

ローカルホーム プラットフォームは、どの Google Home デバイスまたは Google Nest デバイスを選択してコマンドをトリガーするかにおいては非決定的です。EXECUTE インテントと QUERY インテントは、ターゲット デバイスと同じホームグラフ ストラクチャで定義された任意の Google Home デバイスまたは Google Nest デバイスから取得できます。

ローカル フルフィルメント アプリ

ローカル フルフィルメント アプリには、ローカルホーム プラットフォームから送信されたインテントを処理し、ローカルエリア ネットワーク経由でスマート デバイスにアクセスするためのビジネス ロジックが組み込まれています。ローカル フルフィルメントを統合するためにハードウェアを修正する必要はありません。アプリは、HTTP、TCP、UDP などのアプリケーション レイヤ プロトコルを介してスマート デバイスに制御コマンドを送信することによって、スマートホーム アクション リクエストを実行します。ローカル フルフィルメント パスで障害が発生した場合は、クラウド フルフィルメントが代替実行パスとして使用されます。

アプリの構築をサポートするために、Local Home SDK には次の 2 つの主要なクラスが用意されています。

  • DeviceManager: TCP、UDP ソケット、または HTTP リクエストを使用してスマート デバイスと通信するためのメソッドを提供します。
  • App: ローカルで制御可能なデバイス(IDENTIFYREACHABLE_DEVICES)の検出後に Google から送信されたインテントにハンドラをアタッチするメソッドを提供します。このクラスは、ユーザー コマンド(EXECUTE)も実行し、現在のデバイス状態(QUERY)に関するユーザークエリに応答します。

開発中は、独自のホスティング サーバーまたはローカル開発マシンにアプリを読み込むことによって、アプリのビルドとテストを行うことができます。本番環境では、Google がユーザーの Google Home デバイスまたは Google Nest デバイス上の安全な JavaScript サンドボックス環境でアプリをホストします。

現在、Report State API はローカル フルフィルメントに対応していません。Google は、クラウド フルフィルメントを利用してこれらのリクエストを処理します。

アプリケーションのライフサイクル

ローカル フルフィルメント アプリは、プロジェクト スキャン構成に一致する新しいローカル デバイスが検出されたとき、または以前特定したデバイスに関連する送信待ちのインテントがある場合に、オンデマンドで読み込まれます。

Google Home デバイスや Google Nest デバイスはメモリ容量が限られているため、ローカル フルフィルメント アプリはシステムのメモリ使用量に応じていつでも強制終了される可能性があります。これは、アプリがメモリを過剰に消費した場合や、システムが別のアプリのために領域を確保する必要がある場合に発生することがあります。ローカルホーム プラットフォームは、配信するための新しいインテントがあり、アプリを実行するのに十分なメモリリソースがある場合にのみ、アプリを再起動します。

ユーザーがホーム アカウントのリンクを解除した場合や、ユーザーの agentUserId に関連付けられたローカル フルフィルメントをサポートするデバイスがなくなった場合は、アイドル タイムアウト後にアプリがアンロードされます。

サポートされているデバイス

ローカルホーム プラットフォームは、サポートされている Google Home デバイスまたは Google Nest デバイスでローカル フルフィルメント アプリを実行します。次の表に、サポートされているデバイスと各デバイスで使用されるランタイムを示します。ランタイム要件の詳細については、実行環境をご覧ください。

デバイス タイプ 環境
Google Home スピーカー Chrome
Google Home Mini スピーカー Chrome
Google Home Max スピーカー Chrome
Nest Mini スピーカー Chrome
Nest Hub ディスプレイ Chrome
Google Nest Hub Max ディスプレイ Chrome
Nest Wifi ルーター Node.js
拡張ポイント Chrome

実行環境

ローカル フルフィルメント アプリの実行環境はデバイスによって異なります。ローカルホーム プラットフォームは、次のランタイム環境をサポートしています。

  • Chrome: ローカル フルフィルメント アプリは、Chrome M80 以降が実行されている Chrome ブラウザ window 内で、ECMAScript バージョン ES2018 のサポートに従って実行されます。
  • Node.js: ローカル フルフィルメント アプリは、Node v10.x LTS 以降が動作する Node.js プロセス内のスクリプトとして実行されます。ECMAScript バージョン ES2018 がサポートされている必要があります。

ソースコードの構造

Local Home SDK が提供するバンドラ構成を使用して依存関係を 1 つの JavaScript ファイルにバンドルし、ソースコードを IIFE(即時実行関数式)としてパッケージ化することをおすすめします。

実装パス

Local Home SDK をスマートホーム統合に使用するには、次のタスクが必要となります。

1 スキャン構成を設定する アシスタントがローカルで制御可能なデバイスを検出するために必要なパラメータで Actions Console を設定します。
2 クラウド フルフィルメントで SYNC レスポンスを更新する クラウド フルフィルメントで、プラットフォームがローカル フルフィルメント パスの確立に使用する otherDeviceIds フィールドをサポートするよう SYNC リクエスト ハンドラを変更します。そのフィールドで、ローカルで制御可能なデバイスの ID を指定します。
3 ローカル フルフィルメント アプリを実装する Local Home SDK を使用して、IDENTIFY インテント、 EXECUTE インテント、 QUERY インテントを処理するための JavaScript アプリを作成します。ハブまたはブリッジ プロキシ デバイスの場合は、REACHABLE_DEVICES インテントも処理する必要があります。
4 アプリをテストしてデバッグする Google Home テストスイートを使用して、統合(または自己認定)をテストします。

始める前に