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

macOS上のホストRunner

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

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

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

使用する前に、macOS上のHosted Runnerに影響する既知のイシューと使用上の制約のリストを確認してください。

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

GitLabは、macOS上のHosted Runner向けに以下のマシンタイプを提供しています。x86-64ターゲット向けにビルドするには、Rosetta 2を使用してIntel x86-64環境をエミュレートできます。

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

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

Linux上のHosted Runnerで任意のDockerイメージを実行できるのと比較して、GitLabはmacOS向けに一連のVMイメージを提供しています。

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

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

macOSのイメージ更新ポリシー

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

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

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

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

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

以下のサンプル.gitlab-ci.ymlファイルは、macOS上でHosted 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プロジェクトのコード署名

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

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

アプリケーションのコード署名を設定する方法については、Mobile DevOpsドキュメントの指示を参照してください。

関連トピック:

Homebrewの最適化

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

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

variables:
  HOMEBREW_NO_AUTO_UPDATE: 1

CocoaPodsの最適化

プロジェクトでCocoaPodsを使用する場合、CIのパフォーマンスを向上させるために以下の最適化を検討してください。

CocoaPods CDN

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

CDNアクセスを有効にするには、Podfileが次から始まることを確認してください:

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

Use GitLab caching

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

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

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

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

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

    bundle exec pod check || bundle exec pod install

Include pods in source control

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

既知のイシューと使用上の制約

  • VMイメージにジョブに必要な特定のソフトウェアバージョンが含まれていない場合、必要なソフトウェアをフェッチしてインストールする必要があります。これにより、ジョブの実行時間が増加します。
  • 独自のOSイメージを持ち込むことはできません。
  • ユーザーgitlabのキーチェーンは一般公開されていません。代わりにキーチェーンを作成する必要があります。
  • macOS上のHosted Runnerはヘッドレスモードで実行されます。testmanagerdなどのUIインタラクションを必要とするすべてのワークロードはサポートされていません。
  • Appleシリコンチップには効率性コアとパフォーマンスコアがあるため、ジョブの実行間でジョブのパフォーマンスが異なる場合があります。コアの割り当てやスケジューリングを制御することはできず、これにより一貫性が失われる可能性があります。
  • macOS上のHosted Runnerに使用されるAWSベアメタルmacOSマシンの可用性は限られています。マシンが利用できない場合、ジョブのキューイング時間が長くなる可能性があります。
  • macOS上のHosted Runnerインスタンスは、リクエストに応答しないことがあり、その結果、最大ジョブ期間に達するまでジョブがハングアップすることがあります。
  • macOSはデフォルトで大文字と小文字を区別しないファイルシステムを使用します。この動作は、大文字と小文字を除いて同じファイルパスの重複がある場合に、予期せぬエラーを引き起こす可能性があります。これらの重複したパスは、Gitワークツリー、またはブランチとタグが保存されているGit refsに存在する可能性があります。