xcode-build-benchmark について
最適化の前に、再現可能な Xcode ビルド時間の基準を作成するスキルです。クリーン、キャッシュ済みクリーン、変更なし、および任意の増分ビルドを測定し、比較用にタイムスタンプ付き JSON を保存します。
主な機能
- 01クリーンビルドと増分ビルドを個別に測定
- 02各種ビルドを複数回実行
- 03ビルドコマンドと条件を統一
- 04タイムスタンプ付き JSON の保存
- 05中央値、範囲、時間カテゴリの報告
活用シーン
- 01ビルド最適化前の基準記録
- 02クリーンビルドと変更なしビルドの負荷比較
- 03実際の編集後ビルドの測定
- 04条件をそろえた不安定な測定の再実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ avdlee/ xcode-build-optimization-agent-skill --skill xcode-build-benchmarkインストール後、Claude Code で/xcode-build-benchmarkを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/benchmark-artifacts.mdbenchmarking-workflow.mdschemas/build-benchmark.schema.jsonscripts/benchmark_builds.py詳細
Xcode ビルドベンチマーク
ビルド時間の最適化を試みる前に、再現可能な Xcode ビルドのベースラインを作成するには、このスキルを使用します。
基本ルール
- 変更を推奨する前に測定します。
- クリーンビルドとインクリメンタルビルドは別々に記録します。
- 実行ごとに、コマンド、デスティネーション、構成、スキーム、ウォームアップのルールを統一します。
- タイムスタンプ付きの JSON アーティファクトを
.build-benchmark/に書き出します。 - ベンチマークの一環としてプロジェクトファイルを変更してはいけません。
収集する入力情報
以下を確認するか、推定します。
- ワークスペースまたはプロジェクトのパス
- スキーム
- 構成
- デスティネーション
- ユーザーがシミュレーターとデバイスのどちらの数値を希望しているか
- カスタムの
DerivedDataパスが必要かどうか
クリーンビルドとインクリメンタルビルドの両方に問題がある場合は、両方をベンチマークします。これがデフォルトです。
ワークツリーに関する考慮事項
git worktree 内でベンチマークを実行する場合、gitignore 対象のディレクトリ(例:__Snapshots__)を参照する exclude: パスがある SPM パッケージは、xcodebuild -resolvePackageDependencies をクラッシュさせます。ビルドを実行する前に、これらの不足しているディレクトリを作成してください。
デフォルトのワークフロー
- ビルドコマンドを標準化し、キャッシュやモジュールの再利用に影響するフラグをすべて記録します。
- 必要に応じてウォームアップビルドを 1 回実行し、コマンドが成功することを確認します。
- クリーンビルドを 3 回実行します。
COMPILATION_CACHE_ENABLE_CACHING = YESが検出された場合は、キャッシュ済みクリーンビルドを 3 回実行します。これは、ウォーム状態のコンパイルキャッシュを使ったクリーンビルド時間を測定します。ブランチの切り替え、変更の取得、または「ビルドフォルダをクリーン」の現実的なシナリオです。スクリプトはキャッシュをウォームアップするために 1 回ビルドした後、測定の各実行前に DerivedData を削除します(コンパイルキャッシュは削除しません)。スキップするには--no-cached-cleanを渡します。- ゼロ変更ビルドを 3 回実行します(編集を加えず、ビルド成功直後にビルドします)。これにより、依存関係の計算、プロジェクト記述の転送、ビルド記述の作成、スクリプトフェーズ、コード署名、検証にかかる固定オーバーヘッドの下限を測定します。ゼロ変更ビルドに数秒以上かかる場合は、ビルドごとに回避可能なオーバーヘッドが発生していることを示しています。デフォルトの
benchmark_builds.py呼び出しを使用します(--touch-fileフラグなし)。 - 必要に応じて、ファイルのタッチを伴うインクリメンタルビルドを 3 回実行し、実際の編集と再ビルドのループを測定します。各ビルドの前に代表的なソースファイルをタッチするには、
--touch-file path/to/SomeFile.swiftを使用します。 - 生の結果と概要を
.build-benchmark/に保存します。 - 最速の 1 回だけでなく、中央値とばらつきを報告します。
推奨するコマンドの実行方法
可能な場合は共有ヘルパーを使用します。
python3 scripts/benchmark_builds.py \
--workspace App.xcworkspace \
--scheme MyApp \
--configuration Debug \
--destination "platform=iOS Simulator,name=iPhone 16" \
--output-dir .build-benchmark
ヘルパースクリプトを使用できない場合は、-showBuildTimingSummary を指定した同等の xcodebuild コマンドを実行し、生の出力を保持します。
必須の出力
以下を返します。
- クリーンビルドの中央値、最小値、最大値
- キャッシュ済みクリーンビルドの中央値、最小値、最大値(
COMPILATION_CACHE_ENABLE_CACHINGが有効な場合) - ゼロ変更ビルドの中央値、最小値、最大値(固定オーバーヘッドの下限)
- インクリメンタルビルドの中央値、最小値、最大値(
--touch-fileを使用した場合) - タイミングサマリーの主なカテゴリ
- 比較に影響する可能性のある環境の詳細
- 保存したアーティファクトのパス
結果にばらつきがある場合はその旨を伝え、より安定した状況での再実行を推奨します。
終了するタイミング
ユーザーがベンチマークのみを依頼した場合は、測定後に終了します。最適化のガイダンスも求めている場合は、関連する専門スキルの SKILL.md を読み、同じプロジェクトのコンテキストにそのワークフローを適用して、アーティファクトを引き継ぎます。
xcode-compilation-analyzerxcode-project-analyzerspm-build-analysisxcode-build-orchestrator:全体のオーケストレーション用
追加リソース
- ベンチマークの仕様については、references/benchmarking-workflow.md を参照してください。
- 共有アーティファクト形式については、references/benchmark-artifacts.md を参照してください。
- JSON スキーマについては、schemas/build-benchmark.schema.json を参照してください。