はじめに

CircleCI の macOS リソースは多岐にわたっており、ソフトウェアのビルド、テスト、デプロイを素早く行いたい世界中の Apple 開発者のみなさまに選ばれています。CircleCI は今回、M1 実行環境として、Medium クラス(4 vCPU, 6GB RAM)と Large クラス(8 vCPU, 12GB RAM)の2つのリソースクラスの提供を開始しました。新しい実行環境は、クラウド環境で手軽に Apple Silicon (シリコン)のサポートを使いたいというニーズの高まりに応えて設計されました。このリソースなら、Apple の進めるハードウェアイノベーションと常に足並みを揃えられます。

CircleCI は、業界トップクラスの継続的インテグレーション & 継続的デリバリー (CI/CD) プラットフォームとして、Apple コミュニティに製品リリースの高速化に役立つ先進的なツールを提供できるよう取り組んでいます。この記事では、CircleCI の M1 リソースの概要と、ビルドに M1 を活用することで未来の Apple 開発に向けてプロジェクトを成長させる方法について説明します。

M1 で iOS ビルドパイプラインをスピードアップ

2020 年に公開された Apple MacBook シリーズの内部には、驚くべきものが隠されていました。最高の効率を実現するために開発された、M1 チップです。この登場以来、Apple シリコンは、”驚異的なスピードとパフォーマンスを実現する” という約束を守り続けています。

M1 の優れた効率の源は、その特徴である “システムオンチップ” です。CPU や GPU、RAM、Secure Enclave などのさまざまなコンポーネントが、1 つのプロセッサに組み込まれているのです。M1 のメモリアーキテクチャは、プロセッサの各コンポーネントが一元的なデータプールを活用できるムダのない構造になっているので、コンポーネント間でデータをコピーする時間は発生しません。効率面でこれほどの進歩を遂げたことから、未来はシリコンチップにかかっていると言っても過言ではないでしょう。

iOS 開発で M1 を使うメリット

E2E・エンドツーエンドテスト (GPU テスト含む) が身近に: 適切に機能するコードを素早く、自信を持って開発するには、自動テストが欠かせません。そのため、CI/CD パイプラインを実現する鍵はテストの自動化であると言えます。macOS や iOS プラットフォームのテストで特に問題になるのが、ゲームアプリや仮想現実アプリなど、GPU (画像処理装置) にかかる負担の大きいアプリケーションのテストです。

これまで、macOS プラットフォームで GPU テストを効果的に自動化するには、専有ホストを利用するしかありませんでした。この制限の回避策として、ローカル GPU デバイス上でテストを実行する方法もあります。とは言え、CI パイプラインで GPU テストを自動実行した方が、テストの頻度も一貫性も高まり、エンドユーザーのエクスペリエンスを把握しやすくなります。

CircleCI の M1 リソースには、CPU 上のソフトウェアで処理されることが多いタスクを GPU 上に移すことで処理時間を短縮する、ハードウェア アクセラレーション機能が搭載されています。たとえば、3D レンダリングタスクは、CPU で処理すると表示にムラが生じがちですが、GPU なら滑らかです。これにより、パイプライン内で素早く、効率的かつスムーズに GPU テストを行い、アプリケーションのビジュアルエフェクトに関するフィードバックをすぐに得たり、破壊的変更を最小限に抑えながらアップデートをリリースしたりできるようになります。

ビルドを高速化してプロダクトエクスペリエンスを向上: プロダクトエクスペリエンスの質を高めるうえで最も重要なものは、スピードです。エンジニアリングチームは、ユーザーからの信頼とロイヤルティを得るために、強化機能やバグ修正のリリースを数分で行えなければなりません。M1 はベンチマークテストにおいて、macOS ジョブのスピードを 2 倍に高めるという新次元のビルド速度を発揮しました。このスピードがあれば App Store の審査プロセスを速め、アプリの承認、公開を迅速化できるので、M1 は特に iOS 開発で有用です。App Store への申請 (と再申請) にかける時間を減らして、重要なコードの開発にもっと多くの時間をかけましょう。

M1 リソースによるビルド速度向上の効果

以下のサンプルジョブでは、大型リポジトリ (約 4GB) のクローンをプルし、キャッシュを保存して、取得しています。

M1 Mac リソースクラスなしの参考イラスト

Intel ハードウェアでこのジョブを実行したところ、約 24 分かかりました。ビルド時間の大半は、リポジトリのクローンとキャッシュの保存が占めていました。次に、新登場の M1 リソースで同じジョブを実行した場合の結果を示します。

M1 MAC リソースクラスありの場合

M1 ではジョブの実行が 7 分以内で完了し、Intel ハードウェアと比べておよそ 4 分の 1 にまで短縮できました!ただし、パフォーマンスの結果はワークフローに左右されるという点にご注意ください。

CircleCI パイプラインで M1 リソースクラスを使用する方法

M1 リソースは、CircleCI 設定ファイルを少し調整するだけでビルドに利用できます。以下に、この設定の例を示します。

# .circleci/config.yml
version: 2.1
  jobs: # 1 回の実行の基本作業単位
    build-and-test: # ジョブの名前
macos:
  xcode: 14.2.0 # 使用する Xcode のバージョンを指定
resource_class: macos.m1.large.gen1
steps: # 実行する一連のコマンド
  - checkout  # VCS からコードをプルする
  - run: bundle install
  - run:
      name: Fastlane
      command: bundle exec fastlane $FASTLANE_LANE
  - store_artifacts:
      path: output
  - store_test_results:
      path: output/scan

    workflows:
      build-test:
jobs:
  - build-and-test

上記の設定ファイルでは、resource_class キーで、build-and-test ジョブに macos executor の M1 Large インスタンスを使うように設定しています。M1 Medium インスタンスを使用するのであれば、resource_class の指定を macOS.m1.medium.gen1 に置き換えます。なお、ビルドに使用するXcode のバージョンも指定できます。

iOS パイプラインで M1 を利用するメリット

Apple が Intel ベースのチップから Arm ベースの M1 チップへの移行を推し進めているところを見ると、ゆくゆくは、Apple 向けの開発はすべて Apple シリコン上で実行されるようになるでしょう。CircleCI を利用している Mac 開発者のみなさんは、M1 をパイプラインで活用することで、こうした流れに先手を打つことができます。参考として、Mac 開発コミュニティからよく寄せられる質問と答えを以下に示します。

M1 リソースクラスで Intel 用のビルドを行えますか?

M1 リソース上での Intel 用アプリのテストは、Rosetta (M1 Mac で Intel Mac 用アプリを使うためのソフトウェアツール) をインストールするステップを追加することで簡単に実現できます。サンプルについては、こちらの macOS Orb のプルリクエスト (英語) をご覧ください。

CircleCI の M1 リソースの料金はいくらですか?

M1 の料金については、他の macOS 用 CircleCI リソースと同じく料金プランのページをご覧ください。

おわりに

CircleCI での Apple アプリケーションのビルド/テストに、新世代のリソースが登場しました。この M1 リソースを使用すれば、エンドツーエンドテストの効率化から、市場投入スピードの向上まで、あらゆる面においてアプリケーションのリリースを後押しし、最大限の効率を維持しながら開発業務を拡張できます。

M1 は、Scale プランでご利用いただけます。CircleCI の macOS 開発のサポート体制について詳しくは、CircleCI ドキュメントをご覧ください。