mcpField
P
performance-profiling

performance-profiling

github.com/mengto開発7.1k1.4k 回インストール3 日前に更新
リポジトリ

performance-profiling について

Apple アプリのパフォーマンスを、対象を絞った計測で診断・改善するスキルです。ハング、メモリ増加、起動遅延、電力消費、ネットワークの無駄に応じた分析手順を開発者に示します。

主な機能

  1. 01問題別のプロファイラー選択ガイド
  2. 02CPU、メモリ、起動、電力の資料
  3. 03実機と Release ビルドでの計測指針
  4. 04修正前後の測定手順
  5. 05Xcode 診断と MetricKit の活用案内

活用シーン

  1. 01UI のハングや高 CPU 使用率の調査
  2. 02メモリリークや増加の分析
  3. 03アプリ起動の遅さの測定
  4. 04バッテリー、熱、通信コストの評価

インストール

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

$npx skills add https://github.com/mengto/skills --skill performance-profiling

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

同梱ファイル

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

agents/
openai.yaml
demo/
expected-output.md
index.html
input.md
PROMPT.md
references/
energy-diagnostics.md
launch-optimization.md
memory-profiling.md
time-profiler.md

詳細

パフォーマンスのプロファイリング

このスキルを使用すると、Apple アプリのパフォーマンス問題を体系的に診断し、適切なプロファイリングワークフローを選び、的を絞った修正を適用して、実測値で変更を検証できます。

判断ツリー

コードを変更する前に、参照ファイルを選択してください。

What performance problem are you investigating?

+ App hangs, stutters, dropped frames, slow UI, high CPU
  -> Read references/time-profiler.md

+ High memory, leaks, OOM crashes, growing footprint
  -> Read references/memory-profiling.md

+ Slow cold launch, warm launch, resume, or time to first frame
  -> Read references/launch-optimization.md

+ Battery drain, thermal throttling, background energy, network waste
  -> Read references/energy-diagnostics.md

+ General "app feels slow"
  -> Start with references/time-profiler.md, then references/memory-profiling.md

+ Pre-release performance audit
  -> Read all reference files and use the review checklist below

クイックリファレンス

問題インストゥルメント/ツール主なメトリクス参照先
UI が 250 ms 以上応答しないTime Profiler + Hangsハング時間、メインスレッドのスタックreferences/time-profiler.md
CPU 使用率が高いTime Profiler関数ごとの CPU 使用率、コールツリーの重みreferences/time-profiler.md
メモリリークLeaks + Memory Graphリークしたバイト数、保持サイクルのパスreferences/memory-profiling.md
メモリ使用量の増加Allocations使用中のバイト数、世代分析references/memory-profiling.md
起動が遅いApp Launch最初のフレームまでの時間、メイン前、メイン後references/launch-optimization.md
バッテリー消費が多いEnergy Logエネルギーへの影響、CPU/GPU/ネットワークのアクティビティreferences/energy-diagnostics.md
熱の問題Activity Monitor、Instruments熱状態の遷移references/energy-diagnostics.md
ネットワークの無駄Network profiler重複したフェッチ、ペイロードサイズreferences/energy-diagnostics.md

ワークフロー

  1. ユーザーの報告、トレース、ログ、またはコードパスからパフォーマンスのカテゴリを特定します。
  2. 問題が広範囲に及ぶか不明瞭でない限り、該当する参照ファイルのみを読みます。
  3. 実際のデータを使用し、Release ビルドで実機プロファイリングすることを優先します。
  4. 修正を提案する前に、プロファイルで示されたコードパスを調べます。
  5. 測定されたボトルネックに対処する、最小限で的を絞った修正を適用します。
  6. 再度プロファイリングするか、再現可能な測定を追加して改善を確認します。

プロファイリングの基本ルール

  • 可能な場合は実機でプロファイリングします。Simulator はホストの CPU とメモリを使用します。
  • 最適化によってホットパスが変わる可能性があるため、Release 構成を使用します。
  • 空のデータベースや簡易的なアセットではなく、実際の使用状況を代表するデータで再現します。
  • プロファイリング中のノイズを減らすため、関係のないアプリを終了します。
  • 結果を明確にするため、修正前後の測定値を記録します。
  • ワークフローの継続的な時間計測が必要な場合は、os_signpost マーカーを追加します。

Xcode の診断

疑われる問題に該当する場合は、Scheme > Run > Diagnostics の関連設定を推奨します。

設定用途
Main Thread Checkerメインスレッド以外での UI 処理
Thread Sanitizerデータ競合と安全でない共有状態
Address Sanitizerバッファーオーバーフローと解放後使用
Malloc Stack Loggingメモリ割り当てのコールスタック
Zombie Objects解放済みオブジェクトへのメッセージ送信

MetricKit の導入

起動、応答性、メモリ、診断情報の本番環境でのモニタリングには、MetricKit を提案してください。

import MetricKit

final class PerformanceReporter: NSObject, MXMetricManagerSubscriber {
    func startCollecting() {
        MXMetricManager.shared.add(self)
    }

    func didReceive(_ payloads: [MXMetricPayload]) {
        for payload in payloads {
            if let launch = payload.applicationLaunchMetrics {
                log("Resume time: \(launch.histogrammedResumeTime)")
            }
            if let responsiveness = payload.applicationResponsivenessMetrics {
                log("Hang time: \(responsiveness.histogrammedApplicationHangTime)")
            }
            if let memory = payload.memoryMetrics {
                log("Peak memory: \(memory.peakMemoryUsage)")
            }
        }
    }

    func didReceive(_ payloads: [MXDiagnosticPayload]) {
        for payload in payloads {
            if let hangs = payload.hangDiagnostics {
                for hang in hangs {
                    log("Hang: \(hang.callStackTree)")
                }
            }
        }
    }
}

レビューチェックリスト

応答性:

  • メインスレッドで 100 ms を超える同期処理がないこと。
  • メインスレッドでファイル I/O やネットワーク呼び出しを行わないこと。
  • 大規模な Core Data または SwiftData のフェッチには、バックグラウンドコンテキストを使用すること。
  • 画像はメインスレッド以外でデコードすること。
  • @MainActor は、UI へのアクセスが本当に必要なコードに限定すること。

メモリ:

  • デリゲート、クロージャー、オブザーバー、非同期タスクに保持サイクルがないこと。
  • 大きなリソースは表示されなくなった時点で解放すること。
  • コレクションとキャッシュのサイズに上限を設けること。
  • Objective-C オブジェクトを生成するタイトなループでは、autoreleasepool を使用すること。

起動:

  • @main App 構造体の init() で重い処理を行わないこと。
  • 必須ではない初期化は遅延すること。
  • 実用上可能な範囲で動的フレームワークを最小限にすること。
  • 起動中に同期ネットワーク呼び出しを行わないこと。

エネルギー:

  • バックグラウンドタスクでは、適切な BGTaskScheduler リクエストタイプを使用すること。
  • 位置情報の精度は、製品の要件に合わせること。
  • システムが起動をまとめられるよう、タイマーに許容範囲を設定すること。
  • 可能な場合はネットワークリクエストをまとめて送信し、キャッシュすること。

参考資料

  • references/time-profiler.md:CPU プロファイリング、ハング検出、サインポスト API。
  • references/memory-profiling.md:Allocations、Leaks、メモリーグラフデバッガー。
  • references/launch-optimization.md:起動フェーズとコールド/ウォームスタートの最適化。
  • references/energy-diagnostics.md:バッテリー、熱状態、ネットワーク効率。

コメント