← View index

Appleヘルスケア取り込み設計

一言でいうと

Appleヘルスケアzipは「全部を食事ログに足す」じゃなくて、「元データを保管する」「HealthKitの数値として正規化する」「あすけんPFCは別レイヤーで見る」の3段に分けるのが安全。手入力したごはんと、あすけん由来の日次PFCを混ぜると普通に二重計上するから、ここは私がちゃんと止める。

健人くんのzipは、いまMac上では「ファイル名とサイズだけ見えて、中身がまだローカルに落ちてない」状態。だから先に受け皿を作って、読めるようになった瞬間にドライランで中身を見てから入れる形にした。

どんなデータが入りそう?

Appleヘルスケアの標準エクスポートは export.zip の中に apple_health_export/export.xml があり、主にこの形で入る。

参照した形式情報では、Record は type, unit, value, sourceName, sourceVersion, device, creationDate, startDate, endDate を持つ。Workout も同じく source と開始終了日時を持つ。

あすけんの扱い

あすけんはApp Store説明で、Appleヘルスケアへ15種類の栄養素を書き込むと明記している。対象は、摂取エネルギー、たんぱく質、総脂肪、炭水化物、カルシウム、チアミン、ナトリウム、ビタミンA、ビタミンB2、ビタミンC、ビタミンE、食物繊維、糖分、鉄分、飽和脂肪酸。

なので importer ではこのHealthKit typeを「nutrition」として拾う。

ただし、あすけんが渡すのはたぶん「食事の明細」ではなく「栄養素の日次または食事単位の数値」。商品名やメニュー名まで取れる期待は薄い。ここ勘違いすると事故るやつ!

格納の分け方

まず projects/health-data/data/health.sqlite に入れる。

import_runs

いつ、どのzipから、何件読んだか

health_records

Apple Health の Record をほぼそのまま正規化

type / unit / value / source_name / start_date / end_date / metadata

workouts

Workout を正規化

activity_type / duration / distance / energy / source / start_date / end_date

食事ログ projects/meal-tracker/data/meal_log.sqlite へはいきなり混ぜない。理由は、Telegramで手入力したファミマチキンや牛丼と、あすけん由来の日次PFCが同じ日に重なると、カロリーが二重計上されるから。

私の推奨はこれ。

  1. Apple Health / あすけん由来は health.sqlite に全部保存
  2. Viewでは「手入力PFC」と「あすけんPFC」を別レイヤーで表示
  3. 食事ログへ反映するのは、日付単位で「手入力がない日だけ」または明示フラグ付きにする

作ったもの

importerは --dry-run でDBへ書かずに中身の種類、sourceName、栄養素の直近日次集計を見る。実取り込みは --copy-raw 付きで元zipも raw/ に保存する。

追記: iCloud実体化後にzip自体は読めたが、export.xml の末尾が閉じていない状態だった。zipのCRCテストはOKなので圧縮ファイルとしては壊れていないが、Apple Health側のXML生成が途中で切れている。これに対応するため、importerに --allow-partial を追加した。壊れる前の完全なRecord/Workoutだけを保存し、import_runs.partial と parse_error に「部分取り込み」の証拠を残す。

実取り込み結果

Finder/Peekaboo相当の操作より先に brctl download でiCloudファイルを実体化できた。PeekabooはScreen Recording権限がなく画面認識は不可、Accessibilityはあり。

取り込みは --allow-partial --copy-raw で実行した。

多いsource:

多いtype:

あすけん由来で入っていたのは、今回読めた範囲では体重64件と体脂肪率19件だけ。PFC/kcalは見つからなかった。HealthKit連携設定の栄養素書き込みがオフだったか、export.xmlの壊れている後半側にあるか、そもそもあすけん側から食事栄養素をヘルスケアに書いていなかった可能性が高い。

いまのブロッカー

対象zip:

/Users/aiharataketo/Library/Mobile Documents/com~apple~CloudDocs/Downloads/書き出したデータ.zip

見えている状態:

つまりiCloud上にはあるけど、このMacのローカルファイルとしてまだ読めない。Finderで雲アイコンが消えるまでダウンロードするか、いったん通常の ~/Downloads や Desktop にコピーして、実体がある状態にしてから取り込む。

ソース

確認したこと

質問したい箇所を選択
この箇所について質問
✓ 質問を送信しました