xcode-compilation-analyzer について
ビルド時間とコンパイラ診断を使って Swift のコンパイルボトルネックを調べるスキルです。コードや設定を承認なしに変更せず、予想される待ち時間への影響に基づいて改善案を優先順位付けします。
主な機能
- 01クリーンビルドと増分ビルドの時間分析
- 02高コストなコンパイル処理とホットスポットの順位付け
- 03遅い式や関数の診断
- 04ソース、モジュール、プロジェクト各層の原因を区別
- 05根拠、影響、承認要件の報告
活用シーン
- 01コンパイル時間を占めるファイルの特定
- 02Swift の型チェック遅延の調査
- 03モジュール生成と計画処理の時間評価
- 04予想待ち時間に基づく修正の優先順位付け
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ avdlee/ xcode-build-optimization-agent-skill --skill xcode-compilation-analyzerインストール後、Claude Code で/xcode-compilation-analyzerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/build-optimization-sources.mdcode-compilation-checks.mdrecommendation-format.mdscripts/diagnose_compilation.py詳細
Xcode コンパイル分析
一般的なプロジェクト設定ではなく、コンパイル時間がボトルネックと思われる場合にこのスキルを使用します。
基本ルール
- まず証拠を確認します。できれば最近の
.build-benchmark/アーティファクト、または生のタイミングサマリー出力を使用します。 - 調査中は、永続的なプロジェクト編集よりも分析専用のコンパイラーフラグを優先します。
- 累積コンパイル時間ではなく、予想される実時間への影響に基づいて調査結果を順位付けします。コンパイルタスクが高度に並列化されている場合(コンパイルカテゴリの合計が実時間の中央値を大幅に上回る場合)、個々のホットスポットを修正しても並列処理の効率が向上するだけで、ビルドの待ち時間は短縮されない可能性があることを明記します。
- 証拠から直列的なボトルネックではなく並列化された処理が示される場合、推奨事項には「ビルド時間を短縮」ではなく「コンパイラーの作業量を削減(並列)」と記載します。
- 開発者の明示的な承認なしに、ソースやビルド設定を編集しないでください。
調査対象
- クリーンビルドとインクリメンタルビルドの
Build Timing Summary出力 - 実行時間の長い
CompileSwiftSourcesまたはファイル単位のコンパイルタスク SwiftEmitModuleの所要時間。大規模なモジュールでは、1 行の変更後に 60 秒以上かかることがあります。インクリメンタルビルドでこの処理が支配的な場合、そのモジュールは大きすぎるか、マクロが多すぎる可能性があります。Planning Swift moduleの所要時間。インクリメンタルビルドでこのカテゴリが不釣り合いに大きい場合(モジュールあたり最大 30 秒)、予期しない入力の無効化や、マクロに関連する再ビルドの連鎖が発生していることを示します。- 次のフラグを使用したアドホックな実行:
-Xfrontend -warn-long-expression-type-checking=<ms>-Xfrontend -warn-long-function-bodies=<ms>
- 詳細な調査に使用する、より踏み込んだ診断フラグ:
-Xfrontend -debug-time-compilation-- ファイルごとのコンパイル時間を確認し、最も遅いファイルの順位を付けます。-Xfrontend -debug-time-function-bodies-- 関数ごとのコンパイル時間を確認します(フィルターなし。しきい値ベースの警告フラグを補完します)。-Xswiftc -driver-time-compilation-- ドライバーレベルのタイミングを確認し、ドライバーのオーバーヘッドを切り分けます。-Xfrontend -stats-output-dir <path>-- 根本原因分析のため、コンパイル単位ごとの詳細なコンパイラー統計(JSON)を出力します。
- ブリッジ処理の負荷を増大させる、Swift と Objective-C が混在するインターフェース
分析ワークフロー
- 主な問題が、広範なコンパイル量なのか、少数の極端なホットスポットなのかを特定します。
- タイミングサマリーのカテゴリを解析し、コンパイル時間への寄与が大きいものから順位を付けます。
- 診断スクリプトを実行して、型チェックのホットスポットを特定します。
これにより、ミリ秒単位のしきい値を超える関数や式が順位付きで表示されます。診断アーティファクトとソースの調査を併用し、最も負荷の高いファイルから優先的に確認します。python3 scripts/diagnose_compilation.py \ --project App.xcodeproj \ --scheme MyApp \ --configuration Debug \ --destination "platform=iOS Simulator,name=iPhone 16" \ --threshold 100 \ --output-dir .build-benchmark - 証拠を具体的な推奨事項の一覧に結び付けます。
- コードレベルの提案と、プロジェクトレベルまたはモジュールレベルの提案を分けます。
Apple 由来の確認項目
まず、次のパターンを確認します。
- 負荷の高い式で型情報が明示されていない
- 型チェックが難しい複雑な連鎖式やネストされた式
- 具体的なプロトコルではなく
AnyObject型として宣言されたデリゲートプロパティ - Objective-C のブリッジングヘッダーや、生成された Swift-to-Objective-C インターフェースが大きすぎる
- フレームワーク修飾を省略し、モジュールキャッシュの再利用が妨げられているヘッダーインポート
- サブクラス化されていないのに
finalが指定されていないクラス - 内部専用のシンボルに対する過度に広範なアクセス制御(
public/open) - サブビューに分割すべき、モノリシックな SwiftUI の
bodyプロパティ - 中間の型注釈がない、長いメソッドチェーンやクロージャ
レポート形式
推奨事項ごとに、次の項目を含めます。
- 観測された証拠
- 影響を受ける可能性が高いファイルまたはモジュール
- 予想される待ち時間への影響(例:「クリーンビルドが約 2 秒短縮される見込みです」または「並列コンパイルの作業量は減りますが、ビルドの待ち時間は短縮されない可能性があります」)
- 確信度
- 適用前に承認が必要かどうか
証拠からソースではなくプロジェクト設定に原因があると考えられる場合は、xcode-project-analyzer に引き継ぎ、同じプロジェクトの状況に対して、その SKILL.md を読み、ワークフローを適用します。
推奨する対処法
- ビルド設定の永続的な変更を推奨する前に、ビルドコマンドで一時的にフラグを追加する方法を提案します。
- 巨大なビュー構築処理、クロージャー、または結果ビルダー式は、より小さな型付きの単位に分割することを優先します。
- コンパイラの探索範囲を狭められる場合は、インポートとプロトコルの型を明示することを推奨します。
- 問題の本質が Swift の構文だけではなく、言語間の境界にある場合は、その点を指摘します。
追加リソース
- 詳細な監査チェックリストについては、references/code-compilation-checks.md を参照してください。
- 推奨事項の共通構成については、references/recommendation-format.md を参照してください。
- ソースの引用については、references/build-optimization-sources.md を参照してください。
コメント
Markdown 対応