Guides

Automation自動記録

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 の外なので画像はありません)。

  1. ショートカット アプリ →「オートメーション」タブ →「+」→「時刻」を選びます。
  2. 実行時刻を「毎日・午前7時」などに設定し、「すぐに実行」をオンにします(確認なしで走らせる設定)。
  3. 「ヘルスケアサンプルを検索」 アクションを追加します(種類・開始日・終了日・並び順序・制限を指定できます)。歩数なら 種類=歩数 / 開始日=今日。初回は「ヘルスケアへのアクセスを許可しますか」と聞かれるので許可します。
  4. 「統計を計算」 アクションを追加し、3 の結果に対して 「合計」 を選びます。歩数は「1日1件」ではなく 移動のたびに1件 記録されるので、この合計がないと最後の1件だけが送られます。
  5. 「日付をフォーマット」 アクションで、happened_on に入れる日付を作ります(カスタム形式 yyyy-MM-dd)。
  6. 「テキスト」 アクションで、送信する JSON を組み立てます(次の節の雛形をそのまま貼り、数字の部分を 4・5 の変数に置き換えます)。
  7. 「URL の内容を取得」 アクションを追加し、次のように設定します。
  • URL: https://tsumu.juriscodeai.com/api/v1/items
  • 方法: POST
  • ヘッダー: AuthorizationBearer tsumu_...Content-Typeapplication/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"
}

84207.2 を手順4の変数に、2026-09-06 を手順5の変数に置き換えてください。`"` と `{` `}` は消さない ようにだけ気をつけます(変数を貼るときに引用符ごと選択してしまうのが、いちばん多い失敗です)。

使える項目は次のとおりです。

  • category_key(必須)… health workout など、カテゴリのキー
  • title / noteどちらか一方は必ず入れます(両方空だと保存されません)
  • happened_onYYYY-MM-DD。省略すると日付なしの記録になります
  • attrs … カテゴリごとの項目。healthsleep_hours(時間)・weight_kg(kg)、workoutexerciseminutes(分)・weight(kg)・reps(回)
  • tags … 文字列の配列(例: ["自動記録"]

4. 入ったかどうかを確かめる

オートメーションを1回「実行」して、その場で確かめます。

  1. Tsumu のカテゴリ一覧から Workout または Health を開きます。
  2. 今日の日付で記録が1件増えていれば成功です。API 経由の記録には 「自動記録」バッジ が付くので、手で書いたものと見分けられます。
  3. 増えていなければ、ショートカット側で「URL の内容を取得」の結果を確認します。成功時は `201`、失敗時は下の表のいずれかが返ります。

5. うまくいかないとき

返ってきた番号で原因が切り分けられます。

  • 401 … トークンが違うか、失効しています。Bearer の後ろに tsumu_ から始まる文字列が入っているか、余計な空白・改行が混じっていないかを見ます。
  • 403 … トークンのスコープが「読み取り」だけです。トークン画面で「読み取り + 書き込み」のものを発行し直します。
  • 404category_key の綴りが違います(health workout はすべて小文字)。
  • 400 … JSON の形が壊れているか、titlenote も空です。日付は 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 では TaskerHTTP Request Shortcuts などのアプリで、同じ POST を毎朝実行するタスクを組めば同型のことができます(URL・ヘッダー・本文は上と同じ)。返ってくる番号の意味も同じです。

スマホの使用時間について(正直な注記)

iOS では、スマホ全体やアプリ別の使用時間(スクリーンタイム)を全自動で取り出すことはできません。 Apple がスクリーンタイムのデータを外部提供していないためです。現実的な運用は次の2つです。

  • スクリーンタイム画面のスクショを撮り、AI に読み取らせて記録する(半自動・週1回 の運用)。
  • 主要な3〜5アプリだけなら、ショートカットの「アプリを開いたとき/閉じたとき」トリガーで使用時間を記録する運用も可能です。

この制約が将来変われば、すぐに対応します。

安全のために

  • API 経由の記録には source=api が付き、「自動記録」バッジで見分けられます。
  • レート制限は 1時間あたり 120リクエストです。毎朝1回のPOSTなら十分に収まります。
  • トークンはトークン画面からいつでも失効できます。
  • 同じトークンで Claude と Tsumu をつなぐこともできます。自動記録と AI からの読み書きを1本でまかなえます。