地域をまたぐ開発・ビルド連携

1台のMacで、
時差を越えて連携

アジア太平洋のメンバーがコードをコミットし、北米のメンバーが成果物を作成。ビルド環境はデータセンターに置いたまま、個人のPCと一緒に稼働時間を終えることはありません。

1台を1契約者だけで利用する専有環境です。仮想マシンではありません。Apple M4搭載の2プラン、5拠点から選べ、365日稼働します。

1日$19.2から。電源、ネットワーク、冷却はデータセンターが管理。プロジェクトのパイプライン、ビルドキュー、リリース権限はチームで設定できます。

継続的インテグレーション

コミットをキューに入れて、夜間もビルド

Xcodeビルドマシンをオフィスからデータセンターへ。pushのたびにタスクを開始できるため、誰かがPCをつけたまま電源につないでおく必要はありません。

再現可能なパイプラインから始める

マシンにセルフホスト型macOS runnerを登録し、リポジトリの運用ルールに沿ってブランチ、テスト対象、成果物のパスを設定します。まず手動でコマンドラインビルドが成功することを確認してから自動実行を設定すれば、環境とCI設定の問題を切り分けやすくなります。

単一アプリの順次ビルドならPush M4 Sから始められます。M4 / 16GB / 256GB SSD。依存関係とDerivedDataのキャッシュを保持して後続タスクで再利用し、複数のタスクが同じビルド出力へ同時に書き込まないようにしてください。

365日稼働により、データセンターでの管理やオフィスの停電に左右されない運用が可能です。ただし、失敗したタスクが自動復旧するわけではありません。runnerの自動起動、再試行、ディスクのクリーンアップ、ログ通知はチームのパイプラインで設定してください。

まずarchiveを検証してからrunnerへ

以下ではプロジェクトディレクトリ内のApp.xcworkspaceとApp schemeを例にしています。実行前に実際の名称へ置き換えてください。

xcodebuild -version

xcodebuild \
  -workspace App.xcworkspace \
  -scheme App \
  -configuration Release \
  -destination 'generic/platform=iOS' \
  -derivedDataPath build/DerivedData \
  -archivePath build/App.xcarchive \
  archive

署名設定は事前に準備してください。このコマンドで生成されるのはarchiveであり、エクスポートやアップロードまで完了するわけではありません。

タイムゾーンをまたぐ連携

時差を活かして、引き継ぎを途切れさせない

アジア太平洋の日中にコミットし、米国東部のノードで北米の日中の成果物作成やリリースを引き継げます。主な操作者に合わせてノードを選び、ビルドタスクはキューで引き継ぎます。

コミット時に入力情報を残す

ブランチ、commit、scheme、Xcodeのバージョン、ビルドパラメーターを記録します。同じcommitから作業を続けられるため、「さっき実行したのはどのバージョン?」とチャット履歴をたどる必要がありません。

引き継ぎ項目:コミットハッシュ+タスクID

実行時は同時実行を制御

専有環境でも同時実行は無制限ではありません。同じMac上のタスクにはキューや排他ロックを設定し、署名とエクスポートは順番に実行します。プロジェクトごとに作業ディレクトリとキャッシュキーを分けてください。

引き継ぎ項目:キューの状態+ログのパス

引き継ぎ時に出力を確認

北米の担当者はテスト結果、archive、エクスポートログを確認してからリリースを承認します。タスクが失敗した場合は実行状況とエラーログを保存し、すぐにキャッシュを消して再実行しないでください。

引き継ぎ項目:成果物の場所+承認結果

接続の近さとタスク実行を分けて考える

ノードはシンガポール、東京、ソウル、香港、米国東部から選べます。VNC操作では操作者の所在地を優先し、自動ビルドではリポジトリや依存関係の取得先へのネットワーク経路も考慮してください。タイムゾーンはシフト計画の目安であり、接続遅延を保証するものではありません。大陸をまたいで頻繁に操作する場合は、各地域のチームに合わせてマシンを用意し、runnerのラベルを統一すると便利です。

署名と成果物の受け渡し

リリース工程を1台のマシンに集約

App Store向けのarchive、署名、アップロードを固定のビルド環境で実行します。環境の移行を減らし、署名資産を各メンバーのPCへコピーせずに済みます。

  1. 01

    ツールチェーンを固定

    リリースブランチでXcodeのパスを指定し、SDKと依存関係のロックファイルを記録します。操作用デスクトップで前回選んだバージョンに頼らず、ビルドログに実際に使用したツールチェーンを出力してください。

  2. 02

    署名資産を集約

    証明書とプロビジョニングプロファイルをリリース用マシンにまとめ、最小限の権限でキーチェーンを設定します。パスワードはCIの保護された変数から渡し、リポジトリ、コマンド出力、公開ログには記載しないでください。

  3. 03

    アーカイブとエクスポートを分ける

    まずxcarchiveを保存し、チームでレビュー済みのExportOptions設定を使ってエクスポートします。アップロードは認証と承認を別途設定し、コンパイル、署名、アップロードの失敗を切り分けやすくします。

  4. 04

    納品記録を保存

    バージョン、コミットハッシュ、ビルドログ、成果物を関連付けます。署名資産の使用場所を必要最小限にし、チーム管理の安全な場所に暗号化バックアップを保管して、単一障害点を避けてください。

