
Linuxであればdockerなどを使って簡単にテストなどを行える仮想環境を手に入れられますが、 macOSの仮想環境はどうなのか。
macOSのライセンス
Macを買うとその中でmacOSが使えて 新しいバージョンが出ても無料でアップデートできますが、 現状Windowsなどと違ってmacOSを単体で購入することはできません。
ソフトウェア自体は無料で入手することができますが、 ライセンスはどうなっているのか?
macOS(Sequoia 15.4.1)で メニューバーのアップルマークこのMacについて詳細情報使用許諾契約** を見てみると2.B項に以下のようなことが書いてあります。
(i)お客様が所有または管理する、macOS Sonoma、macOS Ventura、macOS Monterey、macOS Big Sur、macOS Catalina、macOS Mojave、またはmacOS High Sierra(以下「Macコンピュータ」といいま す)を実行している各Appleブランドのコンピュータで直接、Appleソフトウェアのコピーを1部、個人的な非 商用利用のためにダウンロードし、インストールし、使用し、実行するため。
(ii)お客様が営利企業または教育機関である場合、次のいずれかの用途でAppleソフトウェアのコピーを1部 ダウンロードし、インストールし、使用し、実行するため:(a)お客様が所有または管理する各Macコン ピュータでの単一の個人による使用、または(b)お客様が所有または管理する1台のMacコンピュータでの複 数の個人による使用。例えば、社員1人が、自身のデスクトップおよびラップトップのMacコンピュータの両方 でAppleソフトウェアを使用する場合、または複数の生徒が、リソースセンターもしくはライブラリに存在す るMacコンピュータ1台でAppleソフトウェアを順次使用する場合。ならびに
(iii)お客様が所有もしくは管理する、Appleソフトウェアをすでに実行しているAppleブランドの各コン ピュータ上の仮想オペレーティングシステム内で、Appleソフトウェア、または以前のmacOSもしくはOS Xオ ペレーティングシステムソフトウェアもしくはAppleソフトウェアの後続のリリースの、追加のコピーもしくは インスタンスを最大2部、次の目的のためにインストール、使用、実行するため:(a)ソフトウェア開発、 (b)ソフトウェア開発中のテスト、(c)macOS Serverの使用、または(d)個人的な非商用利用。
- (i): 通常のMacでmacOSを使っても良いよ
- (ii): 教育機関や営利企業なら1台のMac(およびその中に入ってるmacOS)を複数で使っても良いよ
があり、さらに
- (iii): macOSが入ってるMacでテストなどのために仮想環境としてmacOSを最大2つまで使っても良いよ
ということが書いてあります。
つまり、macOSの仮想環境が欲しい場合はmacOSが入ってるMacの中になら作ることができる、ということです。 ただし商用で貸出したりみたいなことは許可されてません。 また、Macであってもいくらでも作ってよいわけではなく最大2つまで、ということです。
GitHub Actionsみたいなのは多分特別なライセンスが必要なんだと思います。
WindowsのVirtualBoxなどにmacOSをインストールするとかはライセンス違反です。 MacでもWindowsを入れてその中でmacOSを仮想環境として動かすのも駄目なようです。
ということで、Windowsしか持ってないけどmacOSの環境がほしい、というのは根本的に無理な話みたいです。
一方でMacを持っている場合は、macOSの中に仮想環境を作ることはライセンス的には問題ない、ということになります。
macOSの仮想環境を作る方法
VMwareなどの仮想マシンにmacOSをインストールして使うことは 上にも書いた通りMacで動かしているmacOSの中であれば合法です。
それ以外にも VirtualBuddy、 virtualOS、 UTM みたいなソフトウェアがあります。
これらはちょっとセットアップが大変だったり 起動する際に時間がかかったりしますが、 Appleは Virtualization Framework というものを提供していて、 これだとXcodeが入っていれば別途ソフトウェアを入れずに仮想環境を作ることができます。
さらに、このVirtualization Frameworkを使いやすくした tart とか c/ua といったソフトウェアがあります。
tartのほうが前からあってよく使われていたようですが、 ライセンス ライセンスが Fair Source License なのでちょっと注意が必要です。(個人で普通に使う分には余裕な許容量ではありますが。)
c/uaの方は数ヶ月前に出てきたものみたいで、 特に最近のAI agentブームの中で AIが直接操作するようなこともできるようにしています。 ライセンスはMITです。 後発ということで色々と考えて作られてることもあるようで、 このc/ua、及びそのコマンドラインツールの lume が使って見た感じ今のところ一番手軽で良さげでした。
c/ua、lume
数ヶ月前にできたばかりのようで、簡易にnativeな環境にできるだけ近い仮想環境を作れるものとして作られています。
Show HN: Lume – OS lightweight CLI for MacOS and Linux VMs on Apple Silicon Hacker News 特にfor Computer-Use Agentということで、
Pythonで直接操作したり、LLMを使ったAgentが用意されたりしています。
ここでは lume というコマンドラインツールで仮想環境を立ち上げることについて簡単に。
lumeのインストール
インストールは公式スクリプトで
1
|
|
とするか、Homebrewで
1
|
|
でインストールできます。
イメージの準備
使えるイメージは Packages · Cua にあるものです。
現状OSの種類としては2つ、macOS Sequoia (15)とUbuntu Noble Numbat (24.04) があり、それぞれ入っているパッケージなどの違いなど含め全部で8つイメージがあります。
なのでLinuxのいろいろなものを試してみたい、という場合は現状ではまだあまりできない状態ではあります。
とりあえず、適当にXcodeが入ったmacOSを用意。
1
|
|
これでイメージがダウンロードされますが、20GB位あり、数分かかります。
ダウンロードが終わったらlume ls
で確認してみます。
1 2 3 |
|
名前はmacos-sequoia-xcode:latest
でもmacos-sequoia-xcode_latest
でも通るみたいです。(:
は_
と同値としている?)
とりあえず起動
準備ができたので起動:
1
|
|
これでウィンドウが出てきてmacOSが起動します。
初回だけいきなりログイン状態になる?ようです。
初期状態のユーザー名とパスワードはともにlume
になっています。
これでmacOSの中で別のmacOSを動かせます。
ただいくつか制限はあるようで、 特にApp Storeにサインインすることができません。
なのでApp Store経由でのアプリのインストールなどが出来ません。 少し改善されてiCloudへはXcodeのβ版を使えばサインインできるようになったようです。
それ以外だと特に出来ないことはないようには見えますが、実際の環境とは少し違うところがあるので注意です。
また、使っているmacOSとは別環境になるので、例えばネットワーク環境的に証明書をインストールする必要がある場合などは 仮想環境の中へも持っていってインストール必要があります。
止めるときは別のターミナルから
1
|
|
で止めます。
これで色々と中で操作したことに関しては保存されます。
GUIなしで起動
いろいろなサービスやツールをチェックする場合にはGUIが不要な場合も多いですが、
lumeでは--no-display
オプションでGUIなしでも起動することができます。
1
|
|
これで起動しますが、ウィンドウは出てきません。 別のターミナルからチェックしてみると
1 2 3 |
|
こんな感じの表示になっていて、ip
が192.168.64.2
になってることがわかります。
ここへssh
で接続することが出来ます。
1 2 3 |
|
ユーザー名lume
, パスワードlume
でログインできます。
ディレクトリ共有
--shared-dir
で元のmacOS側のディレクトリを仮想環境の中に共有することが出来ます。
1
|
|
これで、起動した際にいたディレクトリ($PWD
)が仮想環境の中に/Volumes/My Shared Files
という名前でマウントされます。
ro
はread onlyの意味で、書き込みはできません。
rw
にすると書き込みもできるようになります。
ただし、マウントしたあとで、元のmacOS側でファイルを変更すると 変更したファイルは仮想環境の中ではPermission deniedになってアクセスできなくなります。
これはちょっと不便なところで変更したファイルを仮想環境内で使いたいと思うと一旦lume
を止めて改めて立ち上げる必要があります。
ちゃんと止める
lume run
したターミナルでCtrl-Cを押すと止まりますが、
正常終了にはならずに起動中に操作したことが保存されないことがあります。
他のところからrun stop
すれば良いのですが、ちょっと面倒なので
こんな感じのスクリプトを作っておくと便利です。
1 2 3 4 5 6 7 8 9 |
|
これでスクリプトを実行したディレクトリを仮想環境に共有します。
さらにCtrl-Cを押すとlume stop
が実行されてただしく終了するようになります。
ただ、これでもたまにプロセスが残ってしまうことがあり、次に
lume run
しようとするとすでに走っているとのエラーが出ることがあります。
lume ls
で確認してrunning
になっているものがあればもう一度それに対してlume stop
してみます。
もしrunnin
ではないのにlume run
が失敗するときは
1
|
|
とかでlume run
したプロセスが残ってないか確認して残っていたらそのPIDをkill
します。
現状ではここまですれば再度使えるようになっています。