healthkit-code-review について
Apple HealthKit の実装をレビューするためのスキルで、認可、クエリ、バックグラウンド配信、データ型を扱います。証拠に基づくレビューゲートに沿って、利用可否、権限の意味、スレッド処理、クエリのライフサイクルを確認します。
主な機能
- 01HealthKit の利用可否と認可の確認
- 02クエリ述語と結果件数の確認
- 03集計方法の確認
- 04オブザーバークエリとバックグラウンド配信
- 05スレッド処理とライフサイクルの確認
活用シーン
- 01HealthKit の認可フローのレビュー
- 02サンプルクエリと述語の確認
- 03バックグラウンド配信設定の検証
- 04長時間クエリの停止方法の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill healthkit-code-reviewインストール後、Claude Code で/healthkit-code-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/authorization.mdbackground.mddata-types.mdqueries.md詳細
HealthKit コードレビュー
クイックリファレンス
| 問題の種類 | 参照先 |
|---|---|
| HKHealthStore、権限、ステータス確認、プライバシー | references/authorization.md |
| HKQuery の種類、述語、アンカー付きクエリ、統計 | references/queries.md |
| バックグラウンド配信、オブザーバークエリ、完了ハンドラー | references/background.md |
| HKQuantityType、HKCategoryType、ワークアウト、単位 | references/data-types.md |
レビューチェックリスト
- HealthKit の操作を行う前に
HKHealthStore.isHealthDataAvailable()を呼び出している - 必要なデータ型に限って認証をリクエストしている(権限を最小限にする)
-
requestAuthorizationの完了ハンドラーを、権限が許可されたことを示すものと誤解していない - 読み取り権限の状態を特定しようとしていない(プライバシーを重視した設計)
- UI を更新するため、クエリの結果をメインスレッドにディスパッチしている
-
HKObjectQueryNoLimitは、範囲を限定する述語と併用する場合にのみ使用している - 手動で合計する代わりに、集計には
HKStatisticsQueryを使用している - オブザーバークエリの
completionHandler()を必ず呼び出している(deferを使用) -
application(_:didFinishLaunchingWithOptions:)でバックグラウンド配信を登録している - バックグラウンド配信のエンタイトルメントを追加している(iOS 15 以降)
- 数量型に適切な単位を使用している(例:心拍数には
count/min) - 長時間実行するクエリをプロパティとして保持し、
deinitで停止している
参照資料を読み込むタイミング
- 認証/権限のフローをレビューする場合 -> authorization.md
- HKSampleQuery、HKAnchoredObjectQuery、または述語をレビューする場合 -> queries.md
- HKObserverQuery または
enableBackgroundDeliveryをレビューする場合 -> background.md - HKQuantityType、HKCategoryType、または HKWorkout をレビューする場合 -> data-types.md
レビューゲート
順番に実施してください。現在のステップの合格条件を満たすまでは、後続のステップで指摘事項を述べないでください(各合格条件は、レビュー対象のコードベースから回答できます)。
- スコープ — 合格:
HealthKit、HKHealthStore、またはHK*API を使用しているファイルパスと型/シンボルを示すか、差分に該当するものがないことを明確に述べます。 - 利用可能性とストア — 合格: HealthKit を使用する前に
isHealthDataAvailable()を呼び出している箇所を示すか、対象コードで省略しても問題ない理由を記録します。また、HKHealthStoreの作成箇所または注入箇所を示します。 - 認証の意味 — 合格: 各
requestAuthorization/getRequestStatusForAuthorizationについて、references/authorization.md に従ってハンドラーの分岐を示します(例:成功しても読み取りアクセスが許可されたことにはなりません)。authorizationStatusだけから読み取り権限を推測しないでください。 - クエリと上限 — 合格: 各クエリについて、述語と上限を示します(
HKObjectQueryNoLimitは範囲を限定する述語と併用する場合に限ります)。合計/集計については、references/queries.md に従って、HKStatisticsQuery/コレクションクエリの使用箇所、または手動で合計している箇所を示します。 - オブザーバーとバックグラウンド — 合格:
HKObserverQueryまたはenableBackgroundDeliveryがある場合、オブザーバーの開始/停止箇所とバックグラウンド配信の登録箇所を示します。また、エンタイトルメント/Info.plist を示すか、references/background.md に従って設定の不足を指摘します。該当しない場合、合格: 「スコープ内にオブザーバー/バックグラウンド処理なし」と1行で記載します。 - スレッド処理とライフサイクル — 合格: クエリのコールバックから UI を更新する際のメインキュー(または文書化されたパターン)を示します。また、上記のチェックリストに従い、長時間実行するクエリの保持/
stop()/deinitを示します。
レビュー時の質問
- HKHealthStore を作成する前に
isHealthDataAvailable()を確認していますか? - 権限が拒否された場合、コードは問題なく処理できますか(結果が空の場合など)?
- すべてのコードパスでオブザーバークエリの完了ハンドラーを呼び出していますか?
- バックグラウンドハンドラーで行う処理は最小限ですか(約15秒の制限)?
- HKQueryAnchors はサンプル型ごとに(共有せずに)永続化していますか?
コメント
Markdown 対応