チームのビルド環境を整える

CIワークロードに合うノードを選ぶ

日常の単一アプリCIからUnityビルドまで、2種類のモデルで対応。

まず、毎日実行するタスクか、リリース時だけ集中するタスクかを見極め、メモリ・キャッシュ・並列実行の要件を確認しましょう。VMFlyはApple Silicon搭載のMac miniを物理マシンごと専有できるサービスです。仮想マシンではなく、1台のノードを1社のお客様に割り当てるため、他の利用者とビルドリソースを奪い合うことはありません。

  • 料金 $20.1/日
  • チップ Apple Silicon M4 / M4 Pro
  • 料金プラン 日 / 週 / 月 / 四半期
日常のビルド · 常設ノード

共有キューからチーム専用ランナーへ

毎日実行する単一アプリのパイプラインなら、まずはGlide M4の月額プランがおすすめです。Apple Silicon M4、メモリ16GB、SSD 256GBを搭載し、料金は$100.7/月。GitHub ActionsのmacOSジョブを自社のrunnerに割り当てれば、共有ホスト上の他ユーザーのジョブが終わるのを待つ必要はありません。

再現可能なワークフローを1つ移行する

安定した結果が得られているビルドパイプラインを1つ選び、コミット、Xcodeのバージョン、依存関係のロックファイル、署名方法を記録します。まずクリーンビルドを成功させてからキャッシュを有効にしましょう。古いキャッシュが環境の違いを覆い隠すことがあります。

  1. ノードにチームのself-hosted runnerをインストールして登録します。
  2. runnerにプロジェクト専用のラベルを設定します(例: vmfly-ios)。あわせて、実行を許可するリポジトリを制限します。
  3. 同じコミットで従来の環境と新しいノードをそれぞれ実行し、テスト結果、アーカイブ設定、成果物を照合します。

ブランチごとのチェック、夜間ビルド、毎日実行する回帰テストに適しています。

専有リソースでも並列実行は無制限ではありません

マシン全体を専有できるため他の利用者とのリソース競合はありませんが、チーム内のジョブにはキュー管理が必要です。移行初日からすべてのジョブを1台に集中させないようにしましょう。

  • まず1つのジョブを実行し、ビルド時のメモリ使用量、ディスク空き容量、キャッシュの増加を確認します。
  • アーカイブとUIテストでラベルを分け、同じ作業ディレクトリへの同時書き込みを避けます。
  • 実際のプロジェクトでメモリ16GBが適切か確認してから、ノードの追加やモデル変更を検討します。

受け入れ確認はジョブが成功したかだけではありません。成果物をチームでダウンロードできること、ログを保持できること、再起動後にrunnerが復旧することも確認しましょう。月額プランは継続利用に適していますが、どのプロジェクトも1か月間ノードを稼働させる必要があるとは限りません。

リリース時の増強 · 日単位で利用

アーカイブとUIテストでノードを使い分ける

リリース週のボトルネックは、数営業日に集中しがちです。Cruise M4 Proを1台、$61.5/日で追加し、Apple Silicon M4 Pro、メモリ64GB、SSD 2TBを活用してUIテストやアーカイブを実行できます。既存ノードでは日常のチェックを続けられるため、短期的なピークに備えてハードウェアを長期購入する必要はありません。

増強前にタスクを切り分ける

1台でアーカイブ、もう1台でテストを実行すれば、リソースの役割分担が明確になります。runnerを増やしても、すべてのタスクが同じ直列処理を待ち続けるなら、リリースまでの時間は自動的には短縮されません。

  • 同じコミットを使い、アーカイブ用とテスト用のジョブをそれぞれ作成します。
  • 成果物の命名規則とアップロード先を決め、異なるブランチの成果物が上書きされないようにします。
  • 環境の初期化手順を記録し、設定ファイルから一時ノードを再構築できるようにします。

まず重要な処理を実測してから並列数を増やしましょう。実測していないビルド速度の向上率は保証できません。

リリース終了前に引き継ぎを完了する

