Chocolateyでパッケージ管理

はじめまして。
以前はWEBサーバーのインフラを担当していたのですが、半年前から社内システムを担当しています。
その中で少し便利だった機能を紹介出来ればと思います。


## 背景
リブセンスでは従業員が使用するPC（Windows7）に以下のソフトをインストールして渡しています。

・Thunderbird
・FireFox

これらのソフトウェアはプロファイルに依存するので、イメージに追加することが出来ません。
そこで初期状態のPCをPXEブートで構築した後に手動でインストールを行っています。

手順としては毎回最新のインストーラーをサイトからダウンロードして実行する手順なのですが、これが何台もあると手間で、どうにか楽出来ないかなと考えた結果、パッケージ管理ソフトを使用してスクリプト実行だけで最新のソフトをインストール出来ないかなと考えたのがきっかけです。

## パッケージ管理ソフト
Linuxではyumを使用していました。Windowsには以下があるようです。

・Web PI
・Oneget
・Nuget
・Chocolatey

上から調べてみた結果

Web PIはマイクロソフトのWeb環境を構築するためのソフトウェアを簡単にインストール／バージョンアップするための仕組みのようなので、今回の要件とは合わないので却下。

Onegetはパッケージ管理用のPowerHshellで動作するコマンドツールで Windows 10からはPowerManagementという名前でデフォルトでインストールされているようです。これは使えるかと思ったのですが、PackageSourceにchocolateyなどのパッケージ管理ソフトをインストールしないといけないよう。。2つのソフトウェアをインストールするのでは複雑になるので却下。

Nugetは.NET プロジェクトにライブラリーやツールを追加するためのパッケージ管理ツールのようで、こちらも今回の要件とは合わないので却下。

残るはchocolateyだけ・・・

ChocolateyはWindows上で動作するソフトウェアをコマンドラインからインストール/アンインストール/アップデート/検索することができるパッケージマネージャーのようです。

以下のサイトで現在登録されているパッケージを確認出来るようなので確認したところ、TunderbirdもFirefoxもありました！

https://chocolatey.org/packages

![thunder.png](https://qiita-image-store.s3.amazonaws.com/0/146554/77ed2957-bf75-1cd3-7659-fff9fefabc17.png)

![FireFox.png](https://qiita-image-store.s3.amazonaws.com/0/146554/f732e420-fddd-12fa-178f-963daccc79ff.png)


これなら要件を満たせそうです！

## Chocolateyのインストール
インストールすごい簡単です。以下のコマンドを管理者権限で実行すればOKです。

```ruby:
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
```

## ソフトウェアのインストール
ソフトウェアのインストールもすごい簡単です。以下のコマンドを実行すればインストールされます。

```ruby:
choco install ”ソフトウェア名”
```

上記のサイト画像にあるコマンドをそのまま実行でも大丈夫ですね。
複数ある場合はスペース区切りで同時にインストール可能です。

```ruby:
choco install thunderbird firefox
```
chocolateyのインストールもソフトウェアのインストールもコマンドなので、バッチにして置いておけば、実行だけで全て完了です。

```ruby:
@echo off

REM chocolateyインストール
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

REM パッケージインストール
cinst -y Firefox thunderbird

end
```

## chocolateyのアンインストール
上記でソフトウェアインストールが自動化出来て、今後のPCを構築が楽になるなと思っていたのも束の間
先輩より「最後に余計なものは削除しておいてください」とのお言葉が。
確かにユーザーはchocolateyを使わないので削除しておいたほうがいいと思い、まずはいつもの［コントロールパネル］→［プログラムと機能］から削除を試みましたが、chocolateyがどこにも無い・・・

調べてみたところ、インストールとは言ってもユーザープロファイル下に実行ファイルを保存し、ユーザー環境変数とシステム環境変数を登録するパターンなのでプログラムと機能の一覧に表示されないようです。よってアンインストールは実行ファイルのあるフォルダの削除と環境変数の削除でOKのようです。

具体的には以下のコマンドで実行ファイルのあるフォルダを削除し

```ruby:
rmdir /s /q C:\ProgramData\chocolatey
```

以下のコマンドで環境変数を削除します。

```ruby:
reg delete HKCU\Environment /v ChocolateyLastPathUpdate
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v ChocolateyInstall
```

## スクリプト作成
必要なコマンドがそろいましたので、一連の処理としてスクリプトを実行します。
スクリプトの内容は以下の通りです。

```ruby:
@echo off

REM chocolateyインストール
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

REM パッケージインストール
cinst -y Firefox thunderbird

REM chocolateyアンインストール
rmdir /s /q C:\ProgramData\chocolatey

REM 環境変数を削除
reg delete HKCU\Environment /v ChocolateyLastPathUpdate /f
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v ChocolateyInstall /f

end
```

特に手動で対応することなく、インストールすることが出来る様になりました！

## GUIもあります
非エンジニアの方だと「敷居が高い」、「面倒」と思われるかもしれませんので、GUIバージョンも紹介したいと思います。
以下のコマンドを管理者権限で実行します。

```ruby:
cinst chocolateygui
```

インストールが完了したら、PCを再起動してください。
再起動が完了すると Chocolatey GUI が使えるようになります。

スタートメニューにあるので起動します。

![ChocolateyGUI.png](https://qiita-image-store.s3.amazonaws.com/0/146554/7d85fad3-8a96-e6e3-1b91-ef4af4045cac.png)


やはりチョコレートカラーのようですｗ
このGUIからは以下が対応可能です。

・ソフトウェアの検索
・ソフトウェアのインストール/アンインストール
・ソフトウェアの一括バージョンアップ


一括バージョンアップはとても楽でいい機能です。
［show Only Pacages wuth Updates］にチェックを入れ、［update all]を実行するだけです。
![ChocolateyGUI3.png](https://qiita-image-store.s3.amazonaws.com/0/146554/c5260f61-0449-542c-0f22-93ef1e33b3e0.png)

全て最新バージョンになりました。
![ChocolateyGUI4.png](https://qiita-image-store.s3.amazonaws.com/0/146554/753373f3-055d-6ed0-0c2a-2eb65c4ad802.png)

まだWindows PCでパッケージ管理をされていない方は、Chocolateyを使用してみてはいかがでしょうか？操作方法も複雑ではないので便利ですよ！