正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

macOS上でホストされるRunner

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com
  • ステータス: ベータ

macOS上のホストされたRunnerは、オンデマンドのmacOS環境を提供し、GitLab CI/CDと完全に統合されています。これらのRunnerを使用して、Appleエコシステム(macOS、iOS、watchOS、tvOS)用のアプリをビルド、テスト、およびデプロイできます。弊社のMobile DevOps sectionでは、iOS用のモバイルアプリケーションのビルドとデプロイに関する機能、ドキュメント、およびガイダンスを提供しています。

macOS上のホストされたRunnerはベータ版であり、オープンソースプログラム、およびPremiumプランとUltimateプランの顧客が利用できます。macOS上のホストされたRunnerの一般公開は、エピック8267で提案されています。

macOS上のホストされたRunnerを使用する前に、macOS上のホストされたRunnerに影響を与える既知の問題と使用上の制約のリストを確認してください。

macOSで使用可能なマシンタイプ

GitLabは、macOS上のホストされたRunnerに対して、次のマシンタイプを提供しています。x86-64ターゲット用にビルドするには、Rosetta 2を使用してIntel x86-64環境をエミュレートできます。

RunnerタグvCPUメモリストレージ
saas-macos-medium-m148 GB50 GB
saas-macos-large-m2pro616 GB50 GB

サポートされているmacOS Dockerイメージ

任意のDockerイメージを実行できるLinux上のホストされたRunnerと比較して、GitLabはmacOS用のVM Dockerイメージのセットを提供します。

.gitlab-ci.ymlファイルで指定する次のDockerイメージのいずれかで、ビルドを実行できます。各Dockerイメージは、macOSとXcodeの特定のバージョンを実行します。

VM Dockerイメージステータス
macos-14-xcode-15GAプリインストールされたソフトウェア
macos-15-xcode-16GAプリインストールされたソフトウェア

Dockerイメージが指定されていない場合、macOS Runnerはmacos-15-xcode-16を使用します。

macOSのDockerイメージアップデートポリシー

Dockerイメージとインストールされたコンポーネントは、プリインストールされたソフトウェアを最新の状態に保つために、GitLabの各リリースで更新されます。通常、GitLabはプリインストールされたソフトウェアの複数のバージョンをサポートしています。詳細については、プリインストールされたソフトウェアの完全なリストを参照してください。

macOSとXcodeのメジャーリリースおよびマイナーリリースは、Appleリリースの次のマイルストーンで利用可能になります。

新しいメジャーリリースのDockerイメージは、最初はベータ版として利用可能になり、最初のマイナーリリースのリリースで一般公開になります。一般公開されているDockerイメージは一度に2つしかサポートされていないため、最も古いDockerイメージは非推奨となり、サポートされているDockerイメージのライフサイクルに従って3か月後に削除されます。

新しいメジャーリリースが一般公開されると、すべてのmacOSジョブのデフォルトのDockerイメージになります。

.gitlab-ci.ymlファイルの例

次のサンプルの.gitlab-ci.ymlファイルは、macOS上のホストされたRunnerの使用を開始する方法を示しています。:

.macos_saas_runners:
  tags:
    - saas-macos-medium-m1
  image: macos-14-xcode-15
  before_script:
    - echo "started by ${GITLAB_USER_NAME} / @${GITLAB_USER_LOGIN}"

build:
  extends:
    - .macos_saas_runners
  stage: build
  script:
    - echo "running scripts in the build job"

test:
  extends:
    - .macos_saas_runners
  stage: test
  script:
    - echo "running scripts in the test job"

fastlaneを使用したiOSプロジェクトのコード署名

GitLabをAppleサービスと統合したり、デバイスにインストールしたり、Apple App Storeにデプロイしたりする前に、アプリケーションにコード署名する必要があります。

macOS VM Dockerイメージの各Runnerには、モバイルアプリのデプロイの簡素化を目的としたオープンソースソリューションであるfastlaneが含まれています。

アプリケーションのコード署名を設定する方法については、Mobile DevOps documentationの手順を参照してください。

関連トピック:

Homebrewの最適化

デフォルトでは、Homebrewは操作の開始時に更新を確認します。Homebrewには、GitLab macOS Dockerイメージのリリースサイクルよりも頻繁なリリースサイクルがあります。このリリースサイクルの違いにより、Homebrewが更新を行う間、brewを呼び出す手順の完了に時間がかかる場合があります。

意図しないHomebrewの更新によるビルド時間を短縮するには、HOMEBREW_NO_AUTO_UPDATE変数を.gitlab-ci.ymlに設定します。:

variables:
  HOMEBREW_NO_AUTO_UPDATE: 1

Cocoapodsの最適化

プロジェクトでCocoapodsを使用する場合は、CIパフォーマンスを向上させるために、次の最適化を検討する必要があります。

Cocoapods CDN

コンテンツ配信ネットワーク(CDN)アクセスを使用して、プロジェクトリポジトリ全体を複製する代わりに、CDNからパッケージをダウンロードできます。CDNアクセスはCocoapods 1.8以降で使用でき、macOS上のすべてのGitLabホストされたRunnerでサポートされています。

CDNアクセスを有効にするには、Podfileが次で始まるようにしてください。:

source 'https://cdn.cocoapods.org/'

GitLabキャッシュの使用

GitLabのCocoapodsパッケージでキャッシュを使用すると、podが変更された場合にのみpod installを実行できるため、ビルドのパフォーマンスが向上します。

プロジェクトのキャッシュを設定するには::

  1. cache設定を.gitlab-ci.ymlファイルに追加します。:

    cache:
      key:
        files:
         - Podfile.lock
    paths:
      - Pods
  2. cocoapods-checkプラグインをプロジェクトに追加します。

  3. pod installを呼び出す前に、インストールされている依存を確認するようにジョブスクリプトを更新します。:

    bundle exec pod check || bundle exec pod install

ソース管理にポッドを含める

ソース管理にポッドディレクトリを含めることもできます。これにより、CIジョブの一部としてポッドをインストールする必要がなくなりますが、プロジェクトのリポジトリ全体のサイズが大きくなります。

既知の問題と使用上の制約

  • VM Dockerイメージにジョブに必要な特定のソフトウェアバージョンが含まれていない場合は、必要なソフトウェアをフェッチしてインストールする必要があります。これにより、ジョブの実行時間が長くなります。
  • 独自のOS Dockerイメージを持ち込むことはできません。
  • ユーザーgitlabのキーチェーンは公開されていません。代わりにキーチェーンを作成する必要があります。
  • macOS上のホストされたRunnerは、ヘッドレスモードで実行されます。testmanagerdなどのUIインタラクションを必要とするワークロードはサポートされていません。
  • Appleシリコンチップには効率性とパフォーマンスコアがあるため、ジョブの実行パフォーマンスはジョブの実行間で異なる場合があります。コアの割り当てまたはスケジュールを制御できないため、不整合が発生する可能性があります。
  • macOS上のホストされたRunnerに使用されるAWSベアメタルmacOSマシンの可用性は限られています。マシンが利用できない場合、ジョブのキュー時間が長くなる可能性があります。
  • macOS上のホストされたRunnerインスタンスがリクエストに応答しない場合があり、その結果、ジョブの最大継続時間に達するまでジョブがハングアップします。