パフォーマンス 2026年4月24日

レンタル Mac mini:Rosetta x64 と arm64 ネイティブ CI マトリックス 2026(VmMac)

VmMac エンジニアリングチーム 2026年4月24日 約 21 分

iOS / macOS CI のオーナーが VmMac からApple Silicon Mac miniを借り受けると、2026 年もなお正面からぶつかるのが次の二択だ。遺物の x86_64 バイナリを Rosetta 2 上で走らせ続けるのか、それとも arm64 を強制し、依存の遅れはビルド失敗で露呈させるのか。本稿は、翻訳レイヤのコスト、xcodebuildARCHS/opt/homebrew 前提の PATH 設計、そして 香港・日本・韓国・シンガポール・米国に跨る「同じ驚き」を避ける手順を数値化する。併読として Xcode Cloud と GitHub Actions の持ち帰りパターンクラウド実機とローカル VM の期待差マルチアカウント隔離 を推奨する。OpenClaw の常駐と CI を同居させるなら、Node / launchd の PATH 固定 と矛盾がないか必ず照合しよう。

現場では「対話 shell では arm64 なのに、夜間の launchd ジョブだけ古い node を掴む」系の不具合が根強い。原因の多くは Intel 由来の /usr/local/bin 優先や、brew bundle エクスポートのリージョン差だ。初手の数行に uname -msysctl sysctl.proc_translated、主要バイナリの file を常時出すと、SRE の初動が桁違いに速くなる。Xcode ポイントリリースの導入タイミングをリージョンでズラすと、同じ .xcconfig でも挙動が分岐しうる。ここを運用表に書かない限り「シンガポールは緑、米国は赤」は繰り返される。

VmMac は SSH と任意の VNC を提供するが、採用ツールチェーンとポリシーは利用側の責任だ。ヘルプで接続パターンを確認し、arm64 専用カナリア用にホストを増やす前に 料金 を突き合わせる。判断は社内 wiki に「どのキュー名がいまも Rosetta を許容するか」とセットで残す。口頭の暗黙知だけにすると、オンボーディングのたびに同じ炎上を買い直すことになる。

なぜベアメタル Apple Silicon でも Rosetta が温まるのか

第一に、ベンダー CLI がファットバイナリの体裁でありながら、実測は Intel 世代でしか通っていない例がまだ多い。第二に、社内の Go / Rust ツールを昔 x86_64-apple-darwin 向けにだけビルドしたまま、リリースアーティファクトに焼いている。第三に、ML 用ホイールの arm64 到着が四半期単位で遅れる。いずれも道義的な「悪」ではないが、CPU 分を Swift コンパイル向けに確保したつもりが、黙って奪われる。方針として、CI 上で翻訳中に費やす壁時計比が 12% を越えたスクリプトはチケット化し、arm64 再ビルドか代替 CLI への期限付き移行を要求するのが健全だ。

供給鎖の観点では、同じパッジ名でもミラーごとに実体が違うことがある。ロックファイル+ハッシュのペアを git に固定し、brew list --versions の先頭 200 行を週次 diff する習慣は安価で効く。人間の「たぶん同じ」より、差分の数字のほうが上司にも説明しやすい。

  • 信号: ワーカ PID で sysctl sysctl.proc_translated1 なら Rosetta 上。JSONL に必ず残す。
  • 信号: /opt/homebrew 配下の file $(which node)x86_64 なら、戦略ではなく PATH バグ である可能性が高い。

翻訳コスト:M4 Mac mini CI 向けの目安帯

Rosetta の翻訳品質は高い。それでも JIT 翻訳であることに変わりはない。多くのチームでは、同じ M4 クラス上の CPU バウンドな CLI 作業をネイティブ arm64 と比較すると、だいたい 1.2 倍から 2.1 倍の遅さに収まるが、初回のキャッシュ未充填時はブレ幅が大きい。常駐セットも膨らみ、同じ負荷でも +15~25% 見ておくと安全だ。16GB UMA では、並列歩数が「二つのアーカイブが同時に安定」か「一つに絞るしかない」かの境界に直結する。

週末のフル回帰や、深夜バッチを昼間の簡易計測だけで見積ると危険だ。週のピークに積もった翻訳税が、キュー遅延として表に出る。経営向けの要約は「vCPU 分換算」で通しやすいが、エンジニア向けの真実は どのジョブ名が翻訳に依存し続けているか の一覧化にある。

ガードレール: 1 台の Mac mini に専用の「互換レーン」を切らない限り、翻訳依存ジョブの同時数は 30% 以内に。三夜連続で翻訳が CPU 秒の 18% を超えたら、次のリリーストレイン前に再ビルドの時間を取る。例外を恒常化しないこと。

意思決定表:いつ妥協し、いつ arm64 必須か

ワークロード 優先 Rosetta 可 数値チェック
Swift / アーカイブ arm64 のみ 本番系では不可 ONLY_ACTIVE_ARCH=NO で arm64 スライス
レガシー社内 CLI arm64 再ビルド 90 日の橋渡し 5% CI 分
ブラウザ UI テスト arm64 ブラウザ 例外的にベンダー物 フレーム P95 がネイティブ 20%
Node/Python 拡張 arm64 ホイール 移行スプリントのみ 本番に x86_64 dylib ゼロ

Homebrew:/opt/homebrew と Intel プレフィックス混入

Apple Silicon 既定は /opt/homebrew だ。古いイメージから /usr/local/bin を先頭に残すと、存在する arm64 の横をすり抜けて x86_64 を拾う。launchd 用 plist には PATH を完全列挙し、ログイン shell に依存しない。OpenClaw 常駰と併用するなら、Node パス固定 の章と一緒にレビューし、CI ジョブとデーモンで参照が分岐していないか確認する。

最小 PATH でのスモークを PR ゲートに入れると、sh -c 経由の偶発的な広い探索を早く殺せる。インフラ as Code なら、PATH 定義も同じリポジトリのレビュー対象にしよう。

Xcode、xcodebuildARCHS

iOS 向けは -destination 'platform=iOS Simulator,name=iPhone 16,arch=arm64' のように、シミュレータの arm64 を明示(端末名は自社マトリクスに合わせる)。macOS ターゲットは CI 側 ARCHS=arm64、埋もれた VALID_ARCHS への x86_64 復活はエラー扱い。リモートビルドと持ち帰り bare metal の差分を夜間に突き合わせ、xcodebuild -showBuildSettingsARCHS 行に grep をかけ続ける。ポイントリリースをリージョンでズラすなら、差分表を添えて。

複数リポで共有 .xcconfig をコピーしていると、1 文字の差で事故る。生成元を一つに寄せ、機械的に展開するのが堅い。

七ステップ:arm64 既定への移行道

  1. 1 週、ラッパーで翻訳プロセスを棚卸しし、上位消費者を炙り出す。
  2. CPU 分トップ 3 を arm64 再ビルドか代替に差し替える。
  3. キュー分割:ci-arm64 / ci-compat をラベルで可視化。
  4. ホスト改訂ごとに Homebrew bundle エクスポートを凍結し、チェックサムを git 管理。
  5. arm64 限定のスモークを追加。翻訳ワーカ上では意図的に赤にする。
  6. 香港・日本・韓国・シンガポール・米国を同一変更窓で揃え、片側だけ古い挙動を残さない。
  7. 互換キュー分が 4 週連続 2% 未満なら、Rosetta 専用レーンを引退の議論に移る。

五リージョン:同じ既定、同じ地獄

遅延は翻訳の真偽を変えないが、Xcode 小版の導入順は変える。毎晩、xcodebuild -versionuname -m を JSON に吐き、容量が詰まったからといって一地域だけ寛容な Rosetta 方針を永遠に続けない。足りなければ 料金 でホストを足すほうが安い。パッケージ二つ分の brew 差で昇格止め、は運用文化として有効だ。

週次で各リージョンの brew list --versions 先頭 200 行を突き合わせ、2 パッケージ超のズレはリリースを止める。アーキテクチャ探偵に週末を奪わないための、最も安い保険である。

FAQ:レンタル Mac mini の Rosetta

Rosetta をアンインストールすべき? 通常 いいえ。緊急用に温存しつつ、CI 既定を arm64 に寄せ、普段は冷やす。

VmMac がアーキテクチャを選ぶ? いいえ。利用者がツールチェーンを定義し、我々は接続性の付いた Apple Silicon 実機を提供する。

シミュレータに x86 が要る? 現行は arm64 シミュレータを使うのが正攻法。x86_64 / i386 ランタイムに依存するジョブを棚卸ししろ。

なぜ Mac mini M4 と arm64 既定の相性が良いか

M4 クラスの一コア速さは、翻訳税を一時的に煙に巻きやすい。だが同時多発と UMA 圧で一気に破綻する。VmMac なら 香港・日本・韓国・シンガポール・米国に小さな互換専用群を分け、主戦力の「きれいな arm64 プール」を汚染しない。Rosetta を期限付きの橋と数値化し、縮小を儀表板で見せ続ける──これが、ベアメタル採用の正当性を財務にも説明しやすくする。VmMac は魔法のポリシーエンジンではないが、分割しうる金属を届ける。そこに意思決定の筋を乗せれば、CI は退屈に戻る。

arm64 専用カナリアを先に立てる

最寄りの VmMac リージョンでもう一台立ち上げ、既定 arm64 を焼き付けてから互換レーンを畳もう。