スペックよりワークフローで選ぶ

クラウドMacの活用法4選

開発ワークフローに専有のApple Silicon物理ノードを追加しましょう。仮想マシンではなく、SSHとmacOSのGUIを利用できます。単発のビルドから常時稼働のパイプライン、ユニファイドメモリでの推論実験まで対応します。

3つの構成、5つのロケーション。Shell M4は1日 $21.8 から。まずはご自身のプロジェクトでお試しください。

01 / BUILD

メインPCはそのまま、
Xcodeはクラウドに

普段はWindowsやLinuxでコードを書き、リリース時にリポジトリをクラウドMacへ同期してSSHでビルドできます。プロジェクト設定、シミュレータ、署名設定を確認するときはmacOSのGUIに切り替えれば、普段の開発環境を丸ごと移す必要はありません。

Shell M4は、単一プロジェクトのビルドとアーカイブの流れを試すのに適しています。ユニファイドメモリ16GBで足りるかどうかは、プロジェクトの規模、シミュレータの数、同時に実行するツールによって異なります。まず最大メモリ使用量とクリーンビルドの所要時間を記録し、構成変更を検討しましょう。

  • プロジェクトで固定されているXcodeと依存関係のバージョンを確認し、ローカルでは成功してリモートでは失敗する事態を防ぎます。
  • まず署名なしでビルドし、その後、利用権限のある証明書とプロビジョニングプロファイルを設定します。
  • アーカイブに成功してもリリース完了とは限りません。署名、配布の権限、成果物の検証を個別に確認しましょう。
02 / AUTOMATE

macOSビルドに、
常時稼働のRunnerを

専有物理ノードをGitLabまたはGitHubのself-hosted runnerとして登録すれば、コミット、テスト、アーカイブ、成果物の転送を一つのパイプラインにまとめられます。ノードは365日稼働します。ジョブのスケジュール、プロセス管理、ビルド後のクリーンアップは、プロジェクトに合わせてチームで設定してください。

依存関係の解決、ビルド、テストに余裕を持たせ、リポジトリ、依存関係のキャッシュ、ビルド成果物を保存するには、ユニファイドメモリ24GB、SSD 512GBのShell M4 Plusがおすすめです。同時実行数はまず1に設定し、CPU、メモリ負荷、ディスク使用量の推移を確認してから増やしましょう。論理的な同時実行数がそのまま処理量になるとは限りません。

  • CI専用のmacOSユーザーを使い、手作業のデスクトップ操作と作業ディレクトリを分けます。
  • RunnerのタグにはmacOS、チップアーキテクチャ、Xcodeのバージョンを設定し、ジョブの誤割り当てを防ぎます。
  • GUIセッションや署名用キーチェーンが必要なジョブは、同じユーザーセッションで権限を確認してください。
  • リリース用認証情報を保持するRunnerには、信頼できるリポジトリからのコミットのみを許可し、外部からのコントリビューションを分離します。
03 / VERIFY

夜間テストを後から確認できる結果に

fastlaneでジョブを管理し、XCUITestでUIテストを実行。結果バンドルに失敗時の状況を記録します。まずテスト環境を固定してから、対象デバイスを増やしましょう。

まずはシミュレータで回帰テスト

プロジェクトに必要なシミュレータランタイムをインストールし、対象デバイスとOSバージョンを固定します。まず xcrun simctl list devices available で利用可能なデバイスを確認し、実際のデバイスIDをテスト設定に記載します。

夜間ジョブでは .xcresult、スクリーンショット、ログを保存します。失敗時は製品の不具合、テストスクリプトの不安定さ、環境の問題を切り分け、無限に再試行して原因を覆い隠さないようにしましょう。

用途:コミット時のチェックと夜間回帰テスト

iOS実機は別途確認が必要

物理Macをレンタルしても、iPhoneやiPadが付属するわけではありません。本サービスのプランにiOSデバイスは含まれず、接続も標準では提供していません。注文前にデバイスの所有者、接続方法、テストツールを確認してください。

お使いのPCに接続したUSBデバイスは、SSHでログインしてもリモート環境には表示されません。テストには接続可能なデバイス、ペアリングと信頼設定、適切な署名権限が必要です。実現可能かどうか、事前にメールでご確認ください。

実行ごとに結果バンドルを保存

プロジェクトでfastlaneのテストlaneを設定してから実行してください。ジョブごとに結果ディレクトリを分け、テスト終了後に成果物を転送し、ノード上に長期間保存しないようにします。

bundle exec fastlane scan \
  --scheme App \
  --result_bundle true \
  --output_directory build/test-results
04 / EXPERIMENT

ユニファイドメモリで、
推論の仮説を検証

M4 Proチップ、ユニファイドメモリ64GB、SSD 2TBを搭載したShell M4 Proは、MLXやllama.cppを使ってモデルの読み込み、量子化版、コンテキスト長、Metalでの推論を検証するのに適しています。CPUとGPUがユニファイドメモリを共有しますが、メモリ全量をモデルの重みに使えるわけではありません。

