iPhone のヘルスケアデータを CSV に:HealthKit で記録されるデータの一覧と、HealthKit Parser の使い方

iPhone と Apple Watch は、心拍数や歩数、睡眠、血中酸素などを、毎日自動で記録しています。何年も使っていれば、記録は数百万件になります。研究や開発に使えば、ほかではなかなか手に入らない、長い期間の生活のデータです。

ただ、「ヘルスケア」アプリが書き出すデータは、1 GB を超えることもある大きな XML ファイルで、そのままでは Excel などで開けません。この記事では、HealthKit で記録されるデータの一覧と、Mac アプリ HealthKit Parser で CSV にして分析する方法を紹介します。

HealthKit とは

HealthKit は、iPhone の中に健康に関するデータをまとめて保管する、Apple の仕組みです。iPhone と Apple Watch が自動で測ったデータに加えて、体重計や血圧計のアプリ、睡眠や食事を記録するアプリなどが書き込んだデータも、ここに集まります。「ヘルスケア」アプリは、その中身を見るためのアプリです。

ほかのアプリが HealthKit のデータを読むには、データの種類ごとに利用者の許可が要ります。自分でアプリを作れば HealthKit から直接データを読めますが、自分の記録をまとめて取り出すだけなら、「ヘルスケア」アプリの書き出し機能を使うのがいちばん手軽です。

HealthKit で記録されるデータの一覧

HealthKit のデータは、HKQuantityTypeIdentifierHeartRate(心拍数)のような識別子で区別されています。書き出したデータにも、HealthKit Parser で作った CSV の type 列にも、この識別子がそのまま入ります。主なものを、「ヘルスケア」アプリの分類に近い形でまとめました。

「単位の例」は書き出したデータに入っている単位です。iPhone の設定によって、km と mi のように変わることがあります。「主な記録元」は、どこで記録されることが多いかの目安です。

アクティビティ

データtype 列の値単位の例主な記録元
歩数HKQuantityTypeIdentifierStepCountcountiPhone・Apple Watch
ウォーキング+ランニングの距離HKQuantityTypeIdentifierDistanceWalkingRunningkmiPhone・Apple Watch
上った階数HKQuantityTypeIdentifierFlightsClimbedcountiPhone・Apple Watch
アクティブエネルギーHKQuantityTypeIdentifierActiveEnergyBurnedkcalApple Watch
安静時消費エネルギーHKQuantityTypeIdentifierBasalEnergyBurnedkcalApple Watch
エクササイズ時間HKQuantityTypeIdentifierAppleExerciseTimeminApple Watch
スタンド時間HKQuantityTypeIdentifierAppleStandTimeminApple Watch
スタンド(1 時間ごと)HKCategoryTypeIdentifierAppleStandHour—Apple Watch
身体活動の強度HKQuantityTypeIdentifierPhysicalEffortkcal/hr·kgApple Watch
心肺機能(VO2 max)HKQuantityTypeIdentifierVO2MaxmL/min·kgApple Watch
日光下で過ごした時間HKQuantityTypeIdentifierTimeInDaylightminApple Watch
サイクリングの距離HKQuantityTypeIdentifierDistanceCyclingkmApple Watch・他のアプリ・機器
水泳の距離・ストローク数HKQuantityTypeIdentifierDistanceSwimming
HKQuantityTypeIdentifierSwimmingStrokeCount
m, countApple Watch
ランニングの速度・パワー・歩幅・上下動・接地時間HKQuantityTypeIdentifierRunningSpeed
HKQuantityTypeIdentifierRunningPower
HKQuantityTypeIdentifierRunningStrideLength
HKQuantityTypeIdentifierRunningVerticalOscillation
HKQuantityTypeIdentifierRunningGroundContactTime
W, m, cm, ms …Apple Watch
ワークアウトの負荷(推定)HKQuantityTypeIdentifierEstimatedWorkoutEffortScoreappleEffortScoreApple Watch

心臓

データtype 列の値単位の例主な記録元
心拍数HKQuantityTypeIdentifierHeartRatecount/minApple Watch
安静時心拍数HKQuantityTypeIdentifierRestingHeartRatecount/minApple Watch
歩行時平均心拍数HKQuantityTypeIdentifierWalkingHeartRateAveragecount/minApple Watch
心拍変動(HRV)HKQuantityTypeIdentifierHeartRateVariabilitySDNNmsApple Watch
心拍数の回復(1 分後)HKQuantityTypeIdentifierHeartRateRecoveryOneMinutecount/minApple Watch
心房細動の履歴HKQuantityTypeIdentifierAtrialFibrillationBurden%Apple Watch
高心拍数・低心拍数・不規則な心拍リズムの通知HKCategoryTypeIdentifierHighHeartRateEvent
HKCategoryTypeIdentifierLowHeartRateEvent
HKCategoryTypeIdentifierIrregularHeartRhythmEvent
—Apple Watch

