mcpField
H
healthkit-code-review

healthkit-code-review

github.com/existential-birdsテスト・品質85129 回インストール11 週間前に更新
リポジトリ

healthkit-code-review について

Apple HealthKit の実装をレビューするためのスキルで、認可、クエリ、バックグラウンド配信、データ型を扱います。証拠に基づくレビューゲートに沿って、利用可否、権限の意味、スレッド処理、クエリのライフサイクルを確認します。

主な機能

  1. 01HealthKit の利用可否と認可の確認
  2. 02クエリ述語と結果件数の確認
  3. 03集計方法の確認
  4. 04オブザーバークエリとバックグラウンド配信
  5. 05スレッド処理とライフサイクルの確認

活用シーン

  1. 01HealthKit の認可フローのレビュー
  2. 02サンプルクエリと述語の確認
  3. 03バックグラウンド配信設定の検証
  4. 04長時間クエリの停止方法の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/existential-birds/beagle --skill healthkit-code-review

インストール後、Claude Code で/healthkit-code-reviewを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
authorization.md
background.md
data-types.md
queries.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

レビューゲート

順番に実施してください。現在のステップの合格条件を満たすまでは、後続のステップで指摘事項を述べないでください(各合格条件は、レビュー対象のコードベースから回答できます)。

  1. スコープ — 合格: HealthKit、HKHealthStore、または HK* API を使用しているファイルパスと型/シンボルを示すか、差分に該当するものがないことを明確に述べます。
  2. 利用可能性とストア — 合格: HealthKit を使用する前に isHealthDataAvailable() を呼び出している箇所を示すか、対象コードで省略しても問題ない理由を記録します。また、HKHealthStore の作成箇所または注入箇所を示します。
  3. 認証の意味 — 合格: 各 requestAuthorization / getRequestStatusForAuthorization について、references/authorization.md に従ってハンドラーの分岐を示します(例:成功しても読み取りアクセスが許可されたことにはなりません)。authorizationStatus だけから読み取り権限を推測しないでください。
  4. クエリと上限 — 合格: 各クエリについて、述語と上限を示します(HKObjectQueryNoLimit は範囲を限定する述語と併用する場合に限ります)。合計/集計については、references/queries.md に従って、HKStatisticsQuery /コレクションクエリの使用箇所、または手動で合計している箇所を示します。
  5. オブザーバーとバックグラウンド — 合格: HKObserverQuery または enableBackgroundDelivery がある場合、オブザーバーの開始/停止箇所とバックグラウンド配信の登録箇所を示します。また、エンタイトルメント/Info.plist を示すか、references/background.md に従って設定の不足を指摘します。該当しない場合、合格: 「スコープ内にオブザーバー/バックグラウンド処理なし」と1行で記載します。
  6. スレッド処理とライフサイクル — 合格: クエリのコールバックから UI を更新する際のメインキュー(または文書化されたパターン)を示します。また、上記のチェックリストに従い、長時間実行するクエリの保持/stop()/deinit を示します。

レビュー時の質問

  1. HKHealthStore を作成する前に isHealthDataAvailable() を確認していますか?
  2. 権限が拒否された場合、コードは問題なく処理できますか(結果が空の場合など)?
  3. すべてのコードパスでオブザーバークエリの完了ハンドラーを呼び出していますか?
  4. バックグラウンドハンドラーで行う処理は最小限ですか(約15秒の制限)?
  5. HKQueryAnchors はサンプル型ごとに(共有せずに)永続化していますか?

コメント