swiftui-performance-audit について
SwiftUI Performance Auditは、コードレビューを中心に、必要に応じて実行時プロファイリングも用いてSwiftUIの性能問題を診断するスキルです。症状や証拠を原因候補、修正案、検証手順に結び付けます。
主な機能
- 01性能症状の分類
- 02SwiftUIコードの問題点レビュー
- 03実行時プロファイル収集の案内
- 04調査結果から原因候補を特定
- 05修正案と検証手順の提示
活用シーン
- 01スクロールの引っ掛かりや描画遅延の調査
- 02CPUやメモリ使用量増加の追跡
- 03ハングや過剰なビュー更新の分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dimillian/ skills --skill swiftui-performance-auditインストール後、Claude Code で/swiftui-performance-auditを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/code-smells.mddemystify-swiftui-performance-wwdc23.mdoptimizing-swiftui-performance-instruments.mdprofiling-intake.mdreport-template.mdunderstanding-hangs-in-your-app.mdunderstanding-improving-swiftui-performance.md詳細
SwiftUI パフォーマンス監査
クイックスタート
このスキルでは、まずコードから SwiftUI のパフォーマンス問題を診断し、コードレビューだけでは症状を説明できない場合に、プロファイリングの証拠を求めます。
ワークフロー
- 症状を分類します。描画の遅延、スクロールのカクつき、高い CPU 使用率、メモリの増加、ハング、または過剰なビュー更新です。
- コードがある場合は、
references/code-smells.mdを使ったコード優先のレビューから始めます。 - コードがない場合は、必要最小限の情報を求めます。対象のビュー、データフロー、再現手順、デプロイターゲットです。
- コードレビューだけでは結論が出ない場合や、実行時の証拠が必要な場合は、
references/profiling-intake.mdを使ってプロファイリングの手順を案内します。 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