ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-06-25上級

Xcode Cloud の無料25時間が月末に静かに尽きるとき — コンピュート時間を計測して守る運用メモ

Xcode Cloud の無料コンピュート枠が月末に枯渇し、ビルドがキューで待たされる前に。消費の内訳を App Store Connect API で実測し、不要ビルドの早期停止・テスト分割でCI時間を運用で守る実践メモです。

xcode-cloudios30cicd8antigravity392app-dev40compute-hourstestflight2

プレミアム記事

月末に「ビルドが順番待ちで動かない」と気づく

ある月の25日あたり、release ブランチにプッシュしたのに Xcode Cloud のビルドが一向に始まらない、という状態に出くわしたことがあります。エラーは出ていません。ワークフローは緑のまま、ただ Queued で止まっている。原因は単純で、その月の無料コンピュート枠(25時間)を使い切っていたためでした。

Xcode Cloud の厄介なところは、枠を超えても派手に警告してくれない点です。CI は今まで通り通っているように見えるのに、配信だけが遅延し、月初になると何事もなかったように動き出します。請求を有効にしていれば、超過分が静かに加算されていきます。テストが落ちて気づく失敗より、こちらの「気づかない消費」のほうが個人開発では効いてきます。

この記事は、コンピュート時間がどこで消えているのかを実測し、無駄を削り、枠を月内で守るための運用に絞って書きます。ワークフローの初期セットアップそのものではなく、「動いている CI のコストを見える化して制御する」話です。

まず消費の内訳を測る — 体感ではなく数字で

削減の前に計測です。Xcode Cloud のダッシュボードは総使用時間こそ見せてくれますが、「どのワークフローが・どのブランチで・何分使ったか」までは追いにくい。ここは App Store Connect API の ciBuildRuns を引いて、自分で集計したほうが早いです。

API は JWT 認証で、App Store Connect の Users and Access から発行した API キー(Issuer ID・Key ID・.p8 秘密鍵)を使います。鍵はリポジトリに含めず、ローカルか CI のシークレットに置きます。

#!/usr/bin/env bash
# ci_usage.sh — 直近のビルド実行を取得し、ワークフロー別に所要時間を集計する
# 必要: jq, openssl。ASC_KEY_ID / ASC_ISSUER_ID / ASC_P8_PATH を環境変数で渡す
 
set -euo pipefail
 
KEY_ID="${ASC_KEY_ID:?}"
ISSUER_ID="${ASC_ISSUER_ID:?}"
P8_PATH="${ASC_P8_PATH:?}"     # 例: ~/.private_keys/AuthKey_XXXX.p8(コミット禁止)
 
# --- JWT 生成(有効期限は短く) ---
now=$(date +%s); exp=$((now + 600))
header=$(printf '{"alg":"ES256","kid":"%s","typ":"JWT"}' "$KEY_ID" | openssl base64 -A | tr '+/' '-_' | tr -d '=')
payload=$(printf '{"iss":"%s","iat":%d,"exp":%d,"aud":"appstoreconnect-v1"}' "$ISSUER_ID" "$now" "$exp" | openssl base64 -A | tr '+/' '-_' | tr -d '=')
sig=$(printf '%s.%s' "$header" "$payload" | openssl dgst -sha256 -sign "$P8_PATH" | openssl base64 -A | tr '+/' '-_' | tr -d '=')
JWT="${header}.${payload}.${sig}"
 
# --- 直近100件のビルド実行を取得 ---
curl -s "https://api.appstoreconnect.apple.com/v1/ciBuildRuns?limit=100&fields[ciBuildRuns]=createdDate,startedDate,finishedDate,executionProgress,completionStatus" \
  -H "Authorization: Bearer ${JWT}" \
| jq -r '
  .data[]
  | select(.attributes.finishedDate != null)
  | { started: .attributes.startedDate, finished: .attributes.finishedDate, status: .attributes.completionStatus }
  | "\(.status)\t\(.started)\t\(.finished)"
'

ここで得られる startedDatefinishedDate の差は「壁時計時間」であって、Apple が課金する「コンピュート分」と完全一致はしません(並列実行や課金単位の丸めで前後します)。それでも、どのワークフローが長時間枠を占めているかの相対比較には十分使えます。私は週に一度この出力を眺めて、突出して長いランの原因(多くは UI テストの再試行か依存解決の遅延)を潰すようにしています。実測すると、1回のフル UIテスト走行が10〜14分、依存解決が混むと追加で3〜5分という具合に、数字で見ると削るべき場所が一目で分かります。

集計を一段進めるなら、ciBuildRuns から builds をたどってワークフロー名で束ね、合計分をワークフロー別に出します。最初は完璧な集計を作り込むより、「いちばん時間を食っているワークフローを1つ特定する」ところまでで十分です。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
Xcode Cloud のコンピュート時間がどのワークフローで溶けているかを App Store Connect API の ciBuildRuns から実測する手順
ci_post_clone.sh による無駄ビルドの早期停止と、テストプラン分割・条件付きトリガーで消費を削る具体策
無料25時間枠を月内で使い切らないための監視と、有料化を判断する損益分岐の考え方
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-04-04
AntigravityでTestFlightベータ配信を完全自動化する実践ガイド
Antigravity × Fastlane × GitHub Actions でTestFlightへの自動配信パイプラインを構築。コード署名・ビルド・テスター管理まで、iOSアプリのベータ配信フローを完全自動化する実践ガイドです。
アプリ開発2026-06-15
新 iPhone が出るたびに三項演算子を増やすのをやめる — 解像度分岐をテーブル駆動に寄せた設計
iPhone Air・17 Pro など新解像度が増えるたびに、画面サイズ判定の三項演算子を29箇所も書き足していました。端末ではなくプロファイルで考えるテーブル駆動の設計に寄せ直し、次の端末追加を1行で終わらせるまでの具体的な手順を、壁紙アプリの実装コードとともにまとめます。
アプリ開発2026-05-20
Localizable.xcstrings の8言語翻訳を Antigravity に2週間任せた運用メモ
Localizable.xcstrings に追加した新規キーの8言語翻訳を、Antigravity に2週間下書きさせて運用した記録です。任せた範囲と最終判断に残した範囲、想定外だった挙動、既訳資産との突き合わせ方を率直に書きました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →