【GoogleHomeでメモ帳アプリを作る】7. 使い勝手を良くする
概要
いままで作ったアプリの使い勝手を良くする
資料全体の構成はここに記載: GoogleHomeに話しかけてメモを記録したりメモを読み上げてもらう
やること
やることは以下
- Herokuをスリープさせないようにする
- アプリの名前を変える
- ショートカットを作って呼び出しを簡単にする
- 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)使える
スケジューラを設定して定期的に叩く
公式
以下を参考に設定
- https://himakan.net/websites/heroku_free_plan_doesnt_sleep
- https://blog.mktia.com/how-to-avoid-to-sleep-the-application-on-heroku/
こんなのもあった
- https://quickleft.com/blog/6-easy-ways-to-prevent-your-heroku-node-app-from-sleeping/
- https://medium.com/@pandachain/keep-free-heroku-app-awake-during-a-specific-period-using-google-app-script-in-2017-63fe37ee9e9f
[~/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を変える必要があるので注意