クロスプラットフォーム開発

複数ターゲットのビルドではメモリに余裕を

FlutterやReact NativeのiOSビルドにもmacOSのツールチェーンが必要です。ネイティブ依存関係、Pods、Xcodeのキャッシュをマシンに保持すれば、都度環境を構築する手間を減らせます。

Push M4 S・順次実行

M4 / 16GB / 256GB SSD

単一アプリの日常的なCI、単一のリリースキュー、クロスプラットフォームプロジェクトの安定した成果物生成の検証に適しています。ビルド、シミュレーター、その他のプロセスでマシンのメモリを共有するため、まずは順次実行し、ピーク時の使用量を確認してからタスクを増やしてください。

依存関係のロックファイルを保持し、ブランチごとにキャッシュキーを設定します。過去の成果物はチームの成果物ストレージへ移し、ローカルディスクをアーカイブで圧迫しないようにしてください。

Push M4 L・複数ターゲット向け

M4 / 24GB / 512GB SSD

複数ターゲットのarchive、Flutter / React Nativeの混在ビルド、より多くの依存関係やツールチェーンを保持するプロジェクトに適しています。24GBのメモリは並列タスクに余裕をもたらしますが、同時実行数は実際のプロジェクトで検証してください。

ビルド時間、メモリ負荷、ディスク使用量をそれぞれ記録してください。ボトルネックが地域間のダウンロードや署名のロック待ちなら、メモリを増やしても直接解決しません。まずキャッシュとキューを見直しましょう。

複数バージョンのXcode、依存関係のキャッシュ、archiveが増え続ける場合は、+1TB SSDまたは+2TB SSDの追加を検討できます。ストレージ拡張で増えるのは容量であり、ユニファイドメモリではありません。使用量の内訳を確認してから決めてください。

Apple Siliconでの実験

空き時間に小規模な推論を実行

同じクラウドMacでローカルモデルの推論、スクリプトの検証、小規模なテストも実行できます。モデルがユニファイドメモリに収まることを確認し、リリースタスクと時間を分けて実行してください。

モデルファイル以外のメモリも考慮

ユニファイドメモリはmacOS、推論フレームワーク、コンテキストキャッシュ、その他のプロセスでも使用します。モデルファイルのサイズは実行時のメモリ使用量と同じではありません。短い入力で試してから、コンテキストやバッチサイズを段階的に増やしてください。

記録項目:モデルのバージョン、量子化方式、ピークメモリ

テスト条件を結果に記録

フレームワークのバージョン、入力サンプル、生成パラメーターを固定してから、実行時間と出力を比較します。16GBと24GBのどちらを選ぶかは、対象タスクを安定して実行できるかで判断してください。モデル規模や速度を一律に決めつけることはできません。

記録項目:入力の長さ、実行パラメーター、実行時間

署名・リリース中は実験を避ける

推論とXcodeのビルドは計算資源とメモリを取り合います。リリース時は実験キューを停止し、実験スクリプトには専用のディレクトリと権限を設定して、リリース用キーチェーンにはアクセスさせないでください。長時間のタスクは適宜結果を保存します。

記録項目:タスクの優先度、停止条件、結果の保存先

macOSとApple Silicon環境が必要な検証に適しており、小規模な実験は大規模な学習とは異なります。まず1日単位でレンタルして実際のワークロードを試し、その後に継続利用を検討できます。

チームの引き継ぎルール

利用目的を実行可能なルールにする

以下はタスクの進め方を示す2つの役割別シナリオです。実在の顧客評価や接続性能の実測結果を示すものではありません。

「Fastlaneは固定のマシンに置いています。担当者が誰でも、同じビルド記録を確認できます。誰かがPCを開くのを待つ必要はありません。」
運用ルール:リリーススクリプトをリポジトリで管理し、タスクIDをarchiveとエクスポートログに紐付ける。
モバイル開発責任者・シナリオ例
「まずテスト担当者のネットワークからリモートデスクトップ接続を確認して、ノードを決めます。自動テストはキューで実行し、人の確認が必要なときだけデスクトップを操作します。」
運用ルール:実際に操作するネットワークで接続を確認し、画面操作による確認と一括テストを分ける。
QAマネージャー・シナリオ例

用途に合わせてプランを選ぶ

単一アプリの順次ビルドは16GBから。複数ターゲットや混在ビルドには24GBを検討してください。主な作業拠点のノードを選び、まず最初のパイプラインを動かしてみましょう。

専有の物理Mac miniを1日$19.2からレンタル。実際の利用可否はコンソールに表示される最新状況をご確認ください。