spm-build-analysis
Swift Package Managerの依存関係、パッケージプラグイン、モジュールのバリアント構成、およびXcodeビルドを遅延させるCIビルドのオーバーヘッドを分析します。SPMの処理が遅い、パッケージの解決に時間がかかる、ビルドプラグインのオーバーヘッドが大きい、設定のズレによる重複モジュールビルド、モジュール間の循環依存、肥大化したモジュールの分割、またはモジュール化のベストプラクティスについて開発者が懸念している場合に活用してください。
description の原文を見る
Analyze Swift Package Manager dependencies, package plugins, module variants, and CI-oriented build overhead that slow Xcode builds. Use when a developer suspects packages, plugins, or dependency graph shape are hurting clean or incremental build performance, mentions SPM slowness, package resolution time, build plugin overhead, duplicate module builds from configuration drift, circular dependencies between modules, oversized modules needing splitting, or modularization best practices.
SKILL.md 本文
SPM ビルド分析
パッケージ構造、プラグイン、または依存設定が Xcode のビルド遅延の原因になっていると思われる場合に、このスキルを使用します。
コアルール
- パッケージ分析は、依存関係を置き換えるマンデートではなく、まず証拠収集として扱う。
- パッケージグラフの問題とプロジェクト設定の問題を分離する。
- 明示的な承認がない限り、パッケージマニフェストや依存関係のソースを書き直さない。
検査対象
Package.swiftとPackage.resolved- ローカルパッケージと リモートパッケージ
- パッケージプラグインとビルドツールの使用
- バイナリターゲットのフットプリント
- 依存関係のレイヤリング、重複インポート、および潜在的な循環参照
- パッケージ関連の処理を示すビルドログまたはタイミングサマリー
推奨する前の確認
推奨事項にローカルパッケージを含める前に、それがプロジェクトの依存グラフに実際に含まれていることを確認します。Vendor/ ディレクトリに含まれるパッケージが、ターゲットにリンクされていない場合があります。
project.pbxprojで、パッケージパスを参照するXCLocalSwiftPackageReferenceエントリをチェックします。XCSwiftPackageProductDependencyエントリをチェックして、パッケージのプロダクトが少なくとも 1 つのターゲットにリンクされていることを確認します。- ローカルパッケージがディスク上に存在するが、プロジェクトで参照されていない場合は、ビルド時間の推奨事項に含めないでください。
ブランチ追跡依存関係のバージョンピンを推奨する場合:
- ヘルパースクリプトを使用して、ブランチピンされたすべての依存関係を一度にスキャンします:
このコマンドは各ブランチピンパッケージに対してpython3 scripts/check_spm_pins.py --project App.xcodeprojgit ls-remote --tagsをチェックし、ピンに使用できるタグがあるパッケージを報告します。 - タグが存在しない場合は、決定論性のために特定のコミットリビジョンハッシュへのピンを推奨する代わりに使用します。
- アップストリームに単純にタグがないためにブランチピンされているパッケージと、タグがあるがブランチを意図的に追跡しているパッケージを区別します。
焦点領域
- パッケージグラフの形状と変更がどれだけダウンストリームの処理をトリガーするか
- ローカル開発と CI 中のプラグインオーバーヘッド
- クリーン環境で表示されるチェックアウトまたはフェッチコストの信号
- 重複モジュールビルドを強制する設定ドリフト
- 依存関係を共有しながら異なるマクロやオプションを使用するパッケージターゲットからのリスク
- 機能が互いに依存するのではなく共有下位レイヤーに依存する依存関係の方向違反
- モジュール間の循環依存関係 (共有コントラクトをプロトコルモジュールに抽出)
- 増分リビルドのスコープを広げる大規模モジュール (200+ ファイル)
@_exported importを使用するアンブレラモジュールが隠れた依存チェーンを作成- ビルド並列化をブロックするインターフェース/実装分離の欠落
- テストターゲットが、テスト対象のモジュールではなくアプリターゲットに依存している
- Swift マクロリビルドカスケード: Swift マクロの多用 (例: TCA、swift-syntax ベースのライブラリ) により、些細なソースコード変更がマクロ展開によってダウンストリームモジュールを無効化し、ほぼフルリビルドにカスケードする
swift-syntaxがプリビルトバイナリがない場合にユニバーサルビルド (すべてのアーキテクチャ) を行い、クリーンビルドオーバーヘッドを大きく追加する- マルチプラットフォームビルド乗算: セカンダリプラットフォームターゲット (例: watchOS) を追加すると、共有 SPM パッケージが複数回ビルドされる可能性があり (例: iOS arm64、iOS x86_64、watchOS arm64)、
SwiftCompile、SwiftEmitModule、およびScanDependenciesタスクが増加する
モジュール型 SDK 移行の注意点
依存関係をモノリシックターゲットからモジュール型マルチターゲット SDK に移行する場合 (例えば、1 つのアンブレラライブラリを分離した Core、RUM、Logs、Trace モジュールに置き換える)、ビルド時間は自動的には短縮されません。モジュール型ターゲットは、各ターゲットが独立してコンパイル、スキャン、およびモジュール発行される必要があるため、SwiftCompile、SwiftEmitModule、および ScanDependencies タスク数を増加させます。ビルド時間のトレードオフは、プロジェクトの並列化ヘッドルームと、実際に必要なモジュール型ターゲット数に依存します。
モジュール型 SDK 移行を検討する場合:
- 移行前後の合計
SwiftCompileタスク数を比較します。 - ビルド速度の移行を推奨する前に、両方の設定をベンチマークします。
- 動機が API サーフェス削減 (使用するもののみをインポート) の場合、ビルド時間は横ばいまたは増加する可能性がありますが、インポートの衛生が改善されることに注意してください。
- プロジェクトが使用していないモノリシック SDK の大部分を現在コンパイルしており、モジュール型代替案がそれらの未使用部分を完全にスキップできる場合のみ、ビルド速度のモジュール型 SDK 移行を推奨してください。
明示的モジュール依存関係の視点
同じモジュールがタイミング出力に複数回表示される場合は、異なるパッケージまたはターゲットのオプションが追加のモジュールバリアントを強制しているかどうかを調査します。均一なオプションは、少量のソースコードを削減することより重要なことがよくあります。
レポート形式
各検出事項について、以下を含めます:
- 証拠
- 影響を受けるパッケージまたはプラグイン
- クリーンビルド対増分ビルドへの可能性のある影響
- 関連する場合は CI への影響
- 推定される影響
- 承認要件
主な問題がパッケージ関連でない場合は、対象スキルの SKILL.md を読み、同じプロジェクトコンテキストにそのワークフローを適用することで、 または xcode-project-analyzer に引き継ぎます。xcode-compilation-analyzer
追加リソース
- 詳細な監査チェックリストは、
references/spm-analysis-checks.mdを参照してください - 共有推奨フォーマットは、
references/recommendation-format.mdを参照してください - ソース引用は、
references/build-optimization-sources.mdを参照してください
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- avdlee
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/avdlee/xcode-build-optimization-agent-skill / ライセンス: MIT
関連スキル
superpowers-streamer-cli
SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。
catc-client-ops
Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。
ci-cd-and-automation
CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。
shipping-and-launch
本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。
linear-release-setup
Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。
tracking-application-response-times
API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。