MicrosoftはIEやEdgeのテスト、開発環境構築用に無料で使えるWindows仮想マシンを配布しています。
Free Virtual Machines from IE8 to MS Edge - Microsoft Edge Development
Windows 10 仮想マシンをダウンロードする - Windows アプリ開発
仮想マシンソフトウェアはVMWare, Hyper-V, VirtualBox, Parallelsに対応してるのですが、
- VMWare : 無料で使えるのはWindowsにあるPlayerのみ
- Hyper-V : WindowsのPro, Enterprise, Education, Serverのみ
- VirtualBox : アップデートとかで頻繁に起動しなくなるから嫌い
- Parallels : 有料。しかも毎年お金を払わないといけないアップデートを要求してくる。
というわけでMacとLinuxをメインで使ってる僕には非常に困ったラインナップなのです。
KVM使わせろや
というわけで、Microsoft配布の仮想マシンをQEMUで動かします。
環境
x86_64のQEMUが使えるパソコンであれば何でもいいです。
仮想マシンはサイズが大きいのでしっかりしたインターネット環境と十分なディスクの空き容量も必要でしょう。
QEMUはパッケージマネージャーから普通にインストールすればいいと思います。
仮想マシンのダウンロード
Free Virtual Machines from IE8 to MS Edge - Microsoft Edge Development
Windows 10 仮想マシンをダウンロードする - Windows アプリ開発
ここらからHyper-V用の仮想マシンをダウンロードしてください。
"Microsoft Edge Development"からダウンロードできる仮想マシンはIEとEdgeの動作確認用なので、Windowsの標準ソフトウェア以外は何も入ってません。ただWindows動かしたいだけならこっちでいいでしょう。
"Windows アプリ開発"からダウンロードできる仮想マシンには最初からVisual Studioとかの開発環境がインストールされています。でも、その代わりサイズがでかいです。
この記事では"MSEdge on Win10 (x64) Stable (17.17134)"を使ってます。
ちなみに、これらの仮想マシンには使用期限があります。使用期限を過ぎると、最初から仮想マシンを構築し直す必要があります。なので、常用には向きません。あくまでテスト用として割り切って使用してください。
ダウンロードができたらzipファイルを展開しましょう。
それで、仮想マシンといっても重要なのはWindowsが入ってるディスクイメージだけです。仮想マシンの構成ファイルとかは何とでもなります。なので、ダウンロードした中で使うのは"Virtual Hard Disks"フォルダにあるvhdxファイルだけです。
僕がダウンロードした仮想マシンでは"MSEdge - Win10.vhdx"という名前でした。
そして、QEMUではHyper-V用のディスクイメージであるvhdxをそのまま読み込むことができます。
起動するときに使うので適当な作業ディレクトリにコピーしておいてください。
UEFIファームウェアを用意
※いつのまにか、通常のBIOSで起動するようになってました。この手順は必要ありません。
配布されてる仮想マシンは、UEFI環境上にWindowsをインストールしたものになっています。なので、UEFIで起動する必要があるのですが、実はQEMUはそのままだと仮想マシンでUEFIを使えません。
そこで、QEMU上で動くUEFIを使えるファームウェアを用意します。
幸いGithubでビルド済みのファームウェアを配布してくれている人がいたので、ありがたく使わせてもらいます。
GitHub - BlankOn/ovmf-blobs: BIOS.bin for qemu to support UEFI
必要なのはbios64.binというファイルだけなので、これを先ほどのvhdxファイルと一緒の場所にコピーしてください。
起動
あとは、ターミナルでvhdxファイルのあるディレクトリに移動して
qemu-system-x86_64 -m 4096 -smp 2 -hda MSEdge\ -\ Win10.vhdx
で起動できるはずです。
"-m"はメモリサイズ、"-smp"はコア数なので、お使いのホストマシンのスペックによって適宜変えてください。
また、KVMの使える環境ならば"-enable-kvm"を付けるといいでしょう。速くなります。
もちろんMacでも使えますが、KVMは使えないので遅いです。
Hypervisor.frameworkは使えるのかな?
使えたら別記事にしたいと思います。