短期ノードの利用終了条件をリリースチェックリストに記載しましょう。最終確認を終え、成果物を回収し、診断ログを保存してからレンタルを終了します。runnerの使用を停止しても、その後の課金が自動で止まるわけではありません。コンソールで契約状況と終了日をご確認ください。

  • 保持するアーカイブ、テストレポート、失敗ログをエクスポートします。
  • コードホスティングサービスから一時runnerの登録を解除します。
  • 一時トークンを無効化し、期限前にデータをバックアップします。
Unity iOS · エクスポートとアーカイブ

IPA生成までを一つのパイプラインに

UnityからのXcodeプロジェクトの出力、依存関係のインストール、署名、IPAのアーカイブは、追跡可能な同一環境で実行しましょう。Cruise M4 Proはメモリ64GB、SSD 2TBを搭載し、大規模プロジェクト、アセットのインポート、ビルドキャッシュに余裕をもたらします。ただし、必要な容量と同時実行数はプロジェクトごとに検証してください。

  1. 01

    エクスポート環境を固定する

    Unity Editorのバージョン、プロジェクトの依存関係、iOSのエクスポート設定を記録します。同じコミットからXcodeプロジェクトを生成し、手元の環境とノードでEditorのバージョンが異ならないようにします。

  2. 02

    署名とアーカイブを確認する

    ビルド対象、ビルド設定、プロビジョニングプロファイル、エクスポート方法を確認します。署名に必要な情報は、チームで承認された認証情報の手順を通じてジョブに渡し、コードリポジトリや公開ログには記載しないでください。

  3. 03

    キャッシュと成果物を分ける

    キャッシュは再生成できますが、リリース成果物は保管が必要です。Unityの中間ファイル、DerivedData、過去のアーカイブにはそれぞれ専用ディレクトリと削除ルールを設定し、蓄積によってシステムディスクがいっぱいにならないようにします。

対話型タスク · まず検証してから継続利用

デバッグにはデスクトップ、実験には再現可能な環境

無人ビルドだけではありません。コンソールにログインすると、ブラウザーからノードのmacOSリモートデスクトップを開き、Xcodeで直接デバッグできます。SSHでスクリプトを実行し、Apple Silicon上でローカルモデルの推論ワークフローを検証することも可能です。

リモート開発では操作の遅延を確認

シミュレーターを頻繁に操作したり、画面を確認したり、ステップ実行したりする場合、バックグラウンドビルドよりもネットワークの応答速度が操作感に影響しやすくなります。データセンターはシンガポール、日本(東京)、韓国(ソウル)、香港から選べます。チームに近い拠点を試してから、継続利用する場所を決めましょう。

  • 普段のオフィスネットワークで、文字の見やすさ、操作への反応、ファイル転送を確認します。
  • 日常の編集と長時間のアーカイブを別の時間帯に行い、チーム内のリソース競合を減らします。
  • 複数人で同じノードを使う場合は、デスクトップ操作と認証情報の管理ルールを決めておきます。

ブラウザーのデスクトップは対話操作に、SSHは自動化に使います。どちらも同じプロジェクトで活用できます。

AI実験ではまずメモリ使用量を確認

モデル名だけで判断せず、モデルファイル、推論精度、コンテキスト長、同時に実行するツールを基準に選びましょう。短期間の利用で環境構築とサンプルの動作を確認してから、Glide M4かCruise M4 Proを選びます。

  • 依存関係がApple Siliconに対応していることを確認し、インストールしたバージョンと起動パラメーターを記録します。
  • 実行時のメモリ負荷を確認し、SSD容量をメモリ容量と混同しないようにします。
  • 入力、パラメーター、出力を保存し、新しいノードに移行した後も実験を再現できるようにします。

メモリ64GBでも、すべてのモデルが動作するとは限りません。互換性と必要容量は実際のタスクで検証してください。

パイプラインの確認 · 署名から配布まで

各ビルド工程の結果を追跡可能にする

以下はfastlaneワークフローの例であり、ノードでの実測結果ではありません。署名リポジトリへのアクセス権、プロジェクトのscheme、アプリ識別子、配布用認証情報はチームで設定してください。各工程を個別に成功させてから、無人実行のジョブにまとめましょう。

