iOSショートカットでヘルスケアを自動記録
iPhone のショートカット オートメーションで、ヘルスケアの睡眠・歩数を毎朝 Tsumu に自動記録する手順です。タップ不要で勝手に貯まります。
更新日 公開日
PWA のままでは、Tsumu はヘルスケアに直接触れません。そこで iOS ショートカットの「オートメーション」 を使い、毎朝決まった時刻にヘルスケアの数値を Tsumu へ自動送信します。実装ゼロで、体験は「毎朝勝手に記録される」になります。
全体像は、次のようにデータが流れます。
ヘルスケア(睡眠・歩数)
↓ 毎朝7時に自動で
ショートカットのオートメーション
↓ POST(Authorization: Bearer tsumu_...)
Tsumu の REST API → 記録が貯まるまずは 歩数だけ で組むのがおすすめです。歩数は「1日の合計」という1つの数字なので、最短の手数で最後まで動きます。睡眠は少し事情が違うので、後の「睡眠は歩数より一手多い」で扱います。
1. 用意するもの
- 発行済みのパーソナルトークン(下の画面・スコープは「読み取り + 書き込み」)
- エンドポイント:
https://tsumu.juriscodeai.com/api/v1/items - 記録先カテゴリ: 睡眠・体調は
health、歩数はworkout(お好みで)
トークンは、マイページ →「AI・外部連携」→「パーソナルトークン」から発行します。

