azukipochette's weblog

memory dump (mini)

Vagrant Provision で Visual Studio 2017 を自動的にインストールする話

これまで開発環境を入れたマシンは別途 BOX として持っていたのですが、Visual Studio 2017 の更新の頻度といったら...。とってくるたびに最新版がありますよと確実に言われるような状態です。

実際に開発されている方は特定のバージョンで固定していると思いますが、私の場合は常に最新版にする必要があるので、Visual Studio 2017 が入っている環境を各 OS ごとに準備するのは面倒だし、いっそのことプロビジョニングするか...という気持ちになりました。というわけで、今日は Visual Studio 2017 を vagrant up しただけで勝手にインストールしてくれるようにしようという話です。

Vagrant が Provisioners はいろいろあります。Chef、Ansible...など。Ansible を使ってみようと思ったのですが、Windows ホストでは使えないようなので、今回は素直に shell を使います。vagrant の場合、Windows に対しては WinRM 経由で PowerShell を実行できるので、PowerShell スクリプトを書けばいいわけです。

Provisioning するには、Vagrantfileconfig.vm.provision を追加します。今回の場合は、こんな感じにしました。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "win10_1803"
  
  config.vm.provision "shell", path: "install_vs2017.ps1"
end

こうしておくと、BOX が用意できた段階で WinRM 経由で install_vs2017.ps1 を実行してくれます。

さて、肝心のスクリプトですが、以下のような感じで書きました。

Write-Host "Create workspace directory"
$dir = New-Item -Path "C:\" -Name "workspace" -ItemType "directory" -Force
Set-Location -Path $dir

Write-Host "Downloading Visual Studio 2017..."
Invoke-WebRequest "https://aka.ms/vs/15/release/vs_enterprise.exe" -OutFile "vs_enterprise.exe"

Write-Host "Installing Visual Studio 2017..."
# See the following documents
# https://docs.microsoft.com/en-us/visualstudio/install/use-command-line-parameters-to-install-visual-studio
# https://docs.microsoft.com/en-us/visualstudio/install/workload-and-component-ids
# https://docs.microsoft.com/en-us/visualstudio/install/workload-component-id-vs-enterprise
Start-Process -FilePath ".\vs_enterprise.exe" -Wait -ArgumentList '--add', 'Microsoft.VisualStudio.Workload.CoreEditor', '--add', 'Microsoft.VisualStudio.Workload.ManagedDesktop', '--add', 'Microsoft.VisualStudio.Workload.NetCoreTools', '--add', 'Microsoft.VisualStudio.Workload.NetWeb', '--quiet'

スクリプトを読めばわかりますが、C ドライブ直下に workspace というフォルダーを用意して、最新版の Visual Studio 2017 Enterprise のインストーラーをダウンロードします。そして、コマンドラインでインストールします。

今回の場合、次のコンポーネントをインストールしますが、この辺はお好みで調整してください。

  • コア エディタ (Microsoft.VisualStudio.Workload.CoreEditor)
  • .NET デスクトップ開発 (Microsoft.VisualStudio.Workload.ManagedDesktop
  • .NET Core クロス プラットフォーム 開発 (Microsoft.VisualStudio.Workload.NetCoreTools)
  • .NET Web 開発 (Microsoft.VisualStudio.Workload.NetWeb

C++ のプロジェクトを追加したいのだけど?というような場合は、下記の URL から Component ID を調べて、引数に追記してください。

これで、vagrant up すれば Visual Studio 2017 がインストールされた環境が手に入ります。素敵ですね。

では、よい Vagrant Provision 生活を。Enjoy!