mcpField
S
swiftui-performance-audit

swiftui-performance-audit

github.com/dimillianテスト・品質4.0k10.0k 回インストール30 週間前に更新
リポジトリ

swiftui-performance-audit について

SwiftUI Performance Auditは、コードレビューを中心に、必要に応じて実行時プロファイリングも用いてSwiftUIの性能問題を診断するスキルです。症状や証拠を原因候補、修正案、検証手順に結び付けます。

主な機能

  1. 01性能症状の分類
  2. 02SwiftUIコードの問題点レビュー
  3. 03実行時プロファイル収集の案内
  4. 04調査結果から原因候補を特定
  5. 05修正案と検証手順の提示

活用シーン

  1. 01スクロールの引っ掛かりや描画遅延の調査
  2. 02CPUやメモリ使用量増加の追跡
  3. 03ハングや過剰なビュー更新の分析

インストール

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

$npx skills add https://github.com/dimillian/skills --skill swiftui-performance-audit

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

同梱ファイル

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

agents/
openai.yaml
references/
code-smells.md
demystify-swiftui-performance-wwdc23.md
optimizing-swiftui-performance-instruments.md
profiling-intake.md
report-template.md
understanding-hangs-in-your-app.md
understanding-improving-swiftui-performance.md

詳細

SwiftUI パフォーマンス監査

クイックスタート

このスキルでは、まずコードから SwiftUI のパフォーマンス問題を診断し、コードレビューだけでは症状を説明できない場合に、プロファイリングの証拠を求めます。

ワークフロー

  1. 症状を分類します。描画の遅延、スクロールのカクつき、高い CPU 使用率、メモリの増加、ハング、または過剰なビュー更新です。
  2. コードがある場合は、references/code-smells.md を使ったコード優先のレビューから始めます。
  3. コードがない場合は、必要最小限の情報を求めます。対象のビュー、データフロー、再現手順、デプロイターゲットです。
  4. コードレビューだけでは結論が出ない場合や、実行時の証拠が必要な場合は、references/profiling-intake.md を使ってプロファイリングの手順を案内します。
  5. references/report-template.md を使って、考えられる原因、証拠、修正策、検証手順をまとめます。

1. 情報収集

以下を確認します。

  • 対象のビューまたは機能のコード。
  • 症状と正確な再現手順。
  • データフロー:@State、@Binding、環境の依存関係、監視対象のモデル。
  • 問題がデバイスとシミュレーターのどちらで発生するか、また Debug と Release のどちらで確認されたか。

可能であれば、問題の分類をユーザーに依頼します。

  • CPU 使用率の急上昇またはバッテリー消費
  • スクロールのカクつきまたはフレーム落ち
  • メモリ使用量の増加または画像による負荷
  • ハングまたは応答しない操作
  • 過剰なビュー更新、または予期せず広範囲に及ぶビュー更新

プロファイリングの詳細な情報収集チェックリストについては、references/profiling-intake.md を参照してください。

2. コード優先のレビュー

以下に注目します。

  • 広範な監視や環境の読み取りによって発生する無効化の連鎖。
  • リストや ForEach の不安定なアイデンティティ。
  • body やビュー構築処理内の負荷が高い派生処理。
  • 複雑な階層、GeometryReader、または Preference チェーンによるレイアウトの乱れ。
  • メインスレッドでの大きな画像のデコードやリサイズ処理。
  • 広範囲に適用されたアニメーションやトランジションの処理。

詳細な問題パターンの一覧と修正方法については、references/code-smells.md を参照してください。

以下を提示します。

  • コード上の該当箇所を示した、考えられる根本原因。
  • 推奨する修正とリファクタリング。
  • 必要に応じて、最小限の再現コードまたは計測方法の提案。

3. プロファイリングの案内

コードレビューで問題を説明できない場合は、実行時の証拠を求めます。

  • トレースのエクスポート、または SwiftUI タイムラインと Time Profiler のコールツリーのスクリーンショット。
  • デバイス、OS、ビルド設定。
  • プロファイリング対象の正確な操作。
  • 変更を比較している場合は、変更前後のメトリクス。

正確なチェックリストと収集手順については、references/profiling-intake.md を参照してください。

4. 分析と診断

  • 証拠を最も可能性の高いカテゴリに対応付けます。無効化、アイデンティティの頻繁な変化、レイアウトの乱れ、メインスレッドの処理、画像のコスト、またはアニメーションのコストです。
  • 説明しやすさではなく、影響度に基づいて問題に優先順位を付けます。
  • コードから推測される問題と、トレースで裏付けられた証拠を区別します。
  • プロファイリングがまだ不十分な場合は、その点と、不確実性を減らすために追加で必要な証拠を示します。

5. 修正

問題に絞った修正を適用します。

  • 状態の適用範囲を狭め、広範な監視による波及を減らします。
  • ForEach とリストのアイデンティティを安定させます。
  • 負荷の高い処理を body の外に移し、入力に応じて更新する派生状態、モデル層での事前計算、メモ化されたヘルパー、またはバックグラウンドでの前処理を使います。@State はビューが所有する状態にのみ使い、任意の計算のアドホックなキャッシュには使わないでください。
  • 等価性の判定がサブツリーの再計算より低コストで、入力が真に値セマンティクスを持つ場合にのみ、equatable() を使います。
  • 描画前に画像をダウンサンプリングします。
  • レイアウトを簡素化するか、可能であれば固定サイズを使います。

具体例、Observation における波及のガイダンス、修正パターンについては、references/code-smells.md を参照してください。

6. 検証

同じキャプチャを再実行し、ベースラインのメトリクスと比較するようユーザーに依頼します。 提示されている場合は、CPU 使用率、フレーム落ち、メモリのピーク値の差分をまとめます。

出力

以下を提示します。

  • メトリクスの簡潔な表(取得できる場合は変更前後)。
  • 影響度順に並べた主な問題。
  • 推定工数を添えた修正案。

最終監査の書式には references/report-template.md を使ってください。

参考資料

  • プロファイリングの受付および収集チェックリスト:references/profiling-intake.md
  • よくあるコードの問題と修正パターン:references/code-smells.md
  • 監査出力テンプレート:references/report-template.md
  • ユーザーから提供された Apple のドキュメントや WWDC の資料を references/ に追加してください。
  • Instruments を使った SwiftUI のパフォーマンス最適化:references/optimizing-swiftui-performance-instruments.md
  • SwiftUI のパフォーマンスの理解と改善:references/understanding-improving-swiftui-performance.md
  • アプリのハングを理解する:references/understanding-hangs-in-your-app.md
  • SwiftUI のパフォーマンスを解き明かす(WWDC23):references/demystify-swiftui-performance-wwdc23.md

コメント