モデルを選ぶときは、まず重みのサイズを見積もり、実行用の余裕を確保しましょう。4-bit重みの場合、8Bパラメータで約4GB、32Bで約16GBが目安です。これはパラメータ数に1パラメータあたり0.5バイトを掛けた概算で、量子化メタデータ、KVキャッシュ、ランタイム、システムの使用量は含みません。この数字だけで特定モデルの読み込みを保証することはできません。

  • まず短いコンテキストと単一リクエストで、最初のトークンが出るまでの時間と生成速度の安定性を測定してから、コンテキスト長や同時実行数を増やします。
  • モデルのバージョン、量子化形式、ツールのバージョン、サンプリングパラメータを記録し、異なる構成の結果を混同しないようにしましょう。
  • CUDA環境やマルチGPU学習が必要なタスクには、このMacを同等の代替環境として使わないでください。
ローカルからクラウドへ

移行は3ステップ。各ステップを個別に確認できます

ユーザーディレクトリ全体をそのままコピーしないでください。まずプロジェクトを移し、次にツールチェーンを整え、最後にジョブを切り替えます。以下の所要時間は手作業の計画目安で、利用開始までの時間ではありません。ダウンロード、転送、ビルドの時間は別途かかります。

01

データ:リポジトリを再現可能にする

作業の目安:10~30分(転送時間を除く)

初回の移行では、まずリポジトリをcloneします。未コミットのリソースは個別に差分同期してください。以下のコマンドはローカルで実行します。cloud-mac は設定済みのSSHエイリアスです。リポジトリのURLはプロジェクト独自の環境変数から取得します。

ssh cloud-mac 'mkdir -p ~/work'
rsync -av --exclude '.git' \
  ./App/ cloud-mac:~/work/App/
ssh cloud-mac
git clone "$REPOSITORY_URL" ~/work/repo

確認:コミットIDが一致し、必要なリソースが揃っていること。キャッシュや再作成可能なビルドディレクトリは移行不要です。

02

ツールチェーン:バージョンと権限を固定

作業の目安:20~60分(ダウンロード時間を除く)

リモート環境でXcodeのパスとSDKを確認します。Brewfileがある場合はHomebrewでツールを復元してください。証明書とプロビジョニングプロファイルは、チームで承認された安全な方法で転送し、リポジトリやジョブログに含めないでください。

xcode-select -p
xcodebuild -version
xcodebuild -showsdks
brew bundle --file Brewfile
security list-keychains -d user

確認:依存関係のバージョンが一致し、対象SDKが利用可能であること。実際に実行するユーザーで署名付きアーカイブを作成します。

03

CI:テスト実行後にタグを切り替え

作業の目安:15~45分(ビルド時間を除く)

組織が発行した登録情報を使ってRunnerを接続します。以下はGitLabのコマンドです。GitHub Runnerでは組織が提供する設定スクリプトを使い、ノード上でサービスの状態を確認してください。トークンは信頼できるセッション内でのみ入力します。

gitlab-runner register
gitlab-runner install
gitlab-runner start
gitlab-runner verify

確認:テストブランチのジョブが新しいタグで実行され、成果物をダウンロードできること。問題がないことを確認してから本番パイプラインを切り替え、切り戻し用に旧実行環境を残します。

移行成功の基準は「SSHでログインできること」ではありません。同じコミットで依存関係のインストール、ビルド、テスト、成果物の転送まで完了できることです。失敗した場合はまずログを保存し、それから次の手順に進みましょう。

時差をまたぐ引き継ぎ

共有するのはスケジュール。パスワードは共有しない

同じノードをチームで時間を分けて使えますが、CPU、GPU、メモリ、ディスクは共用です。macOSユーザーを複数作っても、仮想マシンのように分離されるわけではありません。リリース用認証情報や機密プロジェクトには、より厳格な権限設計が必要です。

  1. 01

    アカウントは個別に管理

    メンバーごとに別のmacOSユーザーとSSH公開鍵を使い、秘密鍵の共有を避けます。CIには専用アカウントを使い、メンバーがチームを離れたら鍵を削除し、関連するトークンも確認してください。

  2. 02

    タスクの時間を決めて引き継ぐ

    スケジュールのタイムゾーンを統一し、コミットID、作業ディレクトリ、実行中のプロセス、次のタスクを引き継ぎ記録に明記します。長時間のジョブはRunnerか管理されたセッションで実行し、デスクトップ接続を開いたままにしないでください。

  3. 03

    署名権限は個別に管理

    実行ユーザーごとにキーチェーンの権限を確認し、ロック解除用パスワードをshellの履歴に残さないようにします。引き継ぎ前に対話型の署名確認が残っていないことを確認し、他のメンバーのリリース作業中にユーザーセッションを終了しないでください。

  4. 04

    データは別の場所にも保存

    コードはリポジトリに、成果物はチームのストレージに戻し、認証情報は別途安全に保管します。利用期限までにバックアップを完了し、ノードを唯一の保管場所にしないでください。更新と期限の情報はコントロールパネルでご確認ください。

NEXT / RUN YOUR PROJECT

まずはタスクを選び、
最初のノードを起動

単一プロジェクトのビルドにはShell M4、チームのパイプラインにはShell M4 Plus、大容量メモリを使う推論実験にはShell M4 Proがおすすめです。注文ページで利用期間、ロケーション、追加オプションをご確認ください。

お支払いはUSDT-TRC20、Visa / Mastercard / Amex(Stripe)のみ対応しています。料金は米ドル建てです。実際に利用できる決済方法は、バックエンドAPIの応答に基づきます。