チームで開発に取り組んでいると、メンバーによって開発に使っているマシンの性能がちがうことがあります。例えば、僕はMacBook Pro 15インチでCPUが4つ乗っているものを使っていますが、別のメンバーはデュアルコアのMacBook Proを使っていたりします。
Vagrantでは、VMのCPUの数をVagrantfileに設定することができますが、チームでCPUの数が違うマシンを使っていると、どうしてもCPUが少ないメンバに合わせて設定することになってしまいます。そうなると、CPUが多いマシンでは、せっかくの性能がVMで活かせなくなります。
VagrantfileでホストマシンのCPUの数に応じて、VMのCPUの数を自動的に変更する方法をご紹介します。Macではsysctl -n hw.ncpu
で、Linuxではnproc
でCPUの数を取得できます。これをVagrantfileに埋め込み、VMの設定に使うようにします。
以下のサンプルは、ホストマシンのCPUの数を取得し、VMのCPU数にそのまま設定するものです。VMのproviderにはVMware Fusionを使っていますが、Virtualbox用の設定を書くこともできます。また、取得したcpus
を2で割ったり、ホスト用に1つCPUを残しておきたければ、cpus - 1
するなど、好きなように調整することもできます。
Vagrantfile
...
host = RbConfig::CONFIG['host_os']
case host
when /darwin/ # mac
cpus = `sysctl -n hw.ncpu`.to_i
when /linux/
cpus = `nproc`.to_i
else
cpus = 2
end
config.vm.provider "vmware_fusion" do |v|
v.vmx["numvcpus"] = cpus
end
...