パッケージ管理ソフトChocolateyを使ってみる

こんにちは、株式会社SHIFT、自動化エンジニアの水谷です。

最近Linux系OSを使って仕事をする機会が増えてきたのですが、そこで感じたことの1つは、パッケージ管理ソフトは便利だな、ということです。

Linux系OSでのソフトウェアのインストールは、Windowsのそれとは異なり、apt-getやyumのようなコマンドラインベースのパッケージ管理ソフトを使うことが一般的です。これらのソフトを使えば、コマンド1つでソフトウェアが安全にインストールできるし、アップデートやアンインストールもできて便利で、しかもインストールの自動化もしやすいのです(MacではHomebrewがこれに相当しますね)。このようなパッケージ管理ソフトがWindows用にはないのかな? と、いうと実はあります。今回はその1つであるChocolateyを紹介してみたいと思います。


Chocolateyのインストール

まずはChocolateyをインストールするのですが、その方法はちょっと変わっています。公式サイトの以下のページに書いてあるのですが、ちょっと長いコマンドを管理者権限のPowershellプロンプトで実行するのです。
https://chocolatey.org/install

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

コマンドでインストールする仕様になっている理由は、Chocolateyのインストール自体も自動化しやすくするためかと思いますが、いずれにせよこのコマンドをコピペして実行すれば数十秒でインストールが終わります。

画像1

インストールが終わりましたら、一度Powershellプロンプトを閉じて、もう一度Powershellプロンプトを開いてください。ここで「choco」と入力してバージョン番号が表示されたらインストール成功です。

PS C:\WINDOWS\system32> choco
Chocolatey v0.10.15
Please run 'choco -?' or 'choco <command> -?' for help menu. 

Chocolateyを使ってみる

さて、さっそく使ってみましょう。例としてFirefoxをインストールしてみます。アプリのインストールコマンドは「choco install <アプリ名>」なので、Firefoxをインストールする場合は、「choco install Firefox」となります。

画像2

途中でスクリプトを実行するかどうかの質問がありますので、「Y」を押してエンターキーを押します。これで、Firefoxがダウンロードされて、C:¥Program Files\Mozilla FirefoxにFirefoxにインストールされます。簡単ですね。

なお、「choco install Firefox -y」のように、最後に「-y」と書いておくと、インストール中の質問に自動的にYesで答えてくれるので、より簡単にインストールができ、バッチファイル等でも自動インストールができるようになります。

また、インストール済みのアプリをアップデート(最新版をインストール)するのも簡単です。例えばFirefoxを最新版にするには、以下のようなコマンドを実行します。

choco upgrade firefox

また、(Chocolateyでインストールした)すべてのアプリを一気にアップデートするには、以下のコマンドを実行します。

choco upgrade all

アプリのアンインストールも同様に、簡単にできます。Firefoxをアンインストールするには以下のコマンドを実行します。

choco uninstall firefox

GUI版のChocolatey

Chocolateyはコマンドラインツールですが、GUIで使うこともできます。これは「Chocolatey GUI」という名前のアプリで、そのインストールもChocolateyで行います。

choco install chocolateygui -y

インストール後、「Cholocatey GUI」を起動すると次のようなウィンドウが開きます。

画像3

インストールしたいアプリを「Search」ボックスで検索し、見つかったアプリをダブルクリックすると、そのアプリの詳細が表示され、右下にある「Install」ボタンを押すとインストールが始まります。

画像4

AnsibleからChocolateyを使ってみる

ChocolateyはAnsibleとの相性も良いです。Ansibleには「win_chocolatey」というChocolateyを使って対象マシンにアプリをインストール(あるいはアップグレードやアンインストール)を行うモジュールが標準で用意されています。

例えば下のようなPlaybookで、インベントリ(Hosts)ファイルに書いたすべてのマシンにGitのインストールができます。

---
- hosts: all
 tasks:
   - name: Install Git using Chocolatey
     win_chocolatey:
       name: git
       state: present

実行すると、以下のように表示されました。WARNINGの行にあるように、対象マシンにはChocolateyがインストールされていなかったので、自動的にChocolateyがインストールされました。便利ですね。

画像5

また、複数のアプリをインストールするには、以下のようなPlaybookが使えます。with_items:にインストールしたいアプリを列挙しておけば、これをすべてインストールしてくれます。

---
- hosts: all
 tasks:
   - name: Install App
     win_chocolatey: name={{ item }}
     with_items:
     - firefox
     - googlechrome
     - notepadplusplus

また、AWXを使って、以下のPlaybookを1週間に1度定期実行するようにしておけば、すべての(Chocolateyでインストールした)アプリをアップデートしてくれたりします。 

​---
- hosts: all
 tasks:
   - name: Upgrade installed packages
     win_chocolatey:
       name: all
       state: latest

このように便利なChocolateyですが、すべてのアプリがこれでインストールできるわけではなく、Chocolateyに登録されているアプリのみですし、有償アプリは(ほとんど?)含まれていません。とはいえ、現在登録されているアプリ(正確にはPackage)は7688もあるので(2020年7月現在)、かなり多いと言えるかと思います。


このようにとても便利はChocolateyですが、これに対してMicrosoftは、Windows用のパッケージ管理ソフトとして「winget」を開発しています(2020年5月にプレビュー版をリリース済み)。将来的にはこっちが本命になる可能性もありますので、そちらの方も注目していきたいと思います。

――――――――――――――――――――――――――――――――――

執筆者プロフィール:水谷裕一
大手外資系IT企業で15年間テストエンジニアとして、多数のプロジェクトでテストの自動化作業を経験。その後画像処理系ベンチャーを経てSHIFTに入社。
SHIFTでは、テストの自動化案件を2件こなした後、株式会社リアルグローブ・オートメーティッド(RGA)にPMとして出向中。RGAでは主にAnsibleに関する案件をプレーイングマネジャーとして担当している。

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら 
https://recruit.shiftinc.jp/career/