mcpField
I
ios-animation-code-review

ios-animation-code-review

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

ios-animation-code-review について

ios-animation-code-reviewは、iOSプロジェクトのアニメーションコードをレビューするスキルです。アニメーションの動作、パフォーマンス、アクセシビリティ、トランジションを順に確認し、根拠のある指摘を促します。

主な機能

  1. 01対象範囲のアニメーションAPIを確認
  2. 02アニメーションとスプリングの使い方を確認
  3. 03パフォーマンスと描画負荷を確認
  4. 04視差効果を減らす設定とVoiceOverを確認
  5. 05トランジションとジオメトリエフェクトを検証
  6. 06指摘をコード位置に結び付ける

活用シーン

  1. 01SwiftUIアニメーション変更のレビュー
  2. 02動きのアクセシビリティ確認
  3. 03アニメーションのフレーム落ち調査
  4. 04matchedGeometryEffectのトランジション検証

インストール

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

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

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

同梱ファイル

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

references/
accessibility.md
performance.md
swiftui-animation-patterns.md
transitions.md

詳細

iOS アニメーションのコードレビュー

クイックリファレンス

問題の種類参照先
Spring のパラメーター、withAnimation の誤用、フェーズ/キーフレームの不具合references/swiftui-animation-patterns.md
フレーム落ち、オフスクリーンレンダリング、メインスレッドのブロックreferences/performance.md
視差効果を減らす、VoiceOver、動きへの過敏さreferences/accessibility.md
Transition プロトコル、matchedGeometryEffect、ナビゲーションのトランジションreferences/transitions.md

必須ゲート(順序あり)

対象ファイルについて、順番に完了してください。ステップに失敗した場合は、指摘を省略するか、再度根拠を確認するか、質問へ格下げしてください。合格条件を満たさずに非難を報告してはいけません。

ステップ実施内容合格条件(客観的)
1. 棚卸しレビュー対象の各ファイルと、アニメーション API が現れる箇所(行の範囲またはシンボル名:withAnimation、.animation、matchedGeometryEffect、PhaseAnimator、UIKit/CA アニメーターなど)を列挙します。書面のリストが存在し、アニメーション API がないファイルは対象外であることが明記されています。
2. 根拠の確認問題を指摘する前に、現在のファイルまたは差分の該当箇所を読み直します。各 [FILE:LINE] で該当の動作が確認できます。古い行番号は修正するか、指摘を取り下げます。
3. エビデンスフレームワーク固有の主張(spring カーブ、Transition への準拠、視差効果を減らす設定)については、クイックリファレンス の該当行を references/*.md と照合します。指摘の詳細に使用した参照ファイルを明記するか、インラインのみ(フレームワークのルールを伴わない構造/可読性の問題)と記載します。
4. 報告出力形式 に従って指摘を出力します。見出しが [FILE:LINE] ISSUE_TITLE と一致し、以下のチェックリスト項目はゲート1〜2で確認したコードにのみ適用されます。

出力形式

各指摘を次のように報告します。

[FILE:LINE] ISSUE_TITLE

例:[AnimatedCard.swift:42] Spring アニメーションに視差効果を減らす設定時の代替処理がありません

詳細、コードの提案、根拠はすべてヘッダー行の後に続けます。

レビューチェックリスト

  • @Environment(\.accessibilityReduceMotion) を確認している — アニメーションには視差効果を減らす設定時の代替処理がある
  • アニメーションだけをフィードバック手段としていない — 重要な状態変化には触覚フィードバック(.sensoryFeedback)または音声を組み合わせている
  • カスタムアニメーションが、システム標準の動き(標準のナビゲーショントランジション、シートの表示、SF Symbol のエフェクト)と重複していない
  • 頻繁な操作に対するアニメーションは短く控えめである — または、システムが処理するためアニメーションを使っていない
  • すべてのアニメーションを中断できる — 操作を続ける前に完了を待つことをユーザーに強制しない
  • Spring アニメーションでは duration/bounce パラメーターを使用している(UIKit/CA を除き、mass/stiffness/damping の生の値は使用しない)
  • value: パラメーターのない非推奨の .animation() を使用していない
  • withAnimation は状態変更を囲んでおり、ビュー宣言を囲んでいない
  • matchedGeometryEffect の ID は安定しており、名前空間内で一意である
  • 子ビューの表示と同時に親のジオメトリがアニメーションする場合、geometryGroup() を使用している
  • ループアニメーション(PhaseAnimator、symbolEffect)には有限のフェーズ、または適切なトリガーがある
  • UIView をバックに持つレイヤーで CATransaction.setAnimationDuration() を使用していない(代わりに UIView.animate を使用する)
  • インタラクティブなアニメーションは中断に対応している(アニメーション中に再トリガーしても状態が壊れない)
  • シャドウのアニメーションでは明示的に shadowPath を指定している(フレームごとの再計算を防ぐ)
  • ジェスチャー駆動のアニメーションでは、自然に完了するようリリース時の速度を維持している
  • ジェスチャー駆動のフィードバックは空間的な期待に沿っている(閉じる方向と表示される方向が一致する)
  • .id() 修飾子をアニメーションさせていない(ビューのアイデンティティが破棄されるため、代わりに transition または matchedGeometryEffect を使用する)

リファレンスの読み込みが必要な場合

  • Swift の設定が正しくない場合、または withAnimation のスコープに問題がある場合 → swiftui-animation-patterns.md
  • スクロールビューでカクつき、フレーム落ち、または負荷の高いアニメーションが発生する場合 → performance.md
  • Reduce Motion への対応が不足している場合、またはモーションのアクセシビリティに問題がある場合 → accessibility.md
  • matchedGeometryEffect の不具合、またはカスタム Transition のバグが発生する場合 → transitions.md

レビューの確認事項

  1. すべてのアニメーションに、伝える情報を維持する Reduce Motion 用の代替手段がありますか? フィードバック手段がアニメーションだけになっていませんか? ハプティクスや音声で補っていますか?
  2. このカスタムアニメーションは本当に必要ですか? システムがすでに同じ機能(標準のトランジション、SF Symbol のエフェクト、Liquid Glass)を提供していませんか?
  3. このアニメーションによってフレーム落ちが発生する可能性はありませんか? リストやスクロールビューで、負荷の高いプロパティ(ぼかし、パスを指定しないシャドウ、マスク)をアニメーションさせていませんか?
  4. すべてのアニメーションを中断できますか? 完了を待たずにユーザーが操作できますか? ジェスチャーによるフィードバックは、空間的な期待に沿っていますか?
  5. withAnimation は必要最小限の状態変更に適用されていますか? 関係のない変更までまとめて囲んでいませんか?
  6. matchedGeometryEffect について、ソースとデスティネーションで同じ ID と名前空間を使用し、同時に表示されるのは片方だけですか?

コメント