Healthデータのスプレッドシートへの送り込み

最近の活動量計等は歩数や体重などのデータをスマホに送信できることも多い。それが可能な活動量計と体脂肪計を利用しているが、アプリで時折変化を眺めて満足してしまうことが多かった。予め用意されたフォーマットで見るだけでなく自分で分析したいし、データをバックアップしておきたいので、スプレッドシートにデータを定期的にアップロードするようにした。

できること

毎日定時にスプレッドシートに下記のような1行分のレコード(「昨日」の各種値)が追加される

仕組み

スマホ上でデータはHealthアプリに集約する(ここは各デバイスの純正アプリにすでにHealthへの同期機能があったため、それを利用)。HealthアプリからShortcutsアプリでデータを取り出し、GASを介してスプレッドシートに書き出す。

具体的な手順

  1. Shortcutsアプリで必要なデータを取り出してPOSTリクエストを送るショートカットを作成する
    • 色々はまるポイントがあったので、以下画像内で記載する
  1. GASでPOSTリクエストを受けてシートに書き込むスクリプトを作る
function doPost(e) {  // POSTリクエストを送信されたら実行される
  var data = getData(e);
  appendData(data);
}

function getData(e) {
  var params = JSON.parse(e.postData.getDataAsString());   // POSTされたデータを取得
  var values = JSON.parse(params.results);  // Shortcutsアプリで作成したショートカットで、results: {values: {Weight: …} の形式でデータを入れている
  return [
    new Date(), 
    values.Weight, 
    values.BodyFatPercentage, 
    values.RestingEnergy,
    values.ActiveEnergy,
    values.Steps,
    values.BodyTemperature,
  ];
}

function appendData(data) {
  var sheetName = "HealthCareApp";
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName(sheetName);
  sheet.appendRow(data);
}
  1. 1.で作成したショートカットを毎日定時に実行するよう設定する
    Shortcutsアプリの中でAutomationから定時実行を設定できる

感想

  • ショートカットの作成をスマホ上で行うのがつらい。
    • 簡単なショートカットだと問題ないのだけど、今回のように長くなるとぽちぽち押しての操作がつらくなる。Shortcutsアプリ自体はMacOSにもあるのでPCでもショートカットの編集は行えるが、HealthアプリがMacOSにはないのでHealthアプリの操作をする部分はPCでは編集できなかった。
    • 編集後の差分を確認できないので、コードとして管理したい気持ちになった(Shortcutsアプリの意義と逆方向の感想になってしまうが…)