呼吸

データtype 列の値単位の例主な記録元
呼吸数HKQuantityTypeIdentifierRespiratoryRatecount/minApple Watch
血中酸素HKQuantityTypeIdentifierOxygenSaturation%Apple Watch
睡眠中の呼吸の乱れHKQuantityTypeIdentifierAppleSleepingBreathingDisturbancescountApple Watch
睡眠時無呼吸の通知HKCategoryTypeIdentifierSleepApneaEvent—Apple Watch

睡眠

データtype 列の値単位の例主な記録元
睡眠(就寝中・コア・深い・レム・覚醒)HKCategoryTypeIdentifierSleepAnalysis—Apple Watch・iPhone・他のアプリ・機器
睡眠中の手首の皮膚温HKQuantityTypeIdentifierAppleSleepingWristTemperaturedegCApple Watch
睡眠時間の目標HKDataTypeSleepDurationGoalhr「ヘルスケア」アプリ

歩行

データtype 列の値単位の例主な記録元
歩行速度HKQuantityTypeIdentifierWalkingSpeedkm/hriPhone
歩幅HKQuantityTypeIdentifierWalkingStepLengthcmiPhone
歩行非対称性HKQuantityTypeIdentifierWalkingAsymmetryPercentage%iPhone
両脚支持時間HKQuantityTypeIdentifierWalkingDoubleSupportPercentage%iPhone
歩行安定性HKQuantityTypeIdentifierAppleWalkingSteadiness%iPhone
階段の上り・下りの速度HKQuantityTypeIdentifierStairAscentSpeed
HKQuantityTypeIdentifierStairDescentSpeed
m/siPhone・Apple Watch
6 分間歩行の距離(推定)HKQuantityTypeIdentifierSixMinuteWalkTestDistancemiPhone

聴覚

データtype 列の値単位の例主な記録元
環境音レベルHKQuantityTypeIdentifierEnvironmentalAudioExposuredBASPLApple Watch
ヘッドフォン音声レベルHKQuantityTypeIdentifierHeadphoneAudioExposuredBASPLiPhone
大きな環境音の通知HKCategoryTypeIdentifierAudioExposureEvent—Apple Watch

身体測定

データtype 列の値単位の例主な記録元
身長HKQuantityTypeIdentifierHeightcm手入力・他のアプリ・機器
体重HKQuantityTypeIdentifierBodyMasskg他のアプリ・機器・手入力
BMIHKQuantityTypeIdentifierBodyMassIndexcount他のアプリ・機器・手入力
体脂肪率HKQuantityTypeIdentifierBodyFatPercentage%他のアプリ・機器・手入力
除脂肪体重HKQuantityTypeIdentifierLeanBodyMasskg他のアプリ・機器・手入力
ウエスト周囲長HKQuantityTypeIdentifierWaistCircumferencecm手入力

バイタル

データtype 列の値単位の例主な記録元
血圧(収縮期・拡張期)HKQuantityTypeIdentifierBloodPressureSystolic
HKQuantityTypeIdentifierBloodPressureDiastolic
mmHg他のアプリ・機器・手入力
体温HKQuantityTypeIdentifierBodyTemperaturedegC他のアプリ・機器・手入力
基礎体温HKQuantityTypeIdentifierBasalBodyTemperaturedegC他のアプリ・機器・手入力
血糖値HKQuantityTypeIdentifierBloodGlucosemg/dL他のアプリ・機器・手入力

栄養

データtype 列の値単位の例主な記録元
摂取エネルギー・たんぱく質・脂質・炭水化物HKQuantityTypeIdentifierDietaryEnergyConsumed
HKQuantityTypeIdentifierDietaryProtein
HKQuantityTypeIdentifierDietaryFatTotal
HKQuantityTypeIdentifierDietaryCarbohydrates
kcal, g他のアプリ・機器・手入力
水分・カフェインHKQuantityTypeIdentifierDietaryWater
HKQuantityTypeIdentifierDietaryCaffeine
mL, mg他のアプリ・機器・手入力
食物繊維・ビタミン・ミネラルなど(30 種類以上)HKQuantityTypeIdentifierDietaryFiber
HKQuantityTypeIdentifierDietaryVitaminC
…
g, mg, µg …他のアプリ・機器・手入力

