クイックスタート:3つのコマンドでmacOS/Linux仮想マシンを起動
Apple Silicon(M1〜M4チップ)環境において、VirtualBoxやVMware Fusionの導入は動作が重く煩雑に感じられることが少なくありません。Tartはこの課題をスマートに解決し、すべての操作をターミナルだけで完結させます。
Homebrewを使用したTartのインストール:
brew install cirruslabs/cli/tart
バージョンのクイック確認:
tart --version
GitHub Container Registryからビルド済みのUbuntu 22.04 LTS ARM64イメージを取得:
# イメージをプルし、ローカルの仮想マシン名をmy-ubuntu-vmに設定
tart clone ghcr.io/cirruslabs/ubuntu:latest my-ubuntu-vm
GUIウィンドウを開かず、バックグラウンド(ヘッドレスモード)で仮想マシンを起動:
tart run --no-graphics my-ubuntu-vm &
仮想マシンがIPアドレスを取得するまで3〜5秒ほど待機し、SSHで直接接続:
# 自動割り当てされたIPアドレスを取得
VM_IP=$(tart ip my-ubuntu-vm)
# Cirrus Labsイメージのデフォルトユーザー名とパスワードは admin / admin
ssh admin@$VM_IP
仮想マシンはほぼ一瞬で起動し、すぐに独立したARM64 Linuxシェル環境で作業を開始できます。
詳細解説:Tartとは?なぜApple Siliconに最適化されているのか
テスト用途でx86ベースのProxmoxなどによるホームラボを構築した経験がある方なら、ネイティブなmacOS環境が必要になった際の歯がゆさを実感したことがあるでしょう。x86ハードウェアではAppleのARMアーキテクチャをスムーズにエミュレートできません。Tartはそのギャップを埋めるために誕生しました。
Cirrus Labsによって開発されたTartは、macOSネイティブのApple Virtualization.framework上で直接動作します。余分なエミュレーション層を介さず、仮想マシンのCPUとRAMがApple Siliconハードウェアにダイレクトにマッピングされます。その結果、Linux仮想マシンの起動時間はわずか2〜3秒、macOSでも約12〜15秒で完了し、アイドル時のCPU使用率は1%未満に抑えられます。
OCIネイティブアーキテクチャ:仮想マシンをコンテナのように扱う
VagrantやParallelsに対するTartの最大の強みは、そのパッケージング方式にあります:
- コンテナレジストリ形式でのパッケージング: 仮想ディスク全体(disk.img)と設定(config.json)を、GHCR、AWS ECR、Docker HubなどのOCI標準レジストリへプッシュできます。
docker pullと同じ感覚で仮想マシンのプルやプッシュが可能です。 - APFSによる瞬時のクローン: macOSのAPFSが持つCopy-on-Write(CoW)機能を活用することで、60GBの仮想マシンを対象にした
tart cloneでもわずか300ミリ秒ほどで完了します。新規ファイルの書き込みが発生するまで物理データは複製されません。
基本操作コマンド
日常的な運用でよく使うコマンド一覧:
# 既存の仮想マシン一覧を表示
tart list
# 割り当てられたリソース(CPU、RAM、ディスクサイズ)を確認
tart get my-ubuntu-vm
# スペックを4 vCPU、8GB RAMに変更
tart set my-ubuntu-vm --cpu 4 --memory 8192
# 仮想マシンを安全に停止
tart stop my-ubuntu-vm
# 不要になった仮想マシンを完全に削除
tart delete my-ubuntu-vm
応用編:使い捨て仮想マシン(Ephemeral VM)を用いたCI/CDパイプラインの構築
Tartは、GitLab RunnerやGitHub Actionsのセルフホストランナーとして極めて有用です。各ビルドジョブにまっさらな仮想マシンが割り当てられ、ビルド完了後に自動破棄されるため、シークレットの流出やディスクの肥大化を気にする必要がありません。
1. 公式macOSイメージの取得
Cirrus Labsは、MontereyからSequoiaまでのmacOSベースイメージを標準提供しています:
# macOS Sonomaのベースイメージを取得(ダウンロードサイズは約25〜30GB)
tart clone ghcr.io/cirruslabs/macos-sonoma-base:latest macos-base
2. ビルドジョブのライフサイクルを管理するシェルスクリプト
CIランナー上で一時VMの作成、テスト実行、クリーンアップまでを自動化する実用スクリプトです:
#!/usr/bin/env bash
set -euo pipefail
BASE_IMAGE="macos-base"
BUILD_ID="job-$$"
echo "[1/4] スナップショットから一時VMをクローン: $BUILD_ID"
tart clone "$BASE_IMAGE" "$BUILD_ID"
echo "[2/4] ヘッドレスモードでVMを起動中..."
tart run --no-graphics "$BUILD_ID" &
# VMのIPアドレス取得をポーリング待機(最大30秒)
echo "[3/4] DHCPからのIP取得を待機中..."
VM_IP=""
for i in {1..30}; do
VM_IP=$(tart ip "$BUILD_ID" 2>/dev/null || true)
if [ -n "$VM_IP" ]; then break; fi
sleep 1
done
if [ -z "$VM_IP" ]; then
echo "エラー: 30秒以内にIPアドレスを取得できませんでした!"
tart stop "$BUILD_ID" && tart delete "$BUILD_ID"
exit 1
fi
echo "VM準備完了 ($VM_IP)。ビルドタスクを実行中..."
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 admin@"$VM_IP" << 'EOF'
sw_vers
xcodebuild -version
# ここにテスト実行やアプリビルドのコマンドを記述
EOF
echo "[4/4] 仮想マシンをクリーンアップ中..."
tart stop "$BUILD_ID"
tart delete "$BUILD_ID"
echo "クリーンアップ完了。"
3. VirtioFSによるディレクトリ共有
数ギガバイトに及ぶリポジトリを仮想マシンへ転送するためにrsyncやscpを使用する必要はありません。TartはネイティブVirtioFSを統合しており、ホストNVMeドライブの約80〜90%に匹敵する読み書き速度を実現します:
# ホスト側のプロジェクトディレクトリをVMにマウント
tart run --dir=workspace:/Users/admin/my-project my-ubuntu-vm
LinuxゲストOS側でディレクトリをシステムツリーにマウントします:
sudo mkdir -p /mnt/workspace
sudo mount -t virtiofs workspace /mnt/workspace
Tart運用の実践的なTips・注意点
- macOS仮想マシンは最大2台の制限: Appleのソフトウェア利用許諾契約(EULA)により、1台のMac上で同時に実行できるmacOS仮想マシンは最大2台までに制限されています。2台を超えて起動しようとすると仮想化フレームワークからエラーが返されます。
- ディスク容量の肥大化対策: CoWによりクローンは高速ですが、XcodeのビルドによってDerivedDataディレクトリが数十GBに膨らむとホストのディスク容量を圧迫します。定期的に
tart listを確認し、不要な孤立VM(orphaned VM)を削除してください。 - 適切なリソース割り当て: メモリ16GBのMacの場合、仮想マシンへの割り当ては最大8GBにとどめるのが賢明です。macOSホストがWindowServerやスワップキャッシュ、バックグラウンド処理を快適に維持するために最低でも6〜8GBの空きメモリが必要です。
- IP取得の遅延対策: 起動後、仮想NICがホストブリッジからDHCPリースを取得するまでに3〜8秒ほどかかる場合があります。固定の
sleepを入れるのではなく、タイムアウト判定を含むポーリングループを実装してください。