cruise-m4pro — fastlane
$ bundle exec fastlane match appstore --readonly
[match] Fetching signing certificates and profiles
[match] Installing signing assets into the build keychain
[match] Signing assets are ready

$ bundle exec fastlane gym --scheme "$SCHEME" --export_method app-store
[gym] Archiving the selected scheme
[gym] Exporting the archive
[gym] IPA export completed

$ bundle exec fastlane pilot upload --ipa "$IPA_PATH"
[pilot] Uploading the selected IPA
[pilot] Upload completed; processing continues on TestFlight

match:必要な認証情報だけを取得

CIでは読み取り専用で既存の署名情報を取得します。署名リポジトリにアクセスできない場合は、まず認証を確認してください。秘密鍵、トークン、復号パスワードをログに出力しないでください。

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

アーカイブに成功しても、IPAのエクスポートが成功したとは限りません。アーカイブログを保存し、scheme、署名設定、エクスポートパラメーターを個別に確認して、2つの工程の失敗を混同しないようにします。

pilot:アップロード完了後も処理は続く

アップロード後も配布プラットフォームでの処理を待つ必要があります。アップロード結果を保存して処理状況を確認し、ネットワークへのアップロード成功だけでチームの受け入れ完了としないでください。

1日20回のビルド · 導入方法を比較

リソースの所有形態と運用の担当者を比較

中小規模のチームが1日に20回ビルドを実行するケースを想定します。この数値はタスク頻度の説明用で、性能テストの結果ではなく、必要なマシン台数を決める基準にもなりません。1回あたりの所要時間、同時実行数、キャッシュヒット率、リリース時のピークも記録し、以下の3つの導入方法を比較しましょう。

同じiOSパイプラインでの導入方法。具体的な機能や提供条件は各プラットフォームでご確認ください。
比較項目 VMFlyの物理ノードをレンタル Macを購入 共有VM
コスト構造 日・週・月・四半期単位でレンタル。Glide M4は$100.7/月、追加オプションは別料金です。 購入時に一括費用が発生し、設置、ネットワーク、電力、日々の管理にもコストがかかります。 プラットフォームの期間または利用量に応じて精算。キューのルールと同時実行枠も確認が必要です。
利用開始までの流れ 支払い確認後に物理マシンを割り当てます。実際に利用できるかどうかは、コンソールに表示される最新状況をご確認ください。 購入、納品、ネットワーク接続、リモートアクセスの設定が必要です。 プラットフォームがリソースを割り当てます。キューの有無や環境の永続性はサービスによって異なります。
専有性 Mac mini 1台を1社のお客様に割り当てます。仮想マシンではありません。 ハードウェアをチーム専用で利用できる一方、現地での対応とシステム管理もチームが担います。 通常、他のインスタンスとホストリソースを共有します。分離方法とリソース配分はプラットフォームが管理します。
拡張の柔軟性 モデルの変更やノードの追加が可能です。環境とデータの移行はご自身で手配してください。 増強には通常、ハードウェアの追加購入と導入が必要です。既存マシンの費用も引き続き発生します。 選べる仕様と拡張方法は、プラットフォームの提供内容やリソース割り当てルールに左右されます。

同じコミットで選定を検証する

短時間のビルドが1日20回なら、安定したキャッシュが重要かもしれません。時間のかかるUIテストが少数なら、実行ノードの分割が効果的な場合があります。ビルド回数だけでモデルをアップグレードしないでください。同じプロジェクトで所要時間、メモリ、ディスク使用量を確認し、Glide M4を常設するか、リリース時にCruise M4 Proを追加するか判断しましょう。

VMFlyが提供するのは専有物理ノードです。プロジェクトの依存関係、runnerの権限、署名情報、成果物のバックアップはチームで管理する必要があります。パイプラインのオーケストレーションを完全に任せたい場合は、これらの作業を既存のチームツールが担っているか先にご確認ください。

用途に合ったプランを選ぶ

日常のビルドには継続的な負荷を、短期増強には利用日数を基準に選びましょう。2種類の仕様と4つの料金プランを確認して、パイプラインに合ったノードをお選びください。