> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Devin の macOS サポート

> Xcode と iOS シミュレータを備えた macOS VM 上で Devin を実行し、Apple プラットフォーム向けアプリのビルド、実行、テストを行います。

Devin が macOS 仮想マシンを利用できるようになりました。これにより、iOS および macOS アプリケーションのビルドとテストが可能になります。

<Note>
  Dedicated SaaS デプロイメントをご利用の場合は、macOS VM を有効化するために担当のアカウントチームまでご連絡ください。
</Note>

<div id="how-it-works">
  ## 仕組み
</div>

macOS のサポートは、Linux と同じ [宣言的設定](/ja/onboard-devin/environment/blueprints)の仕組みの上に構築されています。ブループリントの `runs-on` フィールドで Devin がビルド・実行するプラットフォームを指定し、プラットフォームごとに個別のスナップショットが作成されます。

Linux との主な違いは、シェル、ファイルシステムのレイアウト、パッケージマネージャーの 3 点です。

| 項目          | Linux (デフォルト)          | macOS                                 |
| ----------- | ---------------------- | ------------------------------------- |
| ホームディレクトリ   | `/home/ubuntu`         | `/Users/devin`                        |
| リポジトリディレクトリ | `~/repos/<repo-name>`  | `/Users/devin/repos/<repo-name>`      |
| シェル         | `bash`                 | `zsh`                                 |
| パッケージマネージャー | `apt-get`              | `brew` (Homebrew、`/opt/homebrew` に配置) |
| ファイル添付      | `/home/ubuntu/.files/` | `/Users/devin/.files/`                |

<div id="starting-a-macos-session">
  ## macOS セッションの開始
</div>

macOS はセッションごとに選択できます。

* **Blueprint**: `runs-on: macos` を追加すると、そのリポジトリのスナップショットが macOS 向けにビルドされます (以下を参照) 。
* **Slack**: `!mac` [バングコマンド](/ja/integrations/slack)を利用して、macOS VM 上でセッションを開始します。
* **API**: セッション、スケジュール、自動化を作成する際に `platform: "macos"` を設定します。[API リファレンス](/ja/api-reference/overview)を参照してください。

<div id="writing-macos-blueprints">
  ## macOS ブループリントの作成
</div>

<div id="single-platform-blueprint">
  ### 単一プラットフォームのブループリント
</div>

リポジトリが Apple プラットフォームのみを対象とする場合は、トップレベルで `runs-on: macos` を利用します。

```yaml theme={null}
runs-on: macos

initialize:
  - name: "Install build tooling"
    run: |
      brew install xcodegen swiftlint xcbeautify

maintenance: |
  xcodebuild -resolvePackageDependencies -project MyApp.xcodeproj -scheme MyApp

knowledge:
  - name: build
    contents: xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 17' build
  - name: test
    contents: xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 17' test
  - name: lint
    contents: swiftlint
```

<div id="multi-platform-blueprint">
  ### マルチプラットフォーム対応のブループリント
</div>

