前言
Shiroテーマには「個人ステータス表示」機能があり、カスタマイズしたステータスを表示できる。
この機能を活用するため、スマホのフィットネスリングデータを個人ステータスに同期表示したく、効果は以下の通り:

効果図
当初はJavaScriptスクリプトを書き、Scriptableアプリで実現しようと計画した。しかし試してみると、ScriptableはHealthKitをサポートしておらず、ヘルスデータを取得できない。Appleデバイスでは、アプリがHealthKitのAPIを通じてのみヘルスデータにアクセスできるが、ScriptableはHealthKitの統合を試みたもののApp Storeで拒否された。そのため、二の次としてApple標準のショートカットで実現することにした。
2026.3.1 更新:ショートカットの制限が多すぎるため、現在は自作App+SideStore自己署名で自動プッシュを実現している
ステータス表示の設定
手動で個人ステータス表示を設定すると、コンソールでページがPOST方式でhttps://{バックエンドサーバー}/api/v2/serverless/shiro/statusにリクエストを送信するのが確認できる:

個人ステータス表示リクエスト
リクエストボディは以下のようなJSON形式:
個人ステータスを更新するには、まずアクセストークンを取得し、認証用のリクエストヘッダAuthorization: bearer {token}を構築する必要がある。
アクセストークンの取得方法は2つある。1つ目は、ステータス設定前にログインリクエストを送信し、返却されたJSONからxxxxx.xxxxxxxx形式のアクセストークンを取得する方法。
もう1つは、管理画面の設定→セキュリティ→API Tokenでxxxxxxxxxxxxxx形式のアクセストークンを新規作成する方法で、こちらを推奨する。
アクセストークンを取得したら、コンソールで検証:
ステータス設定成功。

設定成功
ショートカットの設計
ヘルスデータを自動的に個人ステータス表示に同期するには、ヘルスデータを取得・リクエストを構築・APIを呼び出すショートカットを設計する必要がある。設計思路は以下の通り:
フローチャートをショートカットに変換する際の注意点:
- あるデータが当日未記録の場合(運動していないなど)、ショートカットは空値を返し、0にはならない。後続の説明文連結で問題が起きないよう、初期値0を事前に設定しておく必要がある。
- Apple Healthのフィットネス記録パネルとデータを一致させたい場合、「立ち x 時間」(Stand Hours)の集計方法に特に注意が必要。これは達成回数を示し、実際の立ち時間ではない。計算ロジックは:各時間帯で累計立ち時間が1分以上に達すれば1時間達成とカウント。例:08:00-08:01に立ち、09:30-09:31に立てば2時間達成として記録される。一方、ショートカットで取得できる「立ち分数」(Stand Time)は各立ちの実分数。したがって「立ち x 時間」を集計するには、カウント方式で毎時間達成したかを統計し、立ち分数を単純に累計してはならない。ショートカットでの表現:

達成回数統計
- インターフェースでステータス設定に成功すると、
204ステータスコードのみが返却され、内容は返ってこない。ショートカットはHTTPステータスコードを詳細に判定できないため、返却ファイルサイズが0かどうかで成功を確認するしかない。
ショートカットが長すぎるため、ショートカットを公開。
ショートカットの完全なフローは以下(超長い画像注意):
