前回は、Google Homeを使って、簡単なメモをSlackに送るというのをやってみたのですが、Google Homeライフハック第2弾として、毎日の血圧記録をちょこっとだけ楽にすることを考えてみました。
実は2年ほど前から高血圧になり、カルシウム拮抗剤の服用と、毎朝の血圧測定を欠かせない身体になってしまいました。年とるっていやですね。
血圧の記録はスマホでもできるようにとGoogleフォームを使っています。入力フォームに血圧を入力するとGoogle Sheetに記録される仕組みです。
簡単にしたとはいえ、毎朝フォームに数字を入力するのはちょっと面倒な作業です。これを音声で入力出来るようにしてみます。
IFTTTの仕様に苦しんでみる
Google HomeからGoogle Sheet、同じGoogleですが連携するためには外部サービスIFTTTが必要になります。ところで、以前紹介したとおり、IFTTTはGoogle Homeで次のことができます。
- ある特定の語句を検出したら、他のサービスを起動する
- ある特定の語句を含むフレーズ内に含まれる文字列(#)を抽出し、他のサービスへ転送する
- ある特定の語句を含むフレーズ内に含まれる数字($)を抽出し、他のサービスへ転送する
- ある特定の語句を含むフレーズ内に含まれる文字列(#)と数字($)を抽出し、他のサービスへ転送する
というわけで、設定してみます。
試しに数字($)を2つ入れてみましたが、そういうのはダメと怒られます。
上と下を1回ずつ入れることも考えてみましたが、集計が面倒になるので、なんとか1行にする方法で試行錯誤を進めます。
入力は思い切って割り切る
色々やってみたのですが、どうにもうまいアイディアがわかず、思い切って諦めることにしました。普通、血圧のことを話すときは、「上120、下80」と言ったり、「130の85」と言ったりします。これをそのまま記録して、後から加工するという方針に切り替えました。
Google Homeに話しかけるときは、「(上の血圧)の(下の血圧)」として、それをそのままスプレッドシートに記録するようにします。
「ねえ、Google。今日の血圧、130の80」
こうやって記録しておいて、後で加工すればいいか…という感じで、不格好ではありますが、なんとか出来てきました。
時間が記録できないバグと格闘してみる
ここで一つ問題を発見。血圧をいつ計測したかというのは重要ですので{{CreatedAt}} という変数を入れて、1列目に記録されていたはずなのですが、シート上では空白になってしまっています。調べてみますと、1年以上前からの既出のバグです。
https://www.reddit.com/r/ifttt/comments/5kieg5/google_assistant_google_drive_spreadsheet_applet/
この対策として
https://www.youtube.com/watch?v=ufujOWXsq40
というのが公開されています。
具体的には
function addDate(e) {
var lr = SpreadsheetApp.getActiveSheet().getLastRow();
SpreadsheetApp.getActiveSheet().getRange(lr, 1).setValue(new Date());
}
というスクリプトです。これは「一番下の行の1列目にスクリプト実行時の時刻を入れる」というもので、スプレッドシートの数値が編集されたときに実行するように設定することで、擬似的に入力時間を記録することが出来るようになるのです。
これで、なんとか時刻と血圧を入力することが出来るようになってきました。
続く問題に頭を抱えてみる
スクリプトを使うことでバグも回避し、血圧が入力できるようになったと思ったのですが、別の問題が生じました。このスクリプトですと、後から集計や編集すると、最新の血圧測定時間のセルがその時の時刻に変更されちゃうんですね。125の80を後から125、80という別のセルに書きかえたりとか、データ加工するのが前提ですので、これでは困ったことになってしまいます。
というわけで、ここから先、さらに試行錯誤が続くのでした……
(未完)
(追記)
一応完成編はこちらです。
Google Homeを使って毎朝の血圧記録を楽にしてみよう(一応完成編)