GoogleHomeの機能拡張準備~クライアント編~(第3回)

こんにちは。ミーヤキャットです。

前回からGoogleHomeの機能を拡張する方法について解説していますが、
今回はGoogleHomeの機能を拡張するために必要な準備を解説します。
まずはクライアント編です。

  1. GoogleHomeの初期設定と使い方(第1回)
  2. Action on Google&DialogFlowで機能拡張(第2回)
  3. 機能拡張準備~クライアント編~(第3回)
  4. 機能拡張準備~サーバ編~(第4回)
  5. 窓口業務アシスタント作成(第5回)
  6. GoogleHome×ラズベリーパイ~カメラとの連動~(第6回)


まず、構築しようとしている全体をおさらいしましょう。

つまり、独自アプリを実行するサーバの準備と、独自アプリ(プログラム)を開発する環境を作成する必要があります。
今回はクライアント側、つまり独自アプリを開発する環境を整えていきます。

使用するプログラム言語の選定

図にある通りAIスピーカーとのやり取りはJSON形式で行う必要があります。
そこでJSON形式のデータを扱うのが容易なプログラム言語として、Pythonを使うことにします。
またPythonは機械学習やディープラーニング分野で使われている言語で、AIスピーカーのアプリケーションを作るうえで相性がよさそうなのも選定のポイントです。

Pythonを開発する環境準備

ここからはクライアントの環境準備をしていきます。
クライアントのOSはWindow10(64bit)を前提に解説していきますが、他のOSでも問題は出ないと思います。
まずはPythonのインストールです。

① サイトからダウンロード

公式サイトからダウンロードします
Pythonダウンロードページへ

いくつかバージョンが選べますが、レンタルサーバで利用できる(インストールされている)バージョンに合わせましょう。あまり新しすぎるとサーバで利用できるPythonのバージョンと異なることで思ったように動作しないことがあります。

今回はレンタルサーバで利用できるバージョンに合わせて2.7.14を使います。

実はレンタルサーバがPython3に対応していたので使ってみようと思ったのですが、サンプルを元に作成したプログラムを、サーバにアップロードして動作させたときにうまくいきませんでした。
調べてみたところPython2と3は動作の違いが大きく、互換性を意識したコーディングをしないと動かないことがあるようです。今回はPythonの勉強がメインではないのでサンプルソースが十分に見つかったPython2を使用することにします。

② 環境変数の設定

インストーラの中で「Add python.exe to Path」(Python.exeをPathに追加する)を選択すれば環境変数の設定ができます。
しかし、私のように選択するのを忘れた場合は以下の手順でPathを通すことができます。
Windows10の場合、コントロールパネルを開き、システムとセキュリティ⇒システムを選択し、システムの詳細設定の詳細設定タブから環境変数ボタンを押下すると設定画面が開きます。
システム環境変数の一覧に出力されているPathを選択した上で編集ボタンを押下するとPathの追加画面になりますので、Python.exeがあるフォルダパスを追加しましょう。

③ 動作確認

コマンドプロンプトで「python -V」を入力して、「Python 2.7.14」のようにバージョンが表示されればOKです。

プログラムソースのエディタ

Pythonプログラムは文字コード「UTF-8」BOM(バイトオーダーマーク)無しで記載するとバージョンによらず安定して動作するので、対応したエディタをクライアントに導入しましょう。
Windowの標準アプリ「メモ帳」だとこのような変換ができません。

無償だと「サクラエディタ」がお勧めです。
〇サクラエディタダウンロードページへ〇

もう一つのお勧めは「秀丸エディタ」です。
シェアウェアですが試用期間もあり多機能です。
〇秀丸エディタダウンロードページへ〇

作成したプログラムをサーバにアプロードする

作ったプログラムをサーバで動作させるためには、サーバにファイルをアプロードするためのツールが必要になります。
今回はFFFTPを使いますが、好みで選んで問題なしです。

〇FFFTPダウンロードページへ〇
〇WINSCPダウンロードページへ〇

Pythonで「Hello World」を表示してみる

エディタを使ってJSON形式の「Hello World」を表示するプログラムを作って実行してみましょう。
せっかくなのでDialogFlowとやり取りをおこなうJSON形式のフォーマットで表示します。
APIのバージョンは執筆時点で最新のV2を使用しますので、以下のページでやり取りを行うフォーマットが確認できます。
API-V2のWebhookRequestフォーマットページへ

API-V2のWebhookResponseフォーマットページへ

独自サーバへの呼出を行うフォーマットが「WebhookRequest」で、独自サーバからの返答を受けるフォーマットが「WebhookResponse」ですので、GoogleHomeに「Hello World」と話させるためにはこの「WebhookResponse」フォーマットを作成する必要があります。
話す内容を指定するのは、このフォーマットの部分

{
    "fulfillmentText": string,
    "fulfillmentMessages": [
        {
            object(Message)
        }
    ]
}

作成したPythonソース

# -*- coding: utf-8 -*-
import json
import sys

print('Content-type: application/json\n\n')

resJson ={
    "fulfillmentText": "Hello World",
    "fulfillmentMessages": [
        {
            "text": {
                "text": [
                    "Hello World"
                ]
            }
        }
    ]
}
json.dump(resJson,sys.stdout)

こんな風に出力されれば成功

Content-type: application/json

{"fulfillmentText": "Hello World", "fulfillmentMessages": [{"text": {"text": ["Hello World"]}}]}

サンプルが無事に動作すれば、クライアントの準備は完了です。
次回はサーバの環境構築をしていきましょう。

=======================
記事についてはリンクフリーですが、著作権は放棄していません。
また、この記事は個人の見解を示したものであり、書かれている情報を元に生じた損害についての保証は行いません。
書かれている内容が事実と異なる場合や、人権、知的財産権を侵害している場合は、問合せフォームよりご連絡ください。訂正、削除を行います。
=======================

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です