Docker desktop for windowsとGenymotion同時に使いたいんだよぉ!
きっかけ
Native技術に全く無知な私ですが突然React Nativeに興味が湧いたので @naoshihoshi さんが著した『サンプルコードで作りながら学ぶReactNative実践入門』1を読みました。
環境構築の章を読み、GenymotionというAndroidエミュレータを入れる段階に至ったタイミングでこのGenymotionはVirtualBoxを必要としていることに気が付きました。
しかし私のWindows開発機はdocker desktop for windows用(あと色々遊び用)にHyper-Vが有効化されています。
私の知識ではHyper-VとVirtualBoxの共存は御法度なのでここで躊躇してしました2・・・が、そういえば今のHyper-Vはnestできるのでもしかしたら可能なのでは?と考え調査開始。
この記事はその調査結果をまとめたものになります。
環境は以下の通りです。
- Windows 10 Professional build 18363 + Microsoft-Hyper-V 有効化
- VirtualBox 6.1.4
- Genymotion 3.0.4
Hyper-VとVirtualBox
以前のWindowsではHyper-VとVirtualBoxの共存が不可能でしたがVirtualBox v6からは共存が可能になったことが公式のCHANGELOGに記載されています。
Added support for using Hyper-V as the fallback execution core on Windows host, to avoid inability to run VMs at the price of reduced performance
ところが『Hyper-V VirtualBox 共存』で検索してみるとできなさそうなオーラが漂ってきます。
実際に試してみるとVM自体は立ち上がることがわかりました(Ubuntuをinstallしようとすると成功したりしなかったりで確かに微妙な挙動ですがArch Linuxのinstallでは問題なさそうでした)。
私の環境ではVirtualBox Forumのこのスレッドに記載されている通り、fallbackが正常に働いているようです(CPUインジゲーター部分に亀マークが出ています)。
Genymotionは問題なさそう?
Pixel 3を選びStart...するとVMは起動するものの起動時の Android
の文字でフリーズする現象に。VirtualBoxからターミナル画面を見ると一部のデバイスを正常に読み込めていない様子だったので再起動すると無事Androidのホーム画面が表示され、経由でのました。
その後もいろいろ試しましたがadb経由のアプリの配信もできたので問題はなさそうです。初期化が不安定な問題は解決しませんでしたが・・・。
まとめ
一部挙動に問題が起きるかもしれないが、Hyper-VとVirtual Boxの併用はできる。
-
本題とずれるため、こちらに記載させていただきますがこちらの本はとても勉強になりました。特に第二章は具体的な事例を元になぜReactNativeを採用するに至ったのかを丁寧に解説されているので技術選定に困ったときに参考にできそうです。自分のようなNativeアプリ全く知らないマンにはぜひお勧めしたい1冊です(環境構築の際
adb
にpathを通さないとexpo projectでyarn start
しても正常に動かないことは少しハマってしまいましたので一応メモ)。 ↩ -
一応Kernel起動時のパラメータでHyper-Vを切る or 余っているライセンスでもう一つWindows 10をインストールする等々方法はないことはないのですが、前者はその状況で
Enable-WindowsOptionalFeature -Online -FeatureName Hyper-V
すると大変なことになり(実体験)、後者はBoot Loaderのentry数が増えて管理が大変(既に開発用・ゲーム用・Linuxとtriple bootしている)なのでできれば採用したくない選択肢でした。 ↩