理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

Windows でソフトウェアを chocolatey で管理すると超絶便利になりそう

これまで家に Windows マシンがなかったのですが、諸事情で Windows マシンがあったほうが捗るよなと思い、何年ぶりかで自分の Windows マシンを手にしました。 会社の PC も Windows なのですが、なんか忙しさにかまけてろくにセットアップもしなかったので、ちゃんとこだわっていこうと思っているところです。

というわけで、今日は Chocolatey を試してみました。

Chocolatey を使うと何ができるか

後述するようなインストールを行えば、

% choco install GoogleChrome

で Google Chrome が入りますし、

% choco outdated

で、古いソフトウェア一覧が出力されて、

% choco upgrade all

で一気にアップグレードができる感じになります。

f:id:kiririmode:20180825010243j:plain
outdated しているところ

このソフトウェア管理は、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 というリポジトリを使います。

f:id:kiririmode:20180825010240j:plain
chocolatey.org

ここには、日々人々が Software を Package として登録していまして、さくらエディタ といった結構日本的なソフトウェアも多数あります。

外部公開できないソフトウェア等のために、ArtifactoryNexus でも chocolatey のリポジトリも立てられるようです。

PATH の管理めんどくない?

インストールされた Software は、Program Files 等、"Software" としてインストールされるべき場所にインストールされます (msi とかが引数でインストール場所の変更をサポートしていればこの限りではない)。 だったら、Emacs とか Maven とか入れたら一々 Path を設定しなければいけないの?面倒じゃない?という疑問が湧きますが、chocolatey は shim という考えでこの問題を解決しています。 実現方法こそ違いますが、rbenv とかで出てくるアレですね。

chocolatey はデフォルトで C:\ProgramData\chocolatey\bin を shim の置場として使います。

f:id:kiririmode:20180825020328j:plain

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 マシン支給されたけど、一々ダウンロード→インストールするの面倒だわ、みたいなときにすごく有り難いなと思います。