同じリポジトリを複数のプラットフォーム向けにビルドするには、プラットフォームごとに `---` で区切った個別の YAML ドキュメントとして記述します。各ドキュメントで独自の `runs-on` ラベルを宣言します。この形式の詳細については、ブループリントガイドの [複数ドキュメント YAML](/ja/onboard-devin/environment/blueprints#blueprint-sections) の補足を参照してください。

```yaml theme={null}
runs-on: default
initialize: |
  apt-get update && apt-get install -y build-essential

maintenance: |
  npm install

knowledge:
  - name: test
    contents: npm test

---
runs-on: macos
initialize: |
  brew install cocoapods

maintenance: |
  npm install
  (cd ios && pod install)

knowledge:
  - name: test
    contents: npm test
```

各ドキュメントは、それぞれのプラットフォーム向けに個別のスナップショットのビルドを生成します。セッションはプラットフォーム固有のスナップショットから起動します。

<Warning>
  トップレベルのYAMLは、シーケンスではなくマッピングである必要があります。上記の使用例を単一のリスト (`- runs-on: default` / `- runs-on: macos`) として記述すると、バックエンドで拒否されます。上に示した`---`区切りを利用してください。
</Warning>

<div id="the-runs-on-field">
  ## `runs-on` フィールド
</div>

`runs-on` フィールドは、アカウントに登録されている machine config に対応します。

| 値                     | プラットフォーム               |
| --------------------- | ---------------------- |
| `default` または `linux` | Linux (デフォルトのプラットフォーム) |
| `macos`               | macOS                  |
| `windows`             | Windows                |

`runs-on` は文字列またはリストで指定できます。

```yaml theme={null}
# 単一プラットフォーム
runs-on: macos

# 1つのブロックで複数プラットフォームを指定（各プラットフォームで同じコマンドを実行）
runs-on: [default, macos]
```

<Warning>
  リスト構文では、リストに含まれるすべてのプラットフォームで同一のコマンドが実行されます。コマンドが完全にクロスプラットフォームである場合 (例: `npm install`) にのみ利用してください。プラットフォーム固有のコマンド (Linux の `apt-get` や macOS の `brew` など) には、代わりに[マルチドキュメント形式](#multi-platform-blueprint)を利用してください。
</Warning>

<div id="usage-and-cost">
  ## 使用量とコスト
</div>

macOS セッションの使用量は、同等の Linux または Windows セッションと同じです。macOS による追加料金はありません。使用量の計測方法の詳細は、[使用量](/ja/admin/billing/usage#macos-sessions)を参照してください。

<div id="whats-preinstalled">
  ## プリインストールされているもの
</div>

macOS のセッションイメージには Apple のツールチェーンがあらかじめインストールされているため、ブループリントでダウンロードする必要はありません。

| カテゴリ        | 含まれるもの                                                                                                                  |
| ----------- | ----------------------------------------------------------------------------------------------------------------------- |
| Xcode       | 既定として `/Applications/Xcode.app` に配置された最新の Xcode 26 リリースと、それに加えて Xcode 27 のプレリリース (例: `/Applications/Xcode-27.0-RC.app`) |
| シミュレーター     | インストール済みの Xcode ごとに 1 つの iOS シミュレーターランタイム (iOS 26 と iOS 27) 。それぞれに設定済みの iPhone デバイスが付属                                  |
| Apple のツール類 | `xcodebuild`、`xcrun`、`simctl`、Swift、Metal ツールチェーン                                                                       |
| パッケージマネージャー | `/opt/homebrew` の Homebrew                                                                                              |
| 言語          | Node.js、Python、Java、Rust (および `npm`、`yarn`、`pnpm`)                                                                      |
| CLI ツール     | `git`、`git-lfs`、`gh`、`jq`、`ripgrep`、`ffmpeg`、`wget`、`direnv`                                                            |
| Browser     | Google Chrome                                                                                                           |

バージョンは、Apple が新しいリリースを提供しイメージが更新されるのに合わせて変わります。セッションに実際に何が入っているかを確認するには、Devin に次のコマンドの実行を依頼してください。

```bash theme={null}
sw_vers
xcodebuild -version
ls -d /Applications/Xcode*.app
xcrun simctl list runtimes
```

<div id="selecting-an-xcode-version">
  ### Xcode のバージョンを選択する
</div>

デフォルトの Xcode は `xcode-select` が指しているものです。特定のコマンドだけ別のインストール済みバージョンを利用するには、`DEVELOPER_DIR` を設定してください:

```bash theme={null}
DEVELOPER_DIR=/Applications/Xcode-27.0-RC.app/Contents/Developer /usr/bin/xcodebuild -version
```

`PATH` 上にある特定の Xcode の `Contents/Developer/usr/bin` から解決される `xcodebuild` は、`DEVELOPER_DIR` に関係なく自身のバージョンを報告します。そのため、これではなく `/usr/bin/xcodebuild` (`DEVELOPER_DIR` を尊重するシム) を利用してください。

あるいは、セッション全体のデフォルトを切り替えることもできます:

```bash theme={null}
sudo xcode-select -s /Applications/Xcode-27.0-RC.app
```

必要なバージョンをブループリントに記述しておけば、すべてのセッションが適切なツールチェーンで開始されます。

<div id="macos-session-behavior">
  ## macOS でのセッションの動作
</div>

<div id="shell">
  ### Shell
</div>

macOS セッションでは、デフォルトのシェルとして **zsh** を利用します。ほとんどの POSIX シェルコマンドは Linux のブループリントからそのまま動作しますが、BSD 系ユーザーランドである点にご注意ください。`sed -i` には引数が必要で (`sed -i ''`) 、`gsed`、`gdate`、`greadlink` といった GNU ツールは Homebrew の `coreutils` フォーミュラで提供されます。

<div id="paths">
  ### パス
</div>

```yaml theme={null}
# Linux のパス
- run: cp config.json ~/.config/myapp/config.json

# macOS のパス
- run: cp config.json /Users/devin/.config/myapp/config.json
```

リポジトリは `/Users/devin/repos/<repo-name>` にクローンされ、セッションにアップロードしたファイルは `/Users/devin/.files/` に書き込まれます。

<div id="secrets">
  ### シークレット
</div>

[シークレット](/ja/product-guides/secrets)は、Linuxの場合と同様に、セッション中は環境変数 (`$SECRET_NAME`) として利用できます。App Store Connect のAPIキー、署名用の認証情報、非公開レジストリのトークンなどは、この方法で渡します。

```yaml theme={null}
maintenance:
  - name: "Configure private Swift package registry"
    run: |
      git config --global url."https://$GIT_TOKEN@github.com/".insteadOf "https://github.com/"
```

<div id="session-sleep-and-wake">
  ### セッションのスリープと復帰
</div>

セッションはスリープ時にディスクへスナップショットを保存します。ディスク上のデータはすべて復帰後も保持されます。インストール済みのツール、クローンしたリポジトリ、ビルドキャッシュ、由来データなどです。一方、実行中のプロセスは保持されません。開発サーバー、シミュレーター、ウォッチャーは、セッションの復帰後に再起動する必要があります。

<div id="computer-use">
  ### Computer Use
</div>

[Computer Use](/ja/work-with-devin/computer-use) は macOS セッションで利用できます。Devin には Chrome、マウス、キーボードを備えた完全な macOS デスクトップが与えられ、Web アプリだけでなく macOS ネイティブアプリもテストでき、その操作を[録画](/ja/work-with-devin/testing-and-recordings)できます。macOS のショートカット (⌘C、⌘V、⌘Tab) には、Control ではなく Command キーを使用します。

<div id="ios-simulator">
  ### iOS シミュレータ
</div>

Devin は iOS シミュレータ を直接起動して操作できます：

```bash theme={null}
open -a Simulator                  # デフォルトのデバイスを起動
xcrun simctl list devices          # 利用可能なデバイスを確認
xcrun simctl boot "iPhone 17"      # 特定のデバイスを起動
xcrun simctl install booted MyApp.app
xcrun simctl launch booted com.example.MyApp
```

セッションワークスペースの **iOS シミュレータ** タブでは、起動中のシミュレータがストリーミング表示され、Devin がアプリを操作する様子をリアルタイムで確認できます。[Android エミュレータのサポート](/ja/onboard-devin/environment/android-emulation) の Apple 版にあたる機能です。

<div id="tips-tricks">
  ## ヒントとコツ
</div>

<div id="warm-build-caches">
  ### ビルドキャッシュのウォームアップ
</div>

Xcode のコールドビルドはビルド時間が長くなり、開発体験が損なわれます。`environment.yml` の `maintenance` フィールドを利用して、キャッシュを事前にウォームアップしてください。

```yaml theme={null}
runs-on: macos

initialize:
  - name: "Install tooling"
    run: brew install cocoapods xcodegen swiftlint

maintenance:
  - name: "Resolve dependencies and warm the build"
    run: |
      xcodebuild -resolvePackageDependencies -project MyApp.xcodeproj -scheme MyApp
      xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 17' build-for-testing
  - name: "Pre-boot the simulator"
    run: xcrun simctl boot "iPhone 17" || true
```

解決済みの Swift パッケージ、CocoaPods、DerivedData は スナップショット に保持されるため、新しい セッション は増分ビルドから開始できます。

<div id="network-access">
  ### ネットワークアクセス
</div>

CocoaPods、Swift Package Manager、Firebase、あるいは非公開レジストリから取得するbuildでは、これらのホストに到達できる必要があります。組織が制限付きのnetwork policyで運用されている場合は、macOS側の許可リストがLinuxのbuildで利用するregistriesを同じように網羅しているか確認してください。両者は個別に設定するため、項目が漏れているとbuildの途中で依存関係の解決エラーやTLSエラーとして現れるのが一般的です。

<div id="running-containers">
  ### コンテナの実行
</div>

macOS VMではネストされたハードウェア仮想化が利用できないため、コンテナのruntimeはQEMUのソフトウェアエミュレーション (TCG) にフォールバックするしかありません。Colimaはこれを検出して、自動的にエミュレーションに切り替えます:

```bash theme={null}
brew install colima docker qemu lima
colima start --vm-type qemu --arch aarch64 --cpu 4 --memory 8 --disk 30
```

VM が利用可能になるまでには 2〜4 分かかります。また、エミュレートされたゲストがネットワークを起動している間に SSH の待機がタイムアウトし、初回起動が失敗することがあります。その場合は `colima start` を再実行してください。起動後、container は CPU 上でネイティブの約 15〜25 倍遅く動作し、それぞれ起動に数秒かかります。pull はホストのネットワーク速度で行われます。リントやパッケージング用の container であれば問題ありませんが、コンパイル用途では厳しいでしょう。container を多用する作業では、Linux セッションを利用するか、macOS セッションからリモートの Docker デーモンを参照するようにしてください。

<div id="dont-install-xcode-in-a-blueprint-unless-you-have-to">
  ### 必要な場合を除き、ブループリントで Xcode をインストールしない
</div>

Xcode はダウンロードサイズが数ギガバイトに及び、ダウンロードには Apple ID が必要です。`DEVELOPER_DIR` や `xcode-select` で選択できる、イメージに既に含まれているバージョンを優先してください。別のリリースやベータ版が必要な場合は、Apple ID を[シークレット](/ja/product-guides/secrets)として保存し、ブループリントでそのバージョンをダウンロードさせることもできますが、ビルドは大幅に遅くなります。

<div id="limitations">
  ## 制限事項
</div>

| 制限事項          | 詳細                                                                                            |
| ------------- | --------------------------------------------------------------------------------------------- |
| Docker とコンテナ  | ネストされたハードウェア仮想化に対応していないため、コンテナはソフトウェアエミュレーション上で動作します。[コンテナの実行](#running-containers)を参照してください。 |
| 物理デバイス        | USB パススルーに対応していないため、ビルドとテストは実機の iPhone や iPad ではなくシミュレーター上で実行されます。                            |
| Xcode のダウンロード | 別の Xcode やシミュレーターランタイムを取得するには、Apple ID の認証情報の入力と長時間のダウンロードが必要です。                              |
| パフォーマンス測定     | VM 内で Instruments のような計測やプロファイリングを行っても、実機のパフォーマンスを正しく反映した結果にはなりません。                           |

<div id="troubleshooting">
  ## トラブルシューティング
</div>

**スナップショットの再ビルド後、最初のセッションでビルドが大幅に遅くなる。** DerivedData がゼロから再生成されたためです。`maintenance` に `build-for-testing` のステップを追加し、ビルド済みの状態をスナップショットに含めてください。

**`xcodebuild` が誤ったツールチェーンを選択する。** `xcode-select -p` を確認し、ブループリントのステップで `DEVELOPER_DIR` を明示的に設定してください。

**デスティネーションが見つからない。** `xcrun simctl list devices available` を実行して、インストール済みのランタイムで実際に利用できるデバイスを確認し、`-destination` の名前と OS をそれに合わせてください。

**依存関係の解決がハングする、または TLS エラーで失敗する。** 対象のホストが、macOS 向けの組織のネットワークの許可リストに含まれていない可能性があります。[ネットワークアクセス](#network-access)を参照してください。
