xcodebuild のメモリ水位の見方までをまとめます。
Swift 6 厳格並行移行で現場が陥りやすい五つの誤読
Apple のドキュメントは Swift 6 の厳格並行をコンパイル時にデータ競合を捕捉する仕組みと位置づけており、実行時の「たまたま動く」挙動を前提にしません。誤ったホストで一度に Complete を開くと、コンパイラが正しく指摘している問題を「Xcode が壊れた」「クラウド事業者のせい」と読み替えてしまいます。以下の五つのシグネチャは症状を次の一手の最小単位に写像し、警告の海の中でレンタル期間・リージョン・Xcode バージョンを同時にいじる事故を防ぎます。
警告件数を進捗とみなす:Complete を初めて有効にすると数百から数千件のメッセージが出るのは通常です。データ競合 / Sendable / MainActorでバケット分けし、一晩でゼロを目指すのではなく優先順位を付けます。
対話用マシンで全リポジトリ並列 Archive を回す:ノート PC やクラウド Mac でシミュレータ、SwiftUI プレビュー、-jobs 最大の xcodebuild を同時に走らせると、メモリ圧力を「Swift 6 が遅い」と誤認します。
言語モードと Target 粒度を無視する:プロジェクト全体をいきなり Swift 6 Language Mode にすると、単一の SPM パッケージや App Extension を段階移行できず、依存チェーンの上流が未整備のまま下流が止まります。
Git の遅さを並行問題と混同する:国境をまたぐ mono-repo の初回 clone と Swift 6 のフル再コンパイルが重なるときは、先に 大規模 Git 取得の Runbook を当て、メモリ増設の議論に入ります。
移行ウィンドウと複数人の時間共有が衝突する:同一台のクラウド Mac で二人が同時に Clean Build すると DerivedData が上書きされます。複数開発者の隔離 Runbook を適用するか、台数を分けます。
シグネチャに番号を振ってからハードウェア仕様を動かしてください。M4 と M4 Pro の Xcode 下でのメモリ曲線をまだ数値化していない場合は、先に 性能実測ガイド を参照し、「体感が重い」を Swap とビルド時間の指標に置き換えてから、移行専用ビルド機のグレードを決めます。PMO 向けには「警告が減った週」と「Swap が消えた週」を別 KPI にすると、経営層への説明が楽になります。
また、Complete を有効にした直後の CI は、機能ブランチではなく専用の integration ブランチに閉じ込めることをお勧めします。メインラインで数千件の警告が流れると、無関係な回帰の検知感度が落ち、レビュアの注意力も枯渇します。クラウド側では夜間バッチだけ Complete を走らせ、日中の対話 Mac は Minimal のままにする二層運用が、2026年の現場では最も摩擦が少ないパターンです。
ローカル移行、クラウド Mac 集中移行、「クラウドビルド + ローカル対話」の三分法
Swift 6 移行は「クラウドがあるかないか」の二値ではなく、誰がピークコンパイルを引き受け、誰がデバッグ体験を残すかの設計問題です。下表は意図的に粗く、一回のレビュー会でトポロジを決めるためのものです。RTT や API リージョンの細部は、当サイト内の二経路レイテンシ記事に委ね、ここでは重複推論しません。
| 観点 | ローカル Mac で移行 | クラウド Mac で集中移行 | クラウドビルド + ローカル対話 |
|---|---|---|---|
| 向くチーム | 単機・小規模リポジトリ・警告 200 未満 | 分散メンバー・Xcode 版を揃えたい | ローカルで主力デバッグ・夜間 CI をクラウド |
| ピークメモリ | 手元マシンの上限 | 24GB / M4 Pro を選択可能 | ピークはクラウド・ローカルは 16GB でも可 |
| バージョン整合 | ドリフトしやすい | 同一 Xcode に Pin しやすい | cloud/local の小バージョン固定が必要 |
| コストのリズム | 追加レンタルなし | 日次検証 → 月次でベースライン固定 | 長期では「対話ローカル + ビルドクラウド月次」が低いことが多い |
| 2026年のリスク | スリープ・ディスク満杯 | リージョン誤選択で clone が遅い | ブランチと DerivedData の非同期 |
移行専用ビルド機の KPI は「一度でも通った」ではなく、「三夜連続 Complete ビルドで Swap 尖峰がない」ことです。
工期がまだ揺れるなら、レンタル期間を感覚で決めないでください。レンタル段階 KPI マトリックス で六地域の日次試走を済ませ、月次で「移行ビルド機」を固定するか判断します。シンガポール・東京・ソウル・香港・米東・米西のうち、ビルド機はGit リモートと成果物レジストリに近い場所を優先し、個人の自宅回線に近い都市だけを選ばないでください。アジア太平洋で API と Git が分離している場合、二台に分けてそれぞれ近接させる方が、一台で妥協するより安く終わることがあります。
Complete チェックの段階的有効化と 16GB/24GB/M4 Pro の並列コンパイル分水嶺
Apple は Build Settings で Strict Concurrency Checking を Minimal から Complete へ上げ、準備が整ったら Swift Language Version を Swift 6 に切り替える流れを推奨しています。クラウド Mac で再現性を担保する手順は、先に Xcode の小バージョンを Pinし、Target ごとに Complete を開き、無人ウィンドウでフル xcodebuild archive を走らせてメモリをサンプリングすることです。
xcodebuild -scheme "YourApp" -configuration Release \ -destination 'generic/platform=iOS' clean archive \ -resultBundlePath ./swift6-migrate.xcresult /usr/bin/memory_pressure df -h ~/Library/Developer/Xcode/DerivedData
下表は当番連絡用の口径であり、ベンダ SLA ではありません。並列 Job 数は CPU コア数に合わせ、16GB で -jobs を無闇に上げると Swap が走り、総時間が伸びる典型パターンです。
| 仕様 | 推奨並列上限(目安) | Swift 6 の典型負荷 | いつ上げるか |
|---|---|---|---|
| M4 16GB/256GB | 主 Scheme 1 本・シミュレータなし | 単一 App・警告をバッチ修復 | 夜間ビルドで継続 Swap |
| M4 24GB/512GB | Scheme 1–2 またはシミュレータ 1 | 中規模 mono-repo・Extension 多数 | DerivedData + .git 同ディスクが七成超 |
| M4 Pro 64GB/2TB | CI キュー 2–3 タスク | 全リポジトリ Complete + 並列テスト | 3 名以上が同一ビルド機に依存 |
ヒント:モジュール単位で移行する場合、単一の SPM Target だけ先に Complete を有効にし、メイン App は Swift 5 言語モードのままにできます。依存が空になってから全体を切り替えます。
Extension や Widget が多いプロジェクトでは、Complete を開いた順序がリンク時間に直結します。葉の SPM から親 App へ向かう順は、警告の波を小さく保ちやすく、中間で「親だけ Swift 6」にすると依存の Sendable 契約が逆流して手戻りが増えます。計測ログは .xcresult と memory_pressure を同じフォルダに日付スタンプで残し、週次レビューで M4 Pro 要否を再判定する運用が効きます。
六ステップ Runbook:日次検証から Complete 全リポジトリ Archive 受入まで
ベースライン凍結:現行 Xcode 版、Swift 言語モード、警告総数(Sendable/MainActor/その他でバケット)を記録します。
日次レンタルでリージョン試験:対象六地域で最短期間を借り、Clean Archive を一度ずつ実行し、wall time・ピークメモリ・ディスク余量を記録します。
Target 単位で Complete を有効化:葉の SPM からメイン App へ。各段階で CI が緑になるまでマージを止めます。
台数分割(任意):対話機はプレビュー用に残し、無人ビルド機は xcodebuild 専用にします。ディレクトリ隔離は共有インスタンス記事を参照します。
週単位バッファで警告を潰す:データ競合系を集中処理し、その後 Swift 6 Language Mode に切り替えます。
月次でビルド機を固定:三夜連続 Complete Archive で Swap 尖峰がなければ月次契約へ。なければ週次維持または 24GB/M4 Pro へ。
Runbook の各ステップには「戻し方」を一行添えてください。Complete を戻すより Language Mode を戻す方が影響が大きいため、ブランチ保護とタグで機械的にロールバックできる状態を先に作ります。日次試走の raw ログは、後から「なぜ月次に進んだか」を監査できる唯一の証拠になります。
当番向け三本の硬い閾値と、Swift 6 移行ピークにベアメタルクラウド Mac が向く理由
Swap 尖峰:1 回の Archive で memory_pressure が warn/critical に約 90 秒以上入る場合は並列度を下げるかグレードアップし、同じウィンドウで UI テストを重ねません。
ディスク水位:DerivedData とリポジトリが同ディスクのとき、空き 15% 未満では全リポジトリ Clean を禁止します。先に掃除するか Git 大規模取得記事のキャッシュ方針を適用します。
ビルド時間の回帰:Complete 後の wall time がベースライン比 +40% 超で三夜続く場合、全リポジトリ並列やシミュレータ常駐の誤設定を疑います。
注意:閾値はチーム内の合意用です。Apple Silicon で Swap が走るとリンク段階が著しく伸びるため、耐えるより避ける設計が合理的です。
Swift 6 移行のピークを共有 VM やリモートデスクトップに載せると、CPU クォータ不透明・ディスク予測不能・Xcode 版の Pin 不可という三つの隠れコストが出ます。消費者 Mac のスリープは夜間フルビルドを単純に中断します。2026年にデータ競合警告を集中的に潰し、六地域から柔軟に選びたいチームにとって、MESHLAUNCH の Mac Mini ベアメタルクラウドレンタルは、Dedicated でメモリ曲線を測れ、日次で試してから月次で移行ビルド機を固定でき、当サイト内の CI・Git・レンタル記事と閉ループにできます。容量と申込は レンタル料金 と ヘルプセンター をご覧ください。
単一 Scheme の日次検証は可能です。複数 Target 並列は 24GB または M4 Pro を推奨します。期間設計は レンタル段階ガイド をご覧ください。
DerivedData と Xcode 版の隔離が必須です。共有インスタンス隔離を参照し、手順は ヘルプセンター です。