azukipochette's weblog

memory dump (mini)

Vagrant Provision を Chocolatey で快適にした話

以前に Vagrant up するときに Visual Studio を自動インストールする方法を書きましたが、ほかのツールもいろいろとインストールしたいですよね。

Windows のアプリケーションは基本的にサイレント インストールする設計になっていないアプリも多いので、いろいろと面倒なのですが、apt-get install と同じぐらいの手軽さで Windows アプリもインストールさせてよ!と思う人は多いようで、ちゃんとプロジェクトがあります。名前は、"Chocolatey" です。

たぶん .NET 開発者なら知らない人はいないであろう NuGet と呼ばれる技術をバックエンドにつかったもので、choco install でアプリケーションを手軽にインストールできます。

実際のところ、ホスト マシンですら Chocolatey で構築してしまおうという人も多いのですが、サイレント インストールなので細かい設定ができなかったりして、私はあまりホストのセットアップに使うのは好きではありません。 一方、1 日 1 回以上作成する可能性すらある検証マシンの場合、とにかく入ってくれればいいというシチュエーションは少なくなく、Chocolatey との相性は抜群と言えます。

Chocolatey をインストールする

Chocolatey を使うためには、まずは Chocolatey をインストールしなければなりません。 ワンライナーで手軽にインストールできるようにしてくれているので、ありがたくその方法を使います。

インストール方法は以下に記載があります。

https://chocolatey.org/install

Vagrant において Provisioner の 1 つである shell は Windows においては PowerShell を呼び出すよ、と書かれているので Install with Powershell.exe のほうを使いましょう。

具体的には以下のように Vagrantfile を記載します (必要に応じて設定などを追加してください)。

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

# Install Chocolatey inline script
$script = <<SCRIPT
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
SCRIPT

Vagrant.configure("2") do |config|
  config.vm.box = "<your box>"
    config.vm.provision "shell", inline: $script
end

なお、config.vm.provison は複数書けます。複数書いた場合は上から順番に実行されるようです。

Chocolatey でアプリを自動インストールする

Chocolatey でアプリをインストールするには、上記の SCRIPT に追記してもいいですし、次のように PowerShell を呼び出して手動でインストールしてもいいです。 同じ環境を何度も作る必要があるなら SCRIPT に追記したほうがいいですし、一時的にアプリをインストールしたいなら Powershell 経由でもいいですね。

たとえば、Git をインストールする場合は、以下のように実行すれば勝手にインストールしてくれます。

choco install git -y

ポイントは、最後の -y でこれをつけないと "インストールしますか?(Y/N)" な対話型な状態になってしまうので、自動的に Y (Yes) になるよう -y をつけます。 特に Vagrantfile に記載した場合は、インストールに失敗してしまうのでご注意を。

それでは、よい Chocolatey 生活を。Enjoy!