Windows OS向けのパッケージマネジャー「Chocolatey」を取り上げる。このソフトウェアをインストールすることで、コマンドやスクリプトで簡単にアプリケーションの管理が可能になる。
本コーナーではWindows環境を対象として、便利で、長い間利用できそうなソフトウェアやインターネット上のサービスを紹介していきます。必ずしもオープンソースに限定はしませんが、長い間アップデートされ続けている今後も継続して使えそうなソフトウェア/サービスに注目します。
最初に取り上げるのは、Windows OS向けのパッケージマネジャーである「Chocolatey(チョコレティ)」だ。2018年5月に開催されたMicrosoftの開発者向けイベント「Build 2018」の基調講演でも取り上げられたので、「Chocolatey」の名前ぐらいは聞いたことがある人もいるだろう。
パッケージマネジャーとは、ソフトウェアのインストールパッケージを定義し、その入手やインストール、メンテナンスを行うソフトウェアのことだ。ソフトウェアの検索からダウンロードとインストール、そしてアップグレードやアンインストールまで、全ての作業をカバーする。
Windows OSでも、コントロールパネルの「プログラムと機能」でインストールしたアプリを管理することができるが、Linuxなど他のOSで一般的なパッケージマネジャーから見ると、機能が簡易過ぎて「パッケージマネジャー」のレベルには到達していない。Windows OSのアプリケーションの管理機能は、インストールとアンインストールだけで、アップグレードはアプリケーション任せ、アプリケーションの検索に関してもサードパーティー任せである。
またMicrosoft Storeで配布されている「UWPアプリ」は、Microsoft Storeで検索、ダウンロードが可能で、自動アップグレードも可能だ。この点では、パッケージマネジャーと同等だが、いまのところMicrosoft Storeで扱うことができるのは、UWPアプリと、デスクトップブリッジでパッケージ化したデスクトップアプリのみだ。
このため、現在、インターネットなどから入手可能な膨大なデスクトップソフトウェアのほとんどは、Microsoft Storeの範囲外にあり、貧弱なソフトウェア管理しか行えない。
一般的にパッケージマネジャーでは、アプリケーションのインストールをコマンドラインから行えるため、さまざまなスクリプト言語から呼び出しが可能である。例えば、新規購入したマシンに一連のソフトウェアをインストールする作業を、スクリプトの実行によって省力化する、といった使い方ができる。
Linuxでは、こうしたパッケージマネジャーがシステム組み込みで用意されており、OS自体のインストール作業で必要なソフトウェアを指定してまとめてインストールが行われている。Windows OSでも、パッケージマネジャーを利用すれば、新規マシンへのインストールから始めて、Windows OSが管理できないデスクトップソフトウェアの「生涯」にわたる管理が可能になる。
また、Windows 10では、システムの再インストールは簡単に行えるが、このとき、デスクトップアプリケーションだけは復元できない。ファイルを残すことはできても、デスクトップアプリケーションに関しては、再インストールが必要になる。こうした場合にもパッケージマネジャーがあれば、環境の再構築が簡単になる。
そもそもパッケージマネジャーとは、「パッケージ形式」「パッケージ管理ソフトウェア」「リポジトリ」の3つから構成される。
例えば、Android OSならば、パッケージ形式が「.apk」、パッケージ管理ソフトウェアがスマートフォン上の「Playストア」、リポジトリがGoogleの管理している「Google Play」ということになる。
リポジトリとは、インターネット上でパッケージを保管管理している場所のことだ。ここに、一定の構造を持つパッケージ形式のファイルを置き、パッケージ管理ソフトウェアでダウンロード、インストール、アップデートなどを行う。
UNIX系OSはもともと、実行ファイル形式での互換性はなく、ソースコードレベルでの互換性しか持っていなかった。ソースコードを流通させ、それをビルドして使う形式から始まり、インターネットの普及で、複数プラットフォームのバイナリ形式の保存管理が可能となり、現在のようなパッケージマネジャーに発展してきた。
Windows OSの場合は、最初からバイナリの互換性があったため、配布やインストール方法については、あまり問題にならなかった。単にファイルをコピーしてきて、実行すればインストールが完了できたからで、インストールプログラムの中でたいていの処理は可能だったからだ。その後、インストールパッケージ形式(MSI)やインストール方法については、統一されたが、Windows 8.0でWindowsストアが作られるまでは、公式なリポジトリもなかった。このため、Windows OSは長らくパッケージマネジャーの空白地帯だった。
Chocolateyは、デスクトップアプリケーションのさまざまなインストール処理をラッピングすることができるパッケージ形式を持っている。パッケージマネジャーに含まれるスクリプトを使ってインストールするものもあれば、MSI形式のパッケージをWindowsインストーラーでインストールするものもある。
このため、Chocolateyのリポジトリは、必ずしもインストールイメージを持っているわけではなく、開発元の公式サイトなどからダウンロードを行う場合もある。リポジトリ自体は、以下のURLでブラウズすることが可能だ。
リポジトリにあるパッケージは、開発者自身の手によるものもあれば、ユーザーが作成したものもある。そこでChocolateyのリポジトリでは、開発者以外のパッケージに対して「trusted Package」かどうかの表示がある。ソフトウェア開発者自身によって作られたパッケージは「trusted」となるほか、信頼できるサードパーティー開発者が作成したものについては、各種の検査などの終了後に、リポジトリの管理者が手動で「trusted」の設定を行う。基本的には、「trusted」とされていないパッケージについては注意する必要がある。登録後間もないパッケージは、「trusted」にはなっていないことがある。
管理ツールは、choco.exe(あるいはchocolatey.exe)で、installやlistといったサブコマンドを持つ、Windows OSでは比較的よく見掛ける構文を使う。
コマンド | 意味 |
---|---|
chocolatey.exe(choco.exe) | サブコマンド [オプション][パラメーター] 管理コマンド。サブコマンドで動作を指定 |
chocolatey.exe list [オプション] 検索キーワード | パッケージのリストを表示 |
chocolatey.exe install [オプション] パッケージ名 | パッケージのインストール |
chocolatey.exe upgrade [オプション] パッケージ名 | パッケージのアップデート |
chocolatey.exe uninstall [オプション] パッケージ名 | パッケージのアンインストール |
chocolatey.exe config [list] get|set|unset [オプション] | Chocolateyのconfigファイルの設定 |
Chocolateyのコマンドオプション |
例えば、ローカルにインストールされているアプリの一覧を得るには、「choco list -l」とする(詳細は後述)。 なお、listなどのサブコマンドの後に「-help」を付けることで、サブコマンドに対するオンラインヘルプを見ることができる。
このような感じでコマンドプロンプトから管理コマンドを使えるほか、付属のPowerShell用モジュールを組み込めば、PowerShell内でChocolateyの機能をPowerShellの関数やオブジェクトとして利用できるようにもなる。
また、開発元であるChocolatey Softwareは、Windows OSの環境設定を一括して行うことができるBoxstarterというシステムも開発している。これを使うと、仮想環境や実環境、リモートマシンの設定を、作成したスクリプトに従って行えるようになる。つまり、同じ設定の「マシン」を多数コピーして作成することが可能になる。こちらについても今後、別途解説したい。
なお、Chocolateyは、無料のオープンソース版(FOSS)のほかに有料の個人向けPro版(96ドル/年)、Business版(35台まで600ドル/年〜)がある。
では、Chocolateyをインストールして、Chocolateyを使ったアプリケーションの管理を試してみよう。
Chocolateyのインストールは、PowerShellから行う。ChocolateyのWebサイトにインストール用のコマンドラインがあるので、これを管理者権限で起動したPowerShellに貼り付けて実行すればよい。
1回インストールすれば、Chocolatey自体のアップデートもChocolatey自身で行えるため、手間なのは最初だけだ。インストール作業は、実際には、PowerShellでコマンドレットを実行しているだけだ。具体的には、以下のPowerShellコマンドレットを実行し、インターネット上にあるインストールスクリプト「install.ps1」を読み込んで実行する。
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
なお、日常的にPowerShellを利用しているユーザーは、すでに実行ポリシーを変更していると思われるが、これまでまったく利用していない場合は、デフォルト値を変更する必要がある(Tech TIPS「WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する」参照のこと)。
インストール後、PowerShellからChocolateyコマンドを利用するなら、付属のPowerShellモジュールをインストールしておくと、コマンドパラメーターなどで補完が使えるようになる。
それには、以下のインポートモジュールコマンドレットを自分のプロファイルなどに入れておく。モジュールファイルをコピーしても結果は同じだが、アップデートするたびにコピーする必要が出てくるため、インストール先のモジュールファイルを直接指定してインポートさせた方がいい。なお、自分のプロファイルの場所は、PowerShell内で「$profile」変数に格納されている(デフォルトではファイルは作られていない)。
Import-Module C:\ProgramData\chocolatey\helpers\chocolateyProfile.psm1
また、Chocolateyの機能を自作のPowerShellスクリプトから呼び出したい場合は、同様に「C:\ProgramData\chocolatey\helpers\chocolateyInstaller.psm1」をインポートしておく。
コマンドラインでの利用がイヤという人は、GUIラッパーである「chocolateygui」があるので、これを使うこともできる。これは、ローカルとリポジトリの表示、インストールなどの基本的な利用が可能なもの。これ自体もChocolateyからインストール可能だ。管理者権限でコマンドプロンプトを起動し、以下のコマンドを実行すればよい。
C:\> chocolatey.exe install chocolateygui
インストールが終われば、以後は、chocolatey.exeコマンドでパッケージの管理が行える。取りあえず、前述のリポジトリから必要なアプリを見つけて、インストールしてみることにしよう。
ここでは、フリーのメディアプレーヤーとして著名な「VLC」をインストールしてみよう。管理者権限でコマンドプロンプトを起動し、まずは、リポジトリにvlcがあるかどうかを確認してみる。
chocolatey.exe list -v -e vlc
「-v」は詳細の表示、「-e」は指定がパッケージ名だけで検索を行う指定である。-eを指定しないと、説明文などに含まれる単語も検索対象になるため、VLCに言及した他のプログラム(関連プログラム)も検索結果に出る。
インストールは、以下のコマンドレットで行える。
chocolatey.exe install vlc
なお、途中でパッケージに含まれるスクリプトを実行するかどうかが聞かれる。スクリプトなどで実行する場合で、これを回避するには、「-y」オプションを付けるとよい。
chocolatey.exe install -y vlc
もし、複数のソフトウェアをまとめてインストールしたいのなら、こうしたコマンドでバッチファイルやスクリプトを作ればよい。また、Chocolatey自体のインストールもコマンドラインで行える。
なお、chocolatey.exeコマンドには、choco.exeという短縮形もある。また、「install」や「list」などのサブコマンドまでを指定した短縮形コマンドも用意されている。
コマンドレット | 短縮コマンド | 意味 |
---|---|---|
chocolatey.exe | choco.exe | 管理コマンド。サブコマンドで動作を指定 |
choco.exe list | clist.exe | パッケージのリストを表示 |
choco.exe install | cinst.exe | パッケージのインストール |
choco.exe upgrade | cup.exe | パッケージのアップデート |
choco.exe uninstall | cuninst.exe | パッケージのアンインストール |
Chocolateyの短縮コマンド一覧 |
新しいマシンの環境設定を行う場合、以下のスクリプト(仮にch.batとする)を管理者権限で開いたコマンドプロンプトウィンドウから起動する。ただし、 前述したように、 事前に手動でPowerShellの実行ポリシーを「RemoteSigned」などに変更して、PowerShellスクリプトを実行できるようにしておく必要がある。
@echo off
REM echo Set-ExecutionPolicy RemoteSigned | "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"
"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
REM 以下はインストールするアプリケーションのサンプル
choco.exe install -y -f vlc
choco.exe install -y -f ChocolateyGUI
また、インストールするアプリの部分は、各自の都合に合わせて書き換えてほしい。1回、1つのマシン上でChocolateyを使って手動でアプリをインストールしておき、そのリストを使って、インストールスクリプトを変更するといいだろう。すでにインストールしたパッケージのリストは、以下のコマンドでパッケージ名だけにできる。ただし、このリストには、Chocolatey自身も含まれるので注意されたい。
choco list -l -r -id-only
オープンソースのデスクトップアプリケーションを複数使っているなら、Chocolateyを導入するメリットがある。まずは、リポジトリを眺めて、自分が使っているアプリケーションがどのぐらい登録されているかを見てみるところから始めるといいだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.