2. ショートカットを組む
ここからは iPhone の「ショートカット」アプリでの操作です(Tsumu の外なので画像はありません)。
- ショートカット アプリ →「オートメーション」タブ →「+」→「時刻」を選びます。
- 実行時刻を「毎日・午前7時」などに設定し、「すぐに実行」をオンにします(確認なしで走らせる設定)。
- 「ヘルスケアサンプルを検索」 アクションを追加します(種類・開始日・終了日・並び順序・制限を指定できます)。歩数なら 種類=歩数 / 開始日=今日。初回は「ヘルスケアへのアクセスを許可しますか」と聞かれるので許可します。
- 「統計を計算」 アクションを追加し、3 の結果に対して 「合計」 を選びます。歩数は「1日1件」ではなく 移動のたびに1件 記録されるので、この合計がないと最後の1件だけが送られます。
- 「日付をフォーマット」 アクションで、
happened_onに入れる日付を作ります(カスタム形式yyyy-MM-dd)。 - 「テキスト」 アクションで、送信する JSON を組み立てます(次の節の雛形をそのまま貼り、数字の部分を 4・5 の変数に置き換えます)。
- 「URL の内容を取得」 アクションを追加し、次のように設定します。
- URL:
https://tsumu.juriscodeai.com/api/v1/items - 方法:
POST - ヘッダー:
AuthorizationにBearer tsumu_...、Content-Typeにapplication/json - 本文: ファイル を選び、6 の「テキスト」を渡します(
JSONを選ぶとキーを1つずつ手で組むことになります)
アクション名は「検索して合計する」という順番で覚えると迷いません。探す →「ヘルスケアサンプルを検索」/まとめる →「統計を計算」/形を整える →「日付をフォーマット」「テキスト」/送る →「URL の内容を取得」 の4段です。
3. 送信する JSON の例
歩数を workout に記録する例:
{
"category_key": "workout",
"title": "歩数",
"note": "8420 歩",
"happened_on": "2026-09-06"
}睡眠を health に記録する例:
{
"category_key": "health",
"title": "睡眠",
"attrs": { "sleep_hours": 7.2 },
"happened_on": "2026-09-06"
}8420 と 7.2 を手順4の変数に、2026-09-06 を手順5の変数に置き換えてください。`"` と `{` `}` は消さない ようにだけ気をつけます(変数を貼るときに引用符ごと選択してしまうのが、いちばん多い失敗です)。
使える項目は次のとおりです。
category_key(必須)…healthworkoutなど、カテゴリのキーtitle/note… どちらか一方は必ず入れます(両方空だと保存されません)happened_on…YYYY-MM-DD。省略すると日付なしの記録になりますattrs… カテゴリごとの項目。healthはsleep_hours(時間)・weight_kg(kg)、workoutはexercise・minutes(分)・weight(kg)・reps(回)tags… 文字列の配列(例:["自動記録"])
4. 入ったかどうかを確かめる
オートメーションを1回「実行」して、その場で確かめます。
- Tsumu のカテゴリ一覧から
WorkoutまたはHealthを開きます。 - 今日の日付で記録が1件増えていれば成功です。API 経由の記録には 「自動記録」バッジ が付くので、手で書いたものと見分けられます。
- 増えていなければ、ショートカット側で「URL の内容を取得」の結果を確認します。成功時は `201`、失敗時は下の表のいずれかが返ります。
5. うまくいかないとき
返ってきた番号で原因が切り分けられます。
- 401 … トークンが違うか、失効しています。
Bearerの後ろにtsumu_から始まる文字列が入っているか、余計な空白・改行が混じっていないかを見ます。 - 403 … トークンのスコープが「読み取り」だけです。トークン画面で「読み取り + 書き込み」のものを発行し直します。
- 404 …
category_keyの綴りが違います(healthworkoutはすべて小文字)。 - 400 … JSON の形が壊れているか、
titleもnoteも空です。日付はYYYY-MM-DD以外を受け付けません。 - 429 … 送りすぎです。上限は1トークンあたり 1時間 120リクエスト。毎朝1回なら当たりません。
そもそもオートメーションが動かないときは、次の2つを疑います。
- 「すぐに実行」がオフ … 通知をタップするまで走りません。オンにすると確認なしで実行されます。
- 同じ記録が2件できる … オートメーションを重複して作っているか、テスト実行の分が残っています。余分な1件は Tsumu 側で削除してください(削除には5秒の「元に戻す」猶予があります)。
歩数の値そのものが実際より多いときは、Apple Watch と iPhone の両方が歩数を記録している ことを疑ってください。「ヘルスケアサンプルを検索」のフィルタで ソースをどちらか一方に絞る と、二重に足される分がなくなります。
睡眠は歩数より一手多い
歩数は「1日の合計」ですが、睡眠は区間データ です。ヘルスケアの睡眠分析は「コア・深い・レム・覚醒」を時間帯ごとに記録するため、一晩が何十件ものサンプルに分かれます。「ヘルスケアサンプルを検索」の結果をそのまま数えても睡眠時間にはなりません。
さらに、就寝が前日の夜・起床が当日の朝にまたがるので、「今日」で検索すると前半が落ちます。ショートカットの中で時間計算まで組むこともできますが、ブロックがかなり増えます。まずは次のどちらかで始めるのが現実的です。
- ヘルスケアアプリが出している睡眠時間を、朝いちばんの通知から手で入れる(1日10秒)。自動化は歩数だけにしておく。
- 就寝・起床の時刻だけを送る(
noteに「23:40 → 6:50」の形で入れる)。時間の計算は後から AI に任せられます(コピペで使えるプロンプト集の要領で「先月の平均睡眠時間は?」と聞けます)。
貯まったあとの読み解きは Tsumu 側でも AI 側でもできるので、入口はできるだけ単純にしておく ほうが続きます。
Android の場合
Android では Tasker や HTTP Request Shortcuts などのアプリで、同じ POST を毎朝実行するタスクを組めば同型のことができます(URL・ヘッダー・本文は上と同じ)。返ってくる番号の意味も同じです。
スマホの使用時間について(正直な注記)
iOS では、スマホ全体やアプリ別の使用時間(スクリーンタイム)を全自動で取り出すことはできません。 Apple がスクリーンタイムのデータを外部提供していないためです。現実的な運用は次の2つです。
- スクリーンタイム画面のスクショを撮り、AI に読み取らせて記録する(半自動・週1回 の運用)。
- 主要な3〜5アプリだけなら、ショートカットの「アプリを開いたとき/閉じたとき」トリガーで使用時間を記録する運用も可能です。
この制約が将来変われば、すぐに対応します。
安全のために
- API 経由の記録には
source=apiが付き、「自動記録」バッジで見分けられます。 - レート制限は 1時間あたり 120リクエストです。毎朝1回のPOSTなら十分に収まります。
- トークンはトークン画面からいつでも失効できます。
- 同じトークンで Claude と Tsumu をつなぐこともできます。自動記録と AI からの読み書きを1本でまかなえます。