その他

データtype 列の値単位の例主な記録元
マインドフルネスHKCategoryTypeIdentifierMindfulSession—Apple Watch・他のアプリ・機器
手洗いHKCategoryTypeIdentifierHandwashingEvent—Apple Watch
歯磨きHKCategoryTypeIdentifierToothbrushingEvent—他のアプリ・機器
転倒の回数HKQuantityTypeIdentifierNumberOfTimesFallencountApple Watch
月経などの周期記録HKCategoryTypeIdentifierMenstrualFlow
…
—手入力・他のアプリ・機器
症状(頭痛・発熱・せきなど)HKCategoryTypeIdentifierHeadache
HKCategoryTypeIdentifierFever
HKCategoryTypeIdentifierCoughing
…
—手入力
紫外線指数HKQuantityTypeIdentifierUVExposurecount他のアプリ・機器

単位が「—」のものは、value 列に HKCategoryValueSleepAnalysisAsleepCore(睡眠のコア)のような区分の値が入るデータです。

このほかにも、聴力検査の結果やワークアウト中の速度など、HealthKit には 100 種類を超えるデータがあります。実際にどのデータが入っているかは、使っている機器やアプリによって変わります。筆者の約 9 年分(2017〜2026 年)の書き出しには、42 種類・約 308 万件の記録が入っていました。いちばん多いのは Apple Watch のアクティブエネルギーと心拍数で、それぞれ 70 万件前後です。

iPhone でヘルスケアデータを書き出す

  1. iPhone で「ヘルスケア」アプリを開き、右上のプロフィールのアイコンをタップします。
  2. いちばん下の「すべてのヘルスケアデータを書き出す」をタップし、確認が出たら「書き出す」をタップします。データが多いと、書き出しに数分かかります。
  3. 共有のメニューが出たら、AirDrop で Mac に送るか、「ファイル」に保存して Mac に移します。
  4. Mac で zip ファイルをダブルクリックして展開します。

展開すると、apple_health_export というフォルダができます。中身は次のとおりです。

  • export.xml:すべての記録。HealthKit Parser で読み込むのはこのファイル
  • export_cda.xml:医療情報の標準形式(HL7 CDA)で書かれた記録
  • electrocardiograms:Apple Watch で記録した心電図の波形(CSV)
  • workout-routes:ワークアウトの経路(GPX)

HealthKit Parser で CSV にする

HealthKit Parser は、export.xml を読み込んで、記録を CSV に書き出す Mac アプリです。処理はすべて Mac の中で行い、データをどこにも送りません。

1. export.xml を読み込む

HealthKit Parser を起動すると、新しい書類のウインドウが開きます。ツールバーの「XMLをインポート」をクリックし、展開したフォルダの export.xml を選びます。

展開したフォルダの export.xml を選ぶ
展開したフォルダの export.xml を選ぶ

読み込みには時間がかかります。筆者の 1.4 GB の export.xml(約 308 万件)は、MacBook Pro(M4)で約 14 分でした。読み込みが終わるまで、ウインドウの右下に「XML をパースしています…」と表示されます。

2. 記録の種類と件数を確かめる

読み込みが終わると、記録の期間(開始・終了)とデータ数、記録されているデータの種類と、種類ごとの件数が表示されます。タイトルとメモは自由に書けます。

記録の期間とデータ数、データの種類ごとの件数
記録の期間とデータ数、データの種類ごとの件数

書類を保存しておけば、次からは export.xml を読み込み直さずに、すぐに開けます。期間を変えて何度も書き出したいときに便利です。

3. CSV に書き出す

ツールバーの「CSVとして書き出し」をクリックし、書き出す期間とデータの種類を選んで「書き出し」をクリックします。期間は「全期間」のほか、開始と終了の日時で絞り込めます。

書き出す期間とデータの種類を選ぶ
書き出す期間とデータの種類を選ぶ

すべての種類を一度に書き出すこともできますが、記録が数百万件あると CSV は大きくなります。分析に使う種類だけを選ぶと扱いやすくなります。

CSV の中身

CSV は 1 行が 1 件の記録で、次の列があります。

列内容
typeデータの種類(上の表の識別子)
unit単位
value値。睡眠などでは区分を表す文字列
start, end記録の開始・終了の日時。Mac の「言語と地域」の書式で、分まで(例:2025/06/12 11:14)
start_UT, end_UT記録の開始・終了の日時を Unix 時間(秒)で表したもの
creation, creation_UT記録が HealthKit に保存された日時と、その Unix 時間
device記録した機器(機種やソフトウェアのバージョン)
source name, source version記録したアプリや機器の名前と、そのバージョン

安静時心拍数を書き出した例です(一部の列だけ)。

typeunitvaluestart_UTend_UT
HKQuantityTypeIdentifierRestingHeartRatecount/min631791559483.01791640198.0
HKQuantityTypeIdentifierRestingHeartRatecount/min631791645830.01791714436.0
HKQuantityTypeIdentifierRestingHeartRatecount/min581791737624.01791765440.0

_UT の列(Unix 時間)

列名の最後に _UT が付いた列は、日時を Unix 時間で表したものです。Unix 時間は、1970 年 1 月 1 日 0 時 0 分 0 秒(協定世界時、UTC)からの経過秒数で、タイムゾーンに左右されません。

  • 海外への旅行や出張でタイムゾーンが変わっても、記録の順番や間隔がずれない
  • 引き算だけで、睡眠などの区間の長さ(秒)がわかる
  • 秒まで正確(start などの列は分まで)
  • 研究用の機器やほかのセンサーのデータと、時刻で突き合わせやすい
  • 表示するときに、好きなタイムゾーンに変換できる

Python(pandas)なら、次のように読み込めます。見出しの行はカンマのあとに空白が入っているので、skipinitialspace=True を付けます。

import pandas as pd

df = pd.read_csv("resting_heart_rate.csv", skipinitialspace=True)

# Unix 時間 → 日時(UTC)→ 日本時間
df["start_local"] = (pd.to_datetime(df["start_UT"], unit="s", utc=True)
                     .dt.tz_convert("Asia/Tokyo"))

# 区間の長さ(秒)
df["seconds"] = df["end_UT"] - df["start_UT"]

Excel では、=E2/86400+DATE(1970,1,1) のように計算し、セルの表示形式を日時にすると UTC の日時になります(E 列が start_UT のとき)。日本時間にするには、さらに 9/24 を足します。

分析するときの注意

  • 同じデータが重なっていることがある:iPhone と Apple Watch の両方を使っていると、歩数や距離は両方で記録されます。「ヘルスケア」アプリは重なりを除いて表示しますが、書き出したデータには両方が入っています。合計するときは、source name や device の列で記録元を絞り込みます。
  • 割合は 0〜1 の値:単位が % のデータ(血中酸素、体脂肪率、歩行非対称性など)は、97% が 0.97 のように入っています。
  • 単位を確かめる:単位は iPhone の設定によって変わることがあります。unit 列を確かめてから計算します。
  • 区分のデータは 1 行が 1 区間:睡眠は value 列に HKCategoryValueSleepAnalysisAsleepCore(コア)、…AsleepDeep(深い)、…AsleepREM(レム)、…Awake(覚醒)などが入り、1 行が 1 つの区間です。長さは end_UT − start_UT で求めます。
  • ほかの人のデータを扱うとき:ヘルスケアデータは、とても機微な個人情報です。研究で参加者のデータを扱うときは、所属機関の倫理審査や同意の手続きに従ってください。

CSV に入らないもの

HealthKit Parser が CSV にするのは、export.xml の中の個々の記録です。ワークアウトのまとめ(種目と時間、合計の距離など)、アクティビティリングの 1 日ごとの集計、生年月日や血液型などのプロフィールは含みません。ワークアウト中の心拍数や距離、消費エネルギーは、個々の記録として CSV に入ります。

心電図の波形とワークアウトの経路は、展開したフォルダの中に CSV と GPX で入っているので、そのまま使えます。

まとめ

iPhone と Apple Watch の記録は、書き出して CSV にすれば、Excel・R・Python などで自由に分析できます。_UT の列を使えば、タイムゾーンを気にせずに、ほかのデータと組み合わせられます。

HealthKit Parser は、Mac App Store で買い切りで販売しています(macOS 12 以降)。サブスクリプションはありません。

→ HealthKit Parser の詳細を見る

→ Mac App Store で見る

HealthKit Parser のほかの記事