オンプレ系インフラエンジニアがAzureを勉強する

いつか誰かの何かの役に立つと嬉しいな

GoogleHomeとAzureを使っておうちの小物の住所を決めよう!

テーマ

GoogleHomeに話しかけると、おうちの無くしがちな小物の片づけ場所(定位置)を教えてくれるものを作ります。

例)

人「メガネはどこにある?」

GoogleHome「メガネの置き場所は洗面所の棚の上です」

 

目的

今回はTableStorageの読み込み機能を使うことがメイン目的です。
ついでにGoogleHomeとAzureFunctionsを組み合わせます。

 

全体の流れ

  • TableStorageの設定
  • AzureFunctionsの作成
  • DialogflowとGoogleHomeの設定

 

TableStorageの設定

ストレージアカウントの作成

Azureポータルにログインします。
ストレージアカウントを作成します。
この辺は検索するといろんなわかりやすい記事が出てくるので詳細は割愛します。

ゼロからはじめるAzure(2) ストレージの種類と概要 | マイナビニュース

 

f:id:mitsunooon:20190609161808j:plain

 

Table作成

ストレージアカウントができたら、テーブルを作成します。
ひとまず名前だけ設定します。

 

f:id:mitsunooon:20190609161746j:plain

 

Microsoft Azure Storage Explorerの初期設定

上記で作成したテーブルを管理するためにMicrosoft Azure Storage Explorerをインストールします。

Azure Storage Explorer – クラウド ストレージ管理 | Microsoft Azure

 

インストールしたら起動させ、Azureのアカウントと紐づけます。
左サイドバーの人型をクリックします。

[Add an account...]をクリックします。

f:id:mitsunooon:20190609162019j:plain

 

[Add an Azure Account]を選択し、[Sign in...]をクリックします。

f:id:mitsunooon:20190609162112j:plain

 

上記でAzureポータルにログインしてたアカウントでログインします。

f:id:mitsunooon:20190609162148j:plain

 

追加されたアカウントが表示されます。

f:id:mitsunooon:20190609162213j:plain

 

Tableにデータを入れる

左サイドバーのToggleExplorerのアイコンをクリックすると、さっき作ったストレージアカウントと空っぽのテーブルが表示されます。
ここに.csvファイルをインポートして中身を入れます。
[Import]をクリックします。

f:id:mitsunooon:20190609162528j:plain

 

 事前に作っておいた.csvファイルを選択します。

対象の小物と置き場所をここで決めます。

 

f:id:mitsunooon:20190609162612j:plain

 

 インポートする項目が確認されます。
[Insert]をクリックします。

f:id:mitsunooon:20190609162640j:plain

 

 データが入ります。

TableStorageの設定はこれでOKです。

f:id:mitsunooon:20190609162702j:plain

 

 ちょっと補足

.csvファイルの用意について。
.csvファイルがどんなものかいまいちわからなかったので
最初はMicrosoft Azure Storage Explorerから直接テーブルに適当な値を入れて、
Exportして.csvファイルを手に入れました。
それをちょっと改変してImportさせました。
PartitionKeyとRowKeyが必須項目ですが、項目さえあればよくて空欄でもインポート自体はできます。
Excelファイルからデータをインポート、エクスポートができるのはかなり助かります。

 

AzureFunctionsの準備

今回の動作の本体になるAzureFunctionsの設定をします。

コード自体はGitHubを参照ください。
TableStorageの読み込みが、Microsoftの公式ドキュメントを参照してもなかなかうまくいかず苦戦しました。
(書き込みはドキュメント通りにすぐできました。

GitHub - kgnk-hkr/AddressManagement: TableStorage読み取りのためのFunctions

 

DialogflowとGoogleHomeの設定

GoogleHomeとやり取りをするキーワードの設定をします。
この辺りは過去記事と重複するので詳細は省きます。

Google HomeとAzure Functionsを連携させる - オンプレ系インフラエンジニアがAzureを勉強する

 

Entitiesは[items],[where]の二種類。f:id:mitsunooon:20190609163400j:plain

 

f:id:mitsunooon:20190609163417j:plain

 

Intentsは問いかけのテンプレートを登録します。

f:id:mitsunooon:20190609163515j:plain

 

f:id:mitsunooon:20190609163527j:plain

 

 

今回は追加で終了の文言を追加してみたのでそこだけ追記します。
[finish]というIntentsを作ります。

終わりにするときの言葉を登録します。
今回は「ありがとう」です。

f:id:mitsunooon:20190609164027j:plain


 [Responses]に終了の時にGoogleHomeが言う言葉を設定します。
今回は「どういたしまして」です。
[Fulfillment]は何も設定しません。
f:id:mitsunooon:20190609164049j:plain

 

あとはAzureFunctionsのURLを登録して完成です!

 

デモ

 シミュレーターで実行してみるとこんな感じです。やったー。

これで何をどこにしまうか決められますね!

決めた場所に片づけられればあわあわと探すこともなくなるはず…

 

f:id:mitsunooon:20190609164212j:plain

 

 

f:id:mitsunooon:20190609164528j:plain

 

改善点

  • 今は読み込みしかできないので、書き込みもできるようにして置き場所を変えたときに情報を音声でアップデートできるようにしたいです。
  • 逆引きができるようにしたいです。
  • コードがごりごりの力業のようになっているのでもう少しスマートにしたいです。

 

参考サイト様

Azure Functions における Azure Table Storage のバインド | Microsoft Docs

Google HomeにRSSを読み上げさせよう:完成編 (1/3):特集:Google Homeプログラミングを始めよう - @IT