CLAUDE LABEN
TEACHERS — AnthropicがClaude for Teachersを公開。米国K-12の認証済み教員に、プレミアム機能と授業向けスキル、全50州の学習指導基準に沿ったカリキュラム連携を無償提供しますADMIN — Claude Enterprise全組織でAdmin APIがベータ提供に。メンバーと招待の操作はベータヘッダー不要、グループとカスタムロールは専用ヘッダーが必要ですM365 — Microsoft 365コネクタに書き込みツールが追加。メールの下書き・送信・整理、カレンダー操作、OneDriveとSharePointのファイル作成・更新まで任せられますMCP — --mcp-configや.mcp.jsonのサーバ単位request_timeout_msが無視され、新規セッションで60秒既定のままタイムアウトする不具合が修正されましたSUBAGENT — --forward-subagent-textとCLAUDE_CODE_FORWARD_SUBAGENT_TEXTが追加。サブエージェントのテキストと思考をstream-json出力に含められますDEADLINE — 7月24日にOpus 4.7のfastモードが削除されます。残り7日、speed: "fast" はエラーになるためOpus 4.8への移行をご確認くださいTEACHERS — AnthropicがClaude for Teachersを公開。米国K-12の認証済み教員に、プレミアム機能と授業向けスキル、全50州の学習指導基準に沿ったカリキュラム連携を無償提供しますADMIN — Claude Enterprise全組織でAdmin APIがベータ提供に。メンバーと招待の操作はベータヘッダー不要、グループとカスタムロールは専用ヘッダーが必要ですM365 — Microsoft 365コネクタに書き込みツールが追加。メールの下書き・送信・整理、カレンダー操作、OneDriveとSharePointのファイル作成・更新まで任せられますMCP — --mcp-configや.mcp.jsonのサーバ単位request_timeout_msが無視され、新規セッションで60秒既定のままタイムアウトする不具合が修正されましたSUBAGENT — --forward-subagent-textとCLAUDE_CODE_FORWARD_SUBAGENT_TEXTが追加。サブエージェントのテキストと思考をstream-json出力に含められますDEADLINE — 7月24日にOpus 4.7のfastモードが削除されます。残り7日、speed: "fast" はエラーになるためOpus 4.8への移行をご確認ください
記事一覧/Claude Code
Claude Code/2026-05-28中級

Claude Code × Xcode Cloud — ci_scripts と TestFlight 自動配信を 1 週間で動かすまでの実装メモ

Fastlane で長く回してきた個人アプリの CI を Xcode Cloud に移行した実装メモです。ci_scripts/ の3つのフックスクリプト、TestFlight 自動配信、dSYM アップロードまで、Claude Code との具体的なやり取りを残しました。

Claude Code197Xcode CloudCI/CD18iOS24TestFlight個人開発110

プレミアム記事

アーティスト・クリエイターの廣川政樹です。普段は壁紙や癒し系の iOS アプリを2014年から個人で運用しています。累計ダウンロードが5,000万を越えたあたりから、CI まわりに少しずつ手を入れる時間が取れなくなり、Fastlane と GitHub Actions の組み合わせを「動いているからとりあえずそのまま」で長く回していました。

ところが今年に入って、開発機を Apple Silicon に移したタイミングで Fastlane match の証明書同期が不安定になり、TestFlight への配信が週に1回は止まる状態になってしまいました。原因の半分は私のローカル環境、もう半分は GitHub Actions の macOS runner 側の更新サイクルです。個人で運用している以上、平日朝7時に Slack 通知で起こされる運用は持続可能ではありません。

そこで2026年5月のゴールデンウィーク明けに、思い切って Xcode Cloud へ全面移行しました。期間は1週間。判断と実装の伴走役として Claude Code を CLI から呼び続け、ci_scripts/ の3つのフックを書き上げ、TestFlight 自動配信と Crashlytics dSYM アップロードまでを動かすまでの記録です。Xcode Cloud に踏み切るか迷っている個人開発者の方の参考になればと思い、詰まった落とし穴と回避手順を中心に残します。

なぜ今あらためて Xcode Cloud か

Xcode Cloud を選んだ理由は3つあります。

第一に、Apple の証明書まわりが「自動署名」のまま完結する点です。Fastlane match を使っていると、署名証明書を専用リポジトリに暗号化して保管し、CI 上で復号する手順を組む必要があります。動いている間は意識しなくて済むのですが、Apple Developer ID の更新や Provisioning Profile の自動再生成で年に何度か止まるのが定常運用の負担でした。Xcode Cloud は App Store Connect 上のチーム証明書を直接利用するため、この経路自体が消えます。

第二に、Apple Developer Program に含まれる無料枠(25時間/月のコンピュート時間)で個人アプリ4本の運用が現実的に収まる点です。私の運用では、ビルド1本あたり平均6〜10分、週20本前後のビルドが発生します。GitHub Actions の macOS runner は同等の処理に1本あたり12〜18分かかっていたため、コンピュート時間ベースでも収まる計算でした。

第三に、TestFlight 配信が Xcode Cloud のワークフロー定義から直接トリガーできる点です。Fastlane の pilot を呼ぶ経路に比べてエラー切り分けが減り、upload_to_testflight で詰まる場面が物理的になくなります。

一方で、Xcode Cloud は「自由度の高い CI 全般」ではありません。GitHub Actions や Bitrise のように任意のコマンドを長時間流すには向きません。逆に言えば、iOS/macOS のビルド・テスト・TestFlight 配信に用途を絞ったときの手数が極端に少ない CI です。私のように「個人運用で iOS アプリ4本だけを安定して動かしたい」というスコープにはよく合います。

ci_scripts/ という仕組みの正体

Xcode Cloud のフックポイントは、Xcode プロジェクトの直下に置く ci_scripts/ ディレクトリで設定します。ここに3つのスクリプトを置くと、Xcode Cloud が次のタイミングで自動的に呼び出します。

  • ci_post_clone.sh — リポジトリの clone 直後(依存解決の前)
  • ci_pre_xcodebuild.shxcodebuild 実行の直前
  • ci_post_xcodebuild.shxcodebuild 完了の直後(成功/失敗どちらでも)

スクリプトはすべて bash で書き、シェバン #!/bin/sh -e と実行権限が必要です。失敗するとビルド自体が止まる仕様なので、想定外の終了コードを返さないよう注意します。

最初の挫折ポイントは、ローカルでこのスクリプトを試す方法がない点です。Xcode Cloud は GUI から起動する都合上、xcrun simctl のような対話的なテストが効きません。私は Claude Code に「ci_post_clone.sh を書くから、ローカルの bash で CI_WORKSPACE=$(pwd) bash -e ci_scripts/ci_post_clone.sh として乾式実行できる作りに整えてほしい」と頼みました。すると、Xcode Cloud から渡される環境変数を :- で安全にフォールバックさせる形のテンプレートを返してきました。

#!/bin/sh -e
 
# Xcode Cloud は CI_WORKSPACE をプロジェクトルートに設定する。
# ローカル実行時は呼び出し側で同名変数を渡せばそのまま動く。
WORKSPACE="${CI_WORKSPACE:-$(pwd)}"
cd "$WORKSPACE"
 
echo "[ci_post_clone] workspace=$WORKSPACE"

この「ローカルで CI_WORKSPACE=$(pwd) bash -e ci_scripts/... を流せるか」という基準を最初に決めたことで、その後の試行錯誤がだいぶ楽になりました。

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

この記事の続きを読む

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

この記事で得られること
ci_post_clone.sh / ci_pre_xcodebuild.sh / ci_post_xcodebuild.sh の3スクリプトを Claude Code に書かせる具体的なプロンプトと、実際に動いた完成版を全文掲載しています
Fastlane match から Xcode Cloud の自動署名へ移す際に詰まった3つの落とし穴と、その回避手順を Before/After のコード比較で示しています
TestFlight 自動配信に Crashlytics dSYM アップロードを安全に統合するための ci_post_xcodebuild.sh 完成版と、ビルド時間を 14 分から 6 分まで縮めた工夫を共有しています
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Claude Code2026-07-08
自コードの Required Reason API 申告漏れを Claude Code で棚卸しする
PrivacyInfo.xcprivacy の理由コードは、依存ライブラリだけでなく自分のコードにも必要です。個人開発の壁紙アプリで申告漏れを見つけた経験から、Swift ソースを走査して該当 API と理由コードを突き合わせる Claude Code ワークフローをまとめます。
Claude Code2026-07-06
同意ダイアログより先に広告SDKを初期化していた — Claude Code で ATT と AdMob の順序を直す
起動と同時に広告SDKを開始すると、ATT の同意が取れる前に IDFA が空のまま初期化され、フィルレートは正常なのに計測だけが薄くなります。散らばった初期化順序を Claude Code で洗い出し、ATT の解決を待ってから広告を開始する形へ直した実装を共有します。
Claude Code2026-06-30
新型 iPhone で壁紙がぼやける問題を Claude Code で直す — 端末別解像度の振り分けを安全に増やす
新しい iPhone が出るたびに壁紙アプリで画像がぼやけたり余白が出たりする原因と、散らばった端末分岐を一枚のテーブルに集約して安全に拡張する方法を、Claude Code を使った実際のリファクタリング工程として共有します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →