widgetkit-code-review について
widgetkit-code-reviewは、Apple WidgetKitコードをレビューするスキルです。タイムライン、ビュー、インテント、パフォーマンスのチェックリストと資料を備え、報告前に根拠とプラットフォーム固有の確認を求めます。
主な機能
- 01タイムラインと更新ポリシーの確認
- 02ウィジェットサイズとディープリンクの確認
- 03インテント設定の確認
- 04メモリ、キャッシュ、更新予算の確認
- 05報告前の根拠確認ゲート
活用シーン
- 01TimelineProviderの実装レビュー
- 02サイズごとのウィジェット動作確認
- 03設定可能なウィジェット変更の評価
- 04ウィジェットのメモリや更新に関する調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill widgetkit-code-reviewインストール後、Claude Code で/widgetkit-code-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/intents.mdperformance.mdtimeline.mdviews.md詳細
WidgetKit コードレビュー
クイックリファレンス
| 問題の種類 | 参照先 |
|---|---|
| TimelineProvider、エントリー、再読み込みポリシー | references/timeline.md |
| ウィジェットファミリー、containerBackground、ディープリンク | references/views.md |
| AppIntentConfiguration、EntityQuery、@Parameter | references/intents.md |
| 更新予算、メモリ制限、キャッシュ | references/performance.md |
レビューチェックリスト
-
placeholder(in:)は非同期処理を行わず、すぐに返る - Timeline エントリーの間隔は少なくとも 5 分空いている
- ギャラリーのプレビューでは、
getSnapshotがcontext.isPreviewを確認している - iOS 17 以降との互換性のために
containerBackground(for:)を使用している - systemSmall では
widgetURLを使用している(Link ではない) - Button ビューを使用していない(Link または widgetURL を使用する)
- ウィジェットビューで AsyncImage や UIViewRepresentable を使用していない
- 画像をウィジェットの表示サイズに合わせてダウンサンプリングしている(上限は約 30MB)
- アプリとウィジェット間のデータ共有に App Groups を設定している
- EntityQuery が、非オプションのパラメーターに対して
defaultResult()を実装している - 新しいインテントパラメーターが、更新後の既存ウィジェットで nil を処理している
-
reloadTimelinesを適切なタイミングで呼び出している(データが変更されるたびではない)
参照資料を読み込むタイミング
- TimelineProvider の実装または更新の問題 -> timeline.md
- ウィジェットのサイズ、ロック画面、containerBackground -> views.md
- 設定可能なウィジェット、AppIntent への移行 -> intents.md
- メモリの問題、キャッシュ、予算管理 -> performance.md
レビュー時の確認事項
- システムによる更新が遅れた場合に備えて、ウィジェットにフォールバック用のエントリーがありますか?
- ロック画面のファミリー(accessoryCircular/Rectangular/Inline)は適切に処理されていますか?
- IntentConfiguration から移行すると、既存のユーザーウィジェットに問題が生じますか?
- タイムラインには今後のエントリーが設定されていますか?それとも頻繁な更新に依存していますか?
- ウィジェットからアクセスできるよう、データは App Groups 経由でキャッシュされていますか?
ハードゲート(報告前)
報告する予定の各指摘について、順番に完了してください。合格条件を満たすまで次に進まないでください。
- 場所を示す根拠 — 指摘には、現在のファイル内容からコピーした
[FILE:LINE](または行範囲)が含まれており、そのパスがこのリポジトリ内で解決できます。 - 対象範囲の読み込み — 差分の一部分やコードスニペットだけでなく、周辺の実装全体を読みます。該当する場合は、
TimelineProvider(placeholder、getSnapshot、getTimelineを含む)、@mainのWidget/ウィジェットバンドル、または設定可能なウィジェットのAppIntentConfiguration/インテント型を読みます。 - プラットフォームまたはシステムに関する主張(指摘が更新予算、約 30MB のメモリに関する指針、ロック画面のアクセサリーファミリー、iOS 17 以降の
containerBackground、App Groups によるデータ共有、またはIntentConfigurationからAppIntentConfigurationへの移行に依存する場合のみ) — 確認した具体的な根拠(例:.entitlements/プロジェクト内の App Group ID、ソースコード内のWidgetFamilyの処理、IPHONEOS_DEPLOYMENT_TARGET、または参照資料の該当するサブセクション)を 1 つ示すか、指摘を削除するか、未解決の質問として扱います。 - プロトコル — この項目について、review-verification-protocol に記載されている報告前の手順を満たしていること(満たしていない場合は指摘しないでください)。
報告する指摘には、それぞれ [FILE:LINE] ISSUE_TITLE の形式を使用してください。ハードゲート 4 は、このスキルのレビュー種別における報告前チェックリスト全体です。
コメント
Markdown 対応