一般向けの配布も開始されているWindows用のパッケージ管理ツール「winget」がv1.1に
文●塩田紳二 編集● ASCII
2021年10月10日 10時00分
Windows 10/11用パッケージ管理ツールのWingetが、今年5月27日にVer.1.0となった。これにより安定版としての配付が開始された。なお、9月27日にプレビュー版Ver.1.1.1270、安定版Ver.1.1.12653が公開されている。ここでは、この最新のプレビュー版を元にWingetについて解説する。
そもそもWingetとは一体何?
あらためてWingetについて紹介しておこう。正式には「Windows Package Manager Client」といい、Microsoftのオープンソースソフトウェアの1つだ。名称が長いので本記事ではこれを「Winget」と表記する。
wingetを使うことで、ソース(一般的なパッケージマネージャーのリポジトリ)に登録されたアプリケーションパッケージのインストールや検索が可能になる。現時点でソースには、Winget専用のものと、Microsoftストアの一部アプリケーションが含まれる。Wingetに関しては、これまでにプレビュー版を扱ったので概要に関しては、以下の記事を参照頂きたい。
●Windowsで開発中のパッケージマネージャー「winget」がv0.3に
●Windows用アプリのインストールがコマンドラインで可能なパッケージマネージャー「winget」はどうなった?
●Windows 10のパッケージマネージャーであるwingetのプレビュー版を試す
プログラム配布用のマネージャーを含む
Windows Package Manager
続いて「Windows Package Manager」は、このWingetとリポジトリに登録するためのManifestファイルを作成するソフトウェアWingetcreate、そしてサードパーティのWin32アプリ用のリポジトリ(正確にはリポジトリに登録するためのManifestファイルの登録先)となるCommunity Repositoryという3つの要素からなる。
・Windows Package Manager
https://docs.microsoft.com/ja-jp/windows/package-manager/
・Windows Package Manager Client(Winget)
https://github.com/microsoft/winget-cli
・Windows Package Manager Manifest Creator(WingetCreate)
https://github.com/microsoft/winget-create
・Windows Package Manager Community Repository
https://github.com/microsoft/winget-pkgs/
とりあえず、アプリをインストールするだけというのであれば、Wingetだけを使えばよいが、自作のプログラムなどを登録したいというのであれば、残り2つを見ておく必要がある。また、GitHubのCommunity Repositoryには、登録されたアプリケーションのManifestファイルがあるので、Searchコマンドだけではわからない場合などにはここを見るのもいいかもしれない。
このうちWingetに関しては、Microsoftストアの「アプリインストーラー」に含まれているため、たとえばWindows Terminalなど、アプリインストーラーを必要とするソフトウェアをインストールしていれば、すでにWingetが入っているはずだ。もし、手動で入れたいなら、アプリインストーラーをMicrosoftストアから入手するのが最も簡単な方法である。そのほか、前述のGitHubからmsixパッケージを入手し、手動でインストールする方法もある。
Ver.1.1の改良点など
Wingetは、サブコマンドで動作を指定し、さらにオプションで細かい動作を指定する。
各サブコマンドで指定可能なオプションには次のようなものがある。
なお、sourceサブコマンドはさらに「add」「list」「update」「remove」「reset」「export」の6つのサブコマンドが必要で、そのオプションは次のようなものだ。
これらのうちsettingsサブコマンドはjsonファイルを出力し、「.json」に関連付けられているエディタなどが開く(何も設定されていないと最初にエディタを選ぶ)。ここには、Wingetの動作を指定するオプションが指定可能で、それには次のような設定項目がある。
具体的には、以下のリストのようなjsonファイルを作成する。なお、検索方法などに関しては、前記の過去記事を参照いただきたい。
{
"source": { "autoUpdateIntervalInMinutes": 240 },
"visual": { "progressBar": "rainbow" },
"installBehavior": {
"preferences": {
"scope": "machine",
"locale": ["ja-JP","en-US"] } },
"telemetry": { "disable": true },
"network": {
"downloader": "do",
"doProgressTimeoutInSeconds": 60 },
"experimentalFeatures": {
"dependencies":true,
"directMSI":true }
}
オプションでv0.4以降に追加されたものは赤で表示した。追加されたオプションである「--accept-package-agreements」と「--accept-source-agreements」は、それぞれパッケージとソースの利用許諾(ライセンス)に対してユーザーに尋ねることなしに合意するものだ。
以前のバージョンでは、Wingetでのインストール時には、Microsoftはライセンスには一切関わらず、許諾はしないといったメッセージが表示されていたが、パッケージ側で指定があれば、ライセンス確認ができるようだ。これらは、スクリプトなどによる自動インストールを想定したもの。ただし現時点では、ソースはMicrosoftのものとMicrosoftストアの2つしかなく、ソースに対する利用許諾が必要なサイトはデフォルトでは登録されていない。とはいえ、スクリプトなどで利用するなら、これらはあらかじめ指定しておいたほうがいいだろう。
「--header」は、「--source」とともに利用し、RESTアクセス時のHTTPヘッダーにつけるオプション文字列を指定するもの。現在Wingetに登録されているソース(wingetとmsstore)では指定の必要はない。
実験機能は前記settingsサブコマンドで設定するが、状態はfeaturesサブコマンドで確認できる。実験機能は「directMSI」「dependencies」の2つ。「directMSI」はmsi形式のパッケージをWindows Installerではなく、MSIAPIを使って直接インストールすることを指示するもの。「dependencies」はパッケージの依存関係情報を表示させるもの。
ログ出力機能
新機能というわけではないが、Wingetにはログ出力を行う機能がある。Wingetは、エラーメッセージがあまり親切とはいえないが、ログには細かい情報が出ている。コマンドを実行するとき「--log」オプションでログファイルを指定できる場合もあるが、実際には、wingetはデフォルトで以下のフォルダーに常にログを出力している。
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir
「%LOCALAPPDATA%」は自分のユーザーフォルダにある「AppData\local\」に相当する。ここにログが日付時刻の入ったファイル名で記録されている。さらにどのサブコマンドの場合でも「--verbose-logs」オプションを付加しておけば、ここに詳細なログが記録されるようになる。ただし、listサブコマンドのように大量の情報が出力される場合、ログも大きくなるので注意が必要である。
source exportとlist
現在のソースは、wingetとmsstoreの2つだ。これに関しては、source listコマンドで確認することが可能だ。また、source addサブコマンドでリポジトリを追加できるが、いまのところ詳細な条件などが未定でリポジトリを立ち上げることは難しい。コマンド指定などに関しては、source exportの出力が参考になると思われる。
今年4月の時点でVer.0.4だったWingetは、5月になって1.0と安定版が登場し、一般配付も始まった。コマンドとしては、これでインストールやアンインストール、パッケージ検索とひととおりこなせるようになったが、Windowsのコマンドとしては、いまひとつの部分がある。
たとえば、listサブコマンドの出力は、ユーザーが見ることを想定したテーブル形式の出力しかなく、これをプログラムで処理しようとすると、長いプログラム名の後半がクリップされたままになる、テーブル表示の位置合わせにスペースが使われていて、後処理が面倒など、いろいろと問題がある。ほかのソフトウェア、たとえばPowerShellから利用することを考えると、タブ区切り、CSVでもいいので、完全なデータを出力できるようにすべきだろう。
とはいえ、これまでPowerShellでMicrosoftストアや標準UWPアプリ、またレジストリを呼んでWindows Installerで入れたプログラムを管理していたことを考えると1つのコマンドで作業ができるようになったことは格段の進歩がある。
■関連記事