VPSSpark ブログ
← 開発日記に戻る

M4 クラウドノードでのコンパイルとパッケージング:パイプラインを移行しました

機材メモ · 2024.03.10 · 約 6 分で読める

M4クラウドノードのビルドとパッケージング高速化

VPSSparkの主力モデルはMac mini M4です。Xcodeの実行に加え、DockerやスクリプトもたまにつかうプロジェクトにとってCPUとメモリの違いは「コンパイル待ち」か「コードを書き続けるか」に直結します。旧プロジェクトのフルビルドをM4ノードへ移行したところ、クリーンコンパイル時間が約半分に短縮されました——節約できるのは時間だけでなく、中断されたフローも。リモートデスクトップでは特にそれが際立ちます。

~50%
クリーンビルド時間短縮
4W
待機電力(目安)
3+
並列可能なCIステージ

クラウドMacが向いているビルドシナリオは?

移行前に、代表的なシナリオを痛みの度合いで整理しました:

シナリオ 主な課題 クラウドMacの改善
iOS / macOS ビルド ローカルXcodeバージョンのズレ・証明書競合 固定スペックイメージ、ロックファイルとの厳密な整合
CIにMac Runnerがない クラウドCIの待機またはAppleハードウェア不足 専有ノード、夜間ビルドとリリース前チェック
チームの共同ビルド 「自分の環境ではビルドできるが相手はできない」 ディスクイメージと依存キャッシュの共有
互換性テスト(特定OSバージョン) 複数CLTバージョンの並行実行が必要 マルチノード隔離、柔軟な設定切替
今後の予定
ディスクIO、GitホストへのネットワークレイテンシなどもDiaryで記録していきます——これらもハードウェアと同様に、主力開発をクラウドに全移行するかどうかを左右します。

「コンパイルできる」から「本開発をクラウドに移せる」へ

統一されたビルド環境によりチームのコミュニケーションコストを削減
統一されたイメージ環境により、チームメンバーがいつでも同じビルドベースラインに切り替えられ、「環境が違う」というコミュニケーションコストをなくせます

クラウドMacをリモートディスプレイ代わりに使うのはもうやめました。クリーンビルドが大幅に短縮されると、ユニットテスト・静的解析・成果物の署名検証まで同じ固定環境で回せるようになり、「自分のマシンでは通るのに同僚の環境で通らない」というやりとりが減ります。

重要なポイント
イメージ内のXcodeバージョン、コマンドラインツール、依存キャッシュは、リポジトリのロックファイルと厳密に合わせる必要があります——でないと速度は上がっても、一貫性がこっそり失われます。

Apple Siliconでは、リンカーとSwiftコンパイラがメモリ帯域幅により敏感です。Swift Package、混在モジュール、大型Asset Catalogが多いプロジェクトでは、コンパイルピーク時にスワップへ逃げないよう、ローカルの余裕よりやや大きめのRAMをクラウドで確保することをおすすめします。内部では同じプロジェクトを異なるノードで繰り返し計測し、wall timeと尾端遅延の中央値を比較しています。

キャッシュ三種:DerivedData · CocoaPods · SPM

キャッシュはビルド速度に最も直接的に効くレバーです。以下の三つのディレクトリはイメージのベースラインに書き込み、バージョンタグを付けることをおすすめします:

イメージキャッシュディレクトリ(参考)
~/Library/Developer/Xcode/DerivedData/   # Xcode インクリメンタルコンパイルキャッシュ
~/Library/Caches/CocoaPods/              # CocoaPods ダウンロードキャッシュ
~/.spm-cache/ (or ~/.swiftpm/)           # Swift Package Manager キャッシュ

# 日常のイテレーション:このセッションに必要な差分のみ同期
# 真のコールドスタートはイメージの大規模アップグレード時にまとめて

日常のイテレーションでは本セッションに必要な差分のみ同期し、真のコールドスタートはイメージの大版アップグレード時にまとめて処理することで、速度を保ちつつエグレス帯域を節約できます。

段階的移行の提案
小規模チームは一度に全員を移行する必要はありません。より安全なアプローチは、夜間ビルド、リリース前のリグレッション、特定のOSマイナーバージョンが必要な互換テストをクラウドに移し、ハードウェアの恩恵を受けながらローカル開発のリズムを崩さないことです。

観測・ロールバックと「深夜に電話に出られる人」

クラウドビルドはwall time削減だけでなく、障害時の迅速な特定にもかかわります。典型的なインシデントを四分類し、それぞれ独立したアラート閾値とオンコールRunbookを用意しています:

  • イメージドリフト — XcodeバージョンまたはCLTがサイレントに更新
  • 依存解決タイムアウト — SPM / CocoaPodsのフェッチタイムアウト
  • 署名証明書の期限切れ — 配布証明書またはProvisioning Profileの期限切れ
  • Gitリモート到達不能 — サブモジュールのDNS遅延がビルド遅延として誤認

チームが複数のタイムゾーンにまたがる場合は、「最後に成功した夜間ビルドの成果物ハッシュ」と「失敗ログの抜粋」を読み取り専用チャネルに自動投稿することで、朝の引き継ぎを軽くできます。誰かが不在でも、環境問題かコード回帰かを判断できる人が残ります。

ロールバックはディスク全体のクローンだけが手ではありません——多くのチームにとって、「直前まで動いていたXcode + CLT + CocoaPodsの組み合わせ」を収めた軽量イメージの方が、ユーザーホーム全体を復元するより速く復旧できます。コンソール側でビルド履歴に紐づいたイメージタグを提案する機能を順次導入していく予定です。

さらに、夜間パイプラインでサブモジュールのフェッチ時間を別途計測することをおすすめします:サブモジュールのDNS解決が遅いと、コンパイルが遅いように見えることがあります。DNS・Gitハンドシェイクをコンパイルフェーズから分離すると、イメージ内のresolver設定を変えるべきか、サブモジュールを内部にミラーすべきかを判断しやすくなります。この傾向値をM4ノードのCPU使用率と並べて見ると、増設すべきかネットワークを修正すべきかも見えてきます。

M4 Mac mini なら、これがすべて快適に動く

本記事のすべてのビルドシナリオは、macOS上ですぐに利用できます——Xcode、ターミナル、Docker、Homebrewがネイティブサポートされ、WSLもドライバ互換も不要です。Mac mini M4はApple Siliconのユニファイドメモリアーキテクチャにより、リンカーとSwiftコンパイラが並列処理を最大限発揮できます。待機電力わずか約4Wの超低消費で24時間静音稼働が可能なため、ビルドノードとして理想的です。

同価格帯のWindowsマシンと比べると、Mac mini M4はパフォーマンス・電力効率・システム安定性でリード:macOSの極めて低いクラッシュ率は長期無人運用に最適で、GatekeeperとSIPのセキュリティ機構はウイルスリスクをWindowsプラットフォームより大幅に低減、コンパクトで静音設計の筐体は長期的な運用コストをさらに下げます。

安定した高性能ハードウェアへビルドパイプラインを移行するなら、Mac mini M4は現在市場で最もコストパフォーマンスの高い出発点です——プランを今すぐ確認して、CIの待ち時間をなくしましょう。

期間限定セール

Macを超えて——クラウドの開発拠点へ

専有算力 · グローバルノード · 月額サブスク · ハードウェア不要

ホームに戻る
期間限定セール プランを確認する