ludwig125のブログ

頑張りすぎずに頑張る父

【GoogleHomeでメモ帳アプリを作る】7. 使い勝手を良くする

概要

いままで作ったアプリの使い勝手を良くする

資料全体の構成はここに記載: GoogleHomeに話しかけてメモを記録したりメモを読み上げてもらう

やること

やることは以下

  1. Herokuをスリープさせないようにする
  2. アプリの名前を変える
  3. ショートカットを作って呼び出しを簡単にする
  4. Herokuのアプリの名前を変更する

1. Herokuをスリープさせないようにする

現時点の課題:herokuがスリープしてしまってタイムアウトする

GoogleHomeからactions on googleのfullfilmentから実行するためには、5秒以内に返さなくてはいけないらしい

参考公式 - https://developers.google.com/actions/sdk/deploy-fulfillment

Note: Your fulfillment must respond within 5 seconds or the Assistant ends your conversation due to a timeout.

https://dialogflow.com/docs/fulfillment#limits

Timeout for service response – 5 seconds.

  • herokuは無料版だと30分以上操作がないときはスリープしてしまう
  • スリープを解除して応答するには時間がかかり、5秒のタイムアウトを超えてしまうことがしばしばある
  • これでは使い物にならないので、herokuをスリープさせないようにする必要がある

参考 herokuの無料枠で使える時間 - https://devcenter.heroku.com/articles/free-dyno-hours#usage

Accounts are given a base of 550 hours each month in which your Free dynos can run. In addition to these base hours, accounts which verify with a credit cardwill receive an additional 450 hours to the monthly Free dyno quota.

http://awesome-linus.tk/2017/12/14/heroku-pricing/

クレジットカード認証なしだと、月に550時間、クレジットカード認証ありだと月に1000時間(550+450)使える

スケジューラを設定して定期的に叩く

公式

以下を参考に設定

こんなのもあった

[~/git/ludwig125-heroku/googlehome] $heroku addons:create scheduler:standard         (git)-[master]
 ▸    heroku-cli: update available from 6.14.43-73d5876 to 6.15.26-5726b6f
Creating scheduler:standard on ⬢ aqueous-peak-42683... free
This add-on consumes dyno hours, which could impact your monthly bill. To learn more:
http://devcenter.heroku.com/addons_with_dyno_hour_usage

To manage scheduled jobs run:
heroku addons:open scheduler

Created scheduler-horizontal-89891
Use heroku addons:docs scheduler to view documentation
[~/git/ludwig125-heroku/googlehome] $   

UIで以下のコマンドを10分おきに実行するようにする

if [ $(date --date "9hours" +%H) -ge 06 -o $(date --date "9hours" +%H) -le 02 ]; then curl https://aqueous-peak-42683.herokuapp.com ; fi
コマンドの説明
  • curlでアプリのURLを指定して実行する
  • 流石に午前2時から6時の間は使うことも無いはずなので、それ以外の時間に叩くようにしたい
  • herokuの時間はGMT標準時なので、日本時間より9時間前
  • そこで、「if [ $(date --date "9hours" +%H) -ge 06 -o $(date --date "9hours" +%H) -le 02 ]」とする
指定の時刻に実行できているか確認

heroku logs の結果を見る

2018-03-01T14:54:57.067107+00:00 app[scheduler.6122]: </body>
2018-03-01T14:54:57.067108+00:00 app[scheduler.6122]: </html>
2018-03-01T15:05:47.980054+00:00 app[api]: Starting process with command `if [ $(date --date "9hours" +%H) -ge 06 -o $(date --date "9hours" +%H) -le 02 ]; then curl https://aqueous-peak-42683.herokuapp.com ; fi` by user scheduler@addons.heroku.com
2018-03-01T15:05:54.034812+00:00 heroku[scheduler.5767]: Starting process with command `if [ $(date --date "9hours" +%H) -ge 06 -o $(date --date "9hours" +%H) -le 02 ]; then curl https://aqueous-peak-42683.herokuapp.com ; fi`
2018-03-01T15:05:54.827763+00:00 heroku[scheduler.5767]: State changed from starting to up
2018-03-01T15:05:56.537126+00:00 heroku[router]: at=info method=GET path="/" host=aqueous-peak-42683.herokuapp.com request_id=86071458-7414-42f7-b246-e056260137f6 fwd="174.129.137.75" dyno=web.1 connect=1ms service=7ms status=404 bytes=2344 protocol=https
2018-03-01T15:05:56.536624+00:00 app[web.1]: Not Found: /
2018-03-01T15:05:56.537059+00:00 app[web.1]: 10.151.49.221 - - [02/Mar/2018:00:05:56 +0900] "GET / HTTP/1.1" 404 2161 "-" "curl/7.47.0"
2018-03-01T15:05:56.265126+00:00 app[scheduler.5767]:                                  Dload  Upload   Total   Spent    Left  Speed
2018-03-01T15:05:56.265039+00:00 app[scheduler.5767]:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
2018-03-01T15:05:56.699372+00:00 heroku[scheduler.5767]: State changed from up to complete
(略)

エラーは出しているものの、叩けているのでこれでOK

アプリが起動しているかスリープしているかはアプリのアイコンを見ればわかる - https://blog.heroku.com/app_sleeping_on_heroku

2. アプリの名前を変える

actions on googleから変更する アプリとして登録するために、アプリ用のアイコンの画像が必要だったりするので結構めんどい そして、アプリ用の画像の判定が厳しすぎて辛い・・・

アプリの名前は簡単に「メモ帳」とした

これで、以下の言い方でつながる様になった

呼び出し方1

「メモ帳につないで」

「はい、メモ帳のテストバージョンです。こんにちは」

「メモを読んで」

直近のメモが読まれる

呼び出し方2

上の方法だと冗長なので、以下のような言い方で一度に実行することもできる

「メモ帳を使ってメモを読んで」

「はい、メモ帳のテストバーンジョンです。こんにちは」

直近のメモが読まれる

3. ショートカットを作って呼び出しを簡単にする

GoogleHomeでショートカットを作成することで、「メモ帳を使ってメモを読んで」をもっと簡略化した言い方で済むようにする

ショートカットの言葉 - 「メモを読んで」 - 「メモ読んで」

実際に実行される命令 - 「メモ帳を使ってメモを読んで」

4. Herokuのアプリの名前を変更する

  • ずっとherokuが自動で発行したアプリ名「aqueous-peak-42683 」を使っていたので、これをわかりやすい名前に変える

変え方参考 - https://devcenter.heroku.com/articles/renaming-apps

$heroku apps:rename 新しいアプリ名

合わせて、dialogflowのFulfillmentで呼び出すURLと、HerokuのスケジューラでcurlするURLを変える必要があるので注意