これまで家に Windows マシンがなかったのですが、諸事情で Windows マシンがあったほうが捗るよなと思い、何年ぶりかで自分の Windows マシンを手にしました。 会社の PC も Windows なのですが、なんか忙しさにかまけてろくにセットアップもしなかったので、ちゃんとこだわっていこうと思っているところです。
というわけで、今日は Chocolatey を試してみました。
Chocolatey を使うと何ができるか
後述するようなインストールを行えば、
% choco install GoogleChrome
で Google Chrome が入りますし、
% choco outdated
で、古いソフトウェア一覧が出力されて、
% choco upgrade all
で一気にアップグレードができる感じになります。
このソフトウェア管理は、Windows が標準で持っている「プログラムのアンインストールまたは変更」のスーパーセットになっています。
たとえば Windows で Maven をインストールしても、当該機能からアンインストールはできませんが、choco uninstall
を使えば一発でアンインストール可能です。
Chocolatey ってどういうものなの
Chocolatey を一言で言うと、Windows 用のパッケージマネージャです。Linux における yum や apt を想像してもらえれば、だいたいそのとおりだと思います。 依存関係の解決を含めたパッケージのインストール、アンインストールやアップグレードなんかが可能です。
前提知識として、Chocolatey では Software と Package という語を明確に区別しています。 たとえばみなさんが Git for Windows からダウンロードする exe ファイルは Software ですが、これを chocolatey でインストールできるようにパッケージングしたものが package です。 (多くの場合は、package の中にはバイナリを含んでおらず、package の中に含まれる PowerShell のスクリプトでダウンロードするかんじなんじゃないかな)
Windows におけるソフトウェアのインストールは、MSI や NSIS、InstallShield や zip といった多種多様なものを使って行われてきた歴史があります。 このようなメディア(?)の違いを Package として抽象化したという点に、chocolatey の価値があるのかなと思っています。
パッケージマネージャとして価値を出すには、当然ながら管理(マネージ)される対象のソフトウェアがなければ意味がありません。 chocolatey では、デフォルトで chocolatey.org というリポジトリを使います。
ここには、日々人々が Software を Package として登録していまして、さくらエディタ といった結構日本的なソフトウェアも多数あります。
外部公開できないソフトウェア等のために、Artifactory や Nexus でも chocolatey のリポジトリも立てられるようです。
PATH の管理めんどくない?
インストールされた Software は、Program Files 等、"Software" としてインストールされるべき場所にインストールされます (msi とかが引数でインストール場所の変更をサポートしていればこの限りではない)。 だったら、Emacs とか Maven とか入れたら一々 Path を設定しなければいけないの?面倒じゃない?という疑問が湧きますが、chocolatey は shim という考えでこの問題を解決しています。 実現方法こそ違いますが、rbenv とかで出てくるアレですね。
chocolatey はデフォルトで C:\ProgramData\chocolatey\bin
を shim の置場として使います。
Package をインストールするごとに chocolatey はインストールした "Software" への shim を該当ディレクトリに用意してくれるので、Path に C:\ProgramData\chocolatey\bin
を設定しておけば OK です。
このあたりは、
を参照ください。
ちなみに、同名の exe が複数 Software 間で重複することがありますが、その場合 shim は上書きされるようです(Emacs と emacs64 を両方インストールしたら、後勝ちになった)。
一番惹かれたところ
chocolatey の何に惹かれたのかというと、インストールするソフトウェアを外部管理できることです。
以下のような xml ファイルを packages.config
として保存しておけば、choco install packages.config
を行うことで
一気にソフトウェアのインストールが可能です。
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="1password" version="7.2.576" /> <package id="ag" version="2.1.0.1" /> <package id="chocolatey" version="0.10.11" /> <package id="cmder" version="1.3.5" /> <package id="corvusskk" version="2.7.0" /> <package id="cubepdf" version="1.0.0.111" /> <package id="curl" version="7.61.0" /> <package id="docker-compose" version="1.22.0" /> (snip) </packages>
ぼくが惹かれたのはまさにここで、結果として brewfile のように、インストールすべきソフトウェア群をバージョン管理できるようになるんですよね。 しかもソフトウェアのバージョンロック付きで。
会社で Windows マシン支給されたけど、一々ダウンロード→インストールするの面倒だわ、みたいなときにすごく有り難いなと思います。