MacでBuildkiteエージェントを動かす方法
MacでBuildkiteのジョブを動かすには、BuildkiteのHomebrew tapからエージェントをインストールします。エージェントのトークンを設定ファイルに貼り付け、キューのタグを設定します。brew servicesで起動してLaunchAgentとして動かし、自動ログインをオンにします。あとはパイプラインのステップからそのキューを指定します。
最初に必要なもの
- Buildkiteのクラスタと、そのエージェントトークンとキューを管理する権限。Organizationの管理者か、クラスタのメンテナーである必要があります。
- macOS 11以降のMac。これがBuildkiteの公表している最低要件です。Apple silicon、Homebrew、Xcode、管理者権限も必要です。
- エージェントがリポジトリのcloneに使えるSSH鍵。
1. キューとエージェントトークンを作成する
Buildkiteで「Agents」を選んで「Clusters」ページに移り、クラスタを選びます。「Queues」ページで「New Queue」を選びます。キーをmacosにし、「Self hosted」を選びます。次に「Agent Tokens」を開いて「New Token」を選び、説明を入力して作成します。値をコピーします。Buildkiteが表示するのは一度だけです。
トークンのフォームには「Allowed IP Addresses」の欄があります。MacRunでは空欄のままにしてください。当社のMacには固定のパブリックIPがないので、CIDRのルールを入れるとエージェントが締め出されます。
2. Homebrewでエージェントをインストールする
brew tap buildkite/buildkite brew trust buildkite/buildkite brew install buildkite/buildkite/buildkite-agent
2026年10月に当社のMacに入っていたHomebrew 7.0.7は、サードパーティのtapを信頼するまで、そこからformulaを読み込みません。それが真ん中の行です。formulaの名前は現在buildkite-agent@3ですが、Buildkiteのドキュメントにある古い名前も引き続きこれを指しています。
Apple siliconでは、ファイルは/opt/homebrewの下に置かれます。
- 設定:
/opt/homebrew/etc/buildkite-agent/buildkite-agent.cfg - フック:
/opt/homebrew/etc/buildkite-agent/hooks - ログ:
/opt/homebrew/var/log/buildkite-agent.log
お使いのマシンでの正確なパスは、brew info buildkite-agentを実行して確認してください。
3. トークンとキューのタグを追加する
Buildkiteのドキュメントでは、sedでプレースホルダーのトークンを置き換えています。大文字の部分を自分のトークンに置き換えてください。
sed -i '' "s/xxx/INSERT-YOUR-AGENT-TOKEN-HERE/g" "$(brew --prefix)"/etc/buildkite-agent/buildkite-agent.cfg cat "$(brew --prefix)"/etc/buildkite-agent/buildkite-agent.cfg | grep token
次に同じファイルを開いてtagsの行を設定し、エージェントをキューに参加させます。
tags="queue=macos"
エージェントは、クラスタ内の1つのセルフホストキューに属します。キューのタグがなければ、デフォルトのキューに参加します。クラスタにデフォルトのセルフホストキューがない場合、Buildkiteによるとエージェントは接続に失敗します。
4. テストしてから、サービスとして動かす
まずフォアグラウンドで一度起動します。クラスタのエージェント一覧に表示されるはずです。
buildkite-agent start
Control Cで止めます。Homebrewのformulaにはサービス定義が含まれています。上の設定でbuildkite-agent startを実行し、失敗したら再起動し、同じファイルにログを出力します。Macのデスクトップ上のターミナルから起動してください。
brew services start buildkite/buildkite/buildkite-agent@3 brew services list | grep buildkite
macOSでは、エージェントはlaunchdのサービスを起動したユーザーとして動きます。Xcodeと署名鍵を持っているアカウントで起動してください。
まずはMac 1台につきエージェント1つで始めてください。Buildkiteは、1つのサービスから複数のエージェントを動かすための、設定ファイルのspawn設定と--spawnフラグを記載しています。Xcodeのビルドを2つ同時に動かすと、同じコアとメモリを取り合います。16 GBのマシンでは、まず1つのエージェントで計測し、それから2つを試してください。
5. 再起動後も動くようにする
formula自身のインストール時の注記に、このユーザーで自動ログインするようMacを設定せよとあります。BuildkiteのtapのREADMEが、そのトレードオフを説明しています。LaunchAgentにはログインが必要ですが、そのおかげでテストがiOSシミュレータのようなGUIツールを使えます。「システム設定」の「ユーザとグループ」で自動ログインをオンにします。それからスリープをオフにし、再起動して、エージェント一覧を確認します。
sudo pmset -a sleep 0 sudo shutdown -r now
plistは、Homebrewが置く場所であるホームフォルダのLaunchAgentsに置いたままにしてください。macOS 27では、/Library/LaunchAgentsにplistがあると自動ログインが壊れることを確認しました。ヘッドレスMacでの自動ログインをご覧ください。
6. Mac用のパイプラインステップ
steps:
- label: ":xcode: iOS tests"
agents:
queue: "macos"
commands:
- "rm -rf build/TestResults.xcresult"
- "xcodebuild test -project MyApp.xcodeproj -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 17,OS=26.5' -resultBundlePath build/TestResults.xcresult"
- "ditto -c -k --keepParent build/TestResults.xcresult build/TestResults.xcresult.zip"
artifact_paths:
- "build/TestResults.xcresult.zip"
timeout_in_minutes: 30
retry:
automatic:
- exit_status: -1
limit: 2exit_status: -1のリトライは、Buildkiteのコマンドステップの例から取りました。テストが失敗したときではなく、エージェント自体が失われたときにジョブをリトライします。
よくあるエラーと対処法
launchctlがCould not find domain forと表示する。Buildkiteによると、Macにユーザーがログインしている必要があります。デスクトップでログインし、サービスをもう一度読み込んでください。Refusing to load formula ... from untrusted tap。brew trust buildkite/buildkiteを実行し、もう一度インストールします。- エージェントが接続しない。トークンが間違っているか、tagsのキューのキーがこのクラスタに存在しません。
- エージェントがcloneできない。エージェントを動かすユーザーの
~/.sshに鍵を置いてください。 xcodebuild: error: Existing file at -resultBundlePath。ビルドはチェックアウトを再利用します。上の例のように、先にbundleを削除してください。
あとでアップグレードするには、brew update && brew upgrade buildkite/buildkite/buildkite-agent@3を実行します。
専用Macが役立つ理由
Buildkiteは自分のマシンで使う前提で作られていて、常設のMacはキャッシュを保持します。Xcode 26.6でWikipediaのiOSアプリを使った当社のベンチマークでは、小さな変更後のジョブがウォームなM6で27秒でした。新規のGitHubホスト型macos-26 runnerでは269秒でした。
Buildkiteのホスト型エージェントで足りる場合
Buildkiteはホスト型のmacOSエージェントも提供しています。2026年10月に読んだドキュメントによると、ホスト型のキューを作るときに選べます。面倒を見るマシンを持ちたくないなら、そのほうが簡単です。SLA、トークンのルール用の固定IP、複数のリージョンが必要な場合も、MacRunは向きません。
MacRun側についてはその他のCIシステムをご覧ください。ステップで何を実行するかは、iOS CI/CDパイプラインのガイドをご覧ください。
よくある質問
MacでのBuildkiteエージェントの設定ファイルはどこですか?
+
Apple siliconでHomebrewを使った場合、/opt/homebrew/etc/buildkite-agent/buildkite-agent.cfgです。brew info buildkite-agentを実行してパスを確認してください。
macOSでBuildkiteエージェントはどのユーザーとして動きますか?
+
launchdのサービスを起動したユーザーです。Xcodeと署名鍵を持っているアカウントで起動してください。
BuildkiteでLaunchDaemonではなくLaunchAgentを使うのはなぜですか?
+
BuildkiteのtapのREADMEによると、LaunchAgentにはログインが必要ですが、テストがiOSシミュレータのようなGUIツールを使えます。自動ログインと組み合わせてください。
ステップをMacのエージェントに送るには?
+
エージェントにqueue=macosのようなタグを付け、ステップにagents: queue: macosを追加します。