virtualboxからvmware fusionへ乗り換えしました。

# virtualboxからvmware fusionへ乗り換えしました。

## きっかけ

macOS Mojaveが出たので、クリーンインストールをしました。
新しいmacOSが出ると僕はいつもクリーンインストールをします。
文書ファイルはiCloud、写真や動画、電子書籍のようにサイズが大きいファイルはGoogle Driveにいつもバックアップしています。
クリーンインストールをするとき、以前のmacOSはbootable usbを作る必要がありましたが、今度は要りませんでした。
手順はとても簡単です。

* App StoreからmacOS Mojaveにアップグレードします。
* 再起動してアップルのロゴが表示される前から⌘＋Rを押します。
* ディスクユーティリティを実行して既存macOSが設置されたディスクを削除してmacOSをインストールします。

macOS環境をAnsibleのplaybookで管理していました。
Ansibleのplaybookを実行することでクリーンインストールは完了です。

しかし、問題がいくつか発生しました。
kobitoみたいに元々はApp Storeにあったアプリがなくなったとかhomebrewのパッケージのchecksumが異なることでエラーになるとかなどなど
これらは大した問題ではありません。
一番困ったのはvagrantでvirtualboxを起動するとvboxheadlessがcpuを100%使用し続けることでした。

色々調べてvagrant-vbguestというpluginとvirtualbox-extension-packを設置してvboxheadlessのcpu使用率を5%にすることができました。
これらを設置した後、既存のvirtualboxはdestroyして新しく設置する必要があります。
しかし、この方法もmacがスリープモードに入って戻るとまたvboxheadlessがcpuを100%使用し続けました。
スリープモードに入る前に全てのvmをhaltしなければなりません。

余計にcpuリソースを使い過ぎるのは困る。
確かにparallelsやvmware fusionもvagrantからサポートされていたはず。
無料でいいけど性能が落ちるvirtualboxから有料のvmへ切り替える時だと思いました。

## parallels vs vmware

parallelsはバージョン10から使っていたのですが、11までアップグレードしてしばらく使っていない状態でした。
launchpadやdockに勝手にwindowsのアプリが追加されたり、毎年アップグレードするように誘導するのも嫌だったので、今度はvmware fusionを使うことに決めました。
vmware fusion用のvagrant pluginをhashicorpから買い、vmwareトライアルに試したところほぼcpuを使っていませんでした。
virtualboxでは平常の時も5%程度は使っていたので、驚きました。

これはなかなかいいではないかと思い、vmware fusionを買おうとしたら、値段が高すぎ！
vsphereが使われるproだと税込で19,753円、hashicorpから販売しているpluginも79ドルなので、全然安くない。
vmware fusion proをもっと安く買える方法はないのかと思って調べたところ、parallelsから乗り換えると40%割引のプロモーションがありました。

https://store.vmware.com/store?Action=html&Locale=ja_JP&SiteID=vmwjapan&pbPage=fusion-vs-parallels

parallels 11のシリアルコードを入力したら該当プロモーションの購入ページへ移動しました。
税込で11,852円、hashicorpのvmware pluginの値段が79＄だから合わせて約２万円の費用が発生します。

parallelsもvagrant用のpluginを提供しています。それも無料で！
しかし、parallels proバージョン以上が必要だし、proバージョンだと1年単位で更新する必要があります。（１年間１万円）
僕はソフトウェアをsubscriptionの方式で利用するのはクラウドを除いて好きではありません。
そして、parallelsはどう見てもエンジニア向けではありません。
vmwareは使っている企業が少ないないため、vmwareの勉強も重ねて考えるとこっちがメリットがあるのではないでしょうか。

## vmware fusionを使う

手順は以下のようになります。

* vagrant-vmware-desktopというvagrantのpluginをインストール
* vagrant vmware utilityをインストール
* providerとしてvmware_desktopを使用

### vagrant-vmware-desktopというvagrantのpluginをインストール

```sh
$ vagrant plugin install vagrant-vmware-desktop
$ vagrant plugin license vagrant-vmware-desktop ~/license.lic
$ vagrant plugin list
```

### vagrant vmware utilityをインストール

以下のURLから最新バージョンをダウンロードします。

https://www.vagrantup.com/docs/vmware/vagrant-vmware-utility.html

dmgファイルになっているので、マウントしてインストールします。
インストールが終わったら、/opt/vagrant-vmware-desktopというディレクトリが生成されます。
このままvagrantを実行すると、権限が足りないというエラーメッセージが表示されます。
sudoをつけてvagrantを実行するか、/opt/vagrant-vmware-desktopの所有者を変更しましょう。

```sh
$ sudo chown -R <アカウント名> /opt/vagrant-vmware-desktop
```

### providerとしてvmware_desktopを使用

Vagrantfileを開いて以下のように設定してください。

```ruby
... snip ...
  config.vm.define :dev do |config|
    config.vm.box = "bento/centos-7.5"
    config.vm.hostname ='dev'
    config.vm.network :private_network, ip: "192.168.33.21"
    config.vm.network :forwarded_port, guest: 22, host: 2221, id: 'ssh'
    config.vm.provider :vmware_desktop do |v|
      v.name = 'dev'
      v.vmx["memsize"] = "2024"
      v.vmx["numvcpus"] = "2"
    end
  end
... snip ...
```

メモリーとcpuのcore数は使う環境に合わせて自由にセットしてください。
vmのboxイメージとしてchef社のbentoを使っていますが、hashicorp社から提供するイメージを使っても構いません。

## 参考

* [vagrant-vmware-desktopのインストールガイド](https://www.vagrantup.com/docs/vmware/installation.html)
* [vagrant上でvmwareの設定](https://www.vagrantup.com/docs/vmware/configuration.html)