mcpField
C
compare-builds

compare-builds

github.com/tuist開発35300 回インストール31 週間前に更新
リポジトリ

compare-builds について

compare-buildsは、Tuistのビルド結果を分析する開発者向けのスキルです。基準と比較対象の所要時間、ステータス、キャッシュ、環境の違いを調べ、退行や改善を特定します。

主な機能

  1. 012つのビルド情報の特定と取得
  2. 02ビルド時間とステータスの比較
  3. 03キャッシュヒットとタスクの分析
  4. 04ターゲットと問題の詳細確認
  5. 05差異に基づく対応案の提示

活用シーン

  1. 01ビルド時間の悪化の調査
  2. 02失敗や警告の変化の確認
  3. 03キャッシュヒット率低下の診断
  4. 04比較に影響する環境差の評価

インストール

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

$npx skills add https://github.com/tuist/agent-skills --skill compare-builds

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

詳細

ビルドを比較する

クイックスタート

通常は、2 つのビルド識別子(ID、ダッシュボード URL、またはブランチ名)が渡されます。以下の手順に従ってください。

  1. tuist build list --json を実行して、各ブランチのビルドを確認します。
  2. ベースビルドとヘッドビルドの両方について、tuist build show <build-id> --json を実行します。
  3. サブリソースの詳細を取得します。ターゲット(tuist build xcode target list <id> --json)、問題(tuist build xcode issue list <id> --json)、キャッシュタスク(tuist build xcode cache-task list <id> --json)を確認します。
  4. 所要時間、ステータス、キャッシュヒット率、その他のメトリクスを比較します。
  5. 退行、改善点、推奨事項をまとめます。

識別子が 1 つだけ指定された場合は、プロジェクトのデフォルトブランチをベースラインとして使用します。

ステップ 1:ビルドを特定する

base/head がビルド ID またはダッシュボード URL の場合

それぞれを直接取得します。

tuist build show <base-id> --json
tuist build show <head-id> --json
base/head がブランチ名の場合

各ブランチの最近のビルドを一覧表示し、最新のものを選びます。

tuist build list --git-branch <base-branch> --json --page-size 1
tuist build list --git-branch <head-branch> --json --page-size 1

その後、tuist build show <id> --json で詳細を取得します。

デフォルト
  • base が指定されていない場合は、プロジェクトのデフォルトブランチ(通常は main)を使用します。
  • head が指定されていない場合は、git rev-parse --abbrev-ref HEAD で現在の Git ブランチを検出します。

ステップ 2:サブリソースの詳細を取得する

tuist build show <id> --json で両方のビルドを取得した後、サブリソースを詳しく確認して比較します。

ターゲットを比較する
tuist build xcode target list <base-id> --json
tuist build xcode target list <head-id> --json

ステータスが変わったターゲット(成功から失敗など)や、所要時間が大幅に変わったターゲットを確認します。

問題を比較する
tuist build xcode issue list <base-id> --json
tuist build xcode issue list <head-id> --json

ヘッドビルドで新たに発生した警告やエラーを確認します。

キャッシュタスクを比較する
tuist build xcode cache-task list <base-id> --json
tuist build xcode cache-task list <head-id> --json

キャッシュミスまたはキャッシュヒットが発生した具体的なターゲットと、ビルド間でその状況が変わったかどうかを特定します。

ステップ 3:トップレベルのメトリクスを比較する

両方のビルドを取得した後、以下を比較します。

メトリクス確認する内容
durationhead が base より 10% を超えて遅い場合は指摘します
statusbase が成功し、head が失敗した場合は指摘します
cacheable_tasks_countタスク数が変わったかを記録します
cacheable_task_local_hits_countローカルヒット数を比較します
cacheable_task_remote_hits_countリモートヒット数を比較します
キャッシュヒット率(local_hits + remote_hits) / cacheable_tasks_count * 100
category一方が clean、もう一方が incremental かどうかを確認します(その場合、所要時間の比較はあまり意味がありません)
scheme / configuration公平に比較できるよう、両方のビルドで同じスキームと構成が使われていることを確認します

キャッシュミスの差分を計算します:base_misses - head_misses。正の値は head のミスが少ない(改善)ことを示します。負の値は退行を示します。

ステップ 4:所要時間の退行を調査する

ヘッドビルドが大幅に遅い場合:

  1. category が異なるか確認します(クリーンビルドとインクリメンタルビルドは直接比較できません)。
  2. キャッシュヒット率が低下していないか確認します。低下している場合は、ビルド時間が長くなった理由を説明できる可能性があります。
  3. 両方がインクリメンタルビルドで、キャッシュ率も同程度の場合、退行の原因はコンパイル時間にある可能性が高いです。

ステップ 5:キャッシュの変化を調査する

キャッシュ統計を比較します。

  • ヒット率が低下:依存関係の変更、ビルド設定の変更、Xcode バージョンの更新などが考えられます。
  • ヒット率が改善:キャッシュのウォームアップが適切になったか、ソースの変更が減ったことが原因と考えられます。
  • タスク数が変化:新しいターゲットが追加または削除されています。

ステップ 6:ビルドのコンテキストを確認する

環境の詳細を比較します。

  • xcode_version と macos_version:バージョンの違いは、ビルド時間やキャッシュの有効性に影響する可能性があります。
  • is_ci:CI ビルドとローカルビルドでは、パフォーマンス特性が異なる場合があります。
  • git_branch と git_commit_sha:ビルドが想定したコミットから作成されていることを確認します。

まとめの形式

以下を含めてまとめます。

  1. 全体的な評価:ベースと比較して、改善、悪化、または中立。
  2. 所要時間:絶対値と変化率。
  3. キャッシュヒット率:ヒット率の変化とその説明。
  4. ステータス:ステータスの変化(合格から失敗、またはその逆)。
  5. 環境:比較可能性に影響する環境の違いを記載します。
  6. 推奨事項:調査結果に基づく、実行可能な次のステップ。

例:

Build Comparison: base (abc123 on main) vs head (def456 on feature-x)

Duration: 45.2s -> 62.8s (+39%) -- REGRESSION
Cache hit rate: 85% -> 72% (-13%) -- 8 new cache misses
Status: success -> success

Root cause: Cache hit rate dropped due to 8 targets with invalidated caches.
The dependency hash changed for FeatureModule, cascading to 7 downstream targets.

Recommendations:
- Investigate why FeatureModule's cache was invalidated
- Consider splitting large targets to reduce cascade impact

完了チェックリスト

  • ベースとヘッドの両方のビルドを解決しました
  • サブリソースの詳細(ターゲット、イシュー、キャッシュタスク)を取得しました
  • 期間、キャッシュ、ステータスの指標を比較しました
  • リグレッションの根本原因を特定しました
  • 実行可能な推奨事項を提示しました

コメント