Windows環境再構築をコマンドラインで自動化可能にするMicrosoft製ツール「winget」とは:Windows 10 The Latest(1/2 ページ)
現在、Microsoftが開発中のパッケージマネジャー「winget」の概要と使い方を解説する。wingetを使えば、アプリやツールがコマンドで簡単にインストール可能になるため、スクリプトで同じ環境をすぐに再現できるようになる。
MicrosoftからWindows OS向けのパッケージマネジャーの提供が開始予定
現在、MicrosoftはWindows OS向けのパッケージマネジャー「winget」を開発している。2021年5月に正式に提供が開始される予定だ。
Windows OSを使い始めるとき、さまざまなWindows OSのカスタマイズ設定だけではなく、アプリケーションやツールのインストールが不可欠だ。それには、それぞれの配布サイトを開き、インストーラーをダウンロードし、インストールの実行、初期設定の実施などの多くの工数がかかる。
こうした手間を省くのが「パッケージマネジャー(パッケージ管理システム)」と呼ばれる機能で、アプリケーションやツールを一括で管理し、スクリプトなどでパッケージのダウンロードからインストールまで(場合によっては初期設定まで)を行える。
実はWindows OS向けにも、「Chocolatey(チョコレティ)」などのオープンソースで提供されているパッケージマネジャーは存在しているが、まだ一般的とはいえない(知っトクWindowsツール「コマンドでWindowsアプリを楽々管理『Chocolatey』」参照のこと)。
Microsoftからもパッケージマネジャーがリリース予定
Microsoftも、現在、「Windowsパッケージマネージャー」と呼ぶパッケージマネジャーを開発している。Windows OSには、これまでPowerShellやVisual Studio向けに、開発者や管理者が利用するパッケージマネジャーは存在していた。また、Microsoft Storeがパッケージマネジャー的な要素も持っていたが、あくまでもアプリケーション流通のための「アプリケーションストア」(あるいはデジタルディストリビューションプラットフォーム)であり、一般的なパッケージマネジャーとは言いがたく、、一般ユーザーが利用可能なパッケージマネジャーはMicrosoftからは提供されていなかったといえる。
Windows OSでは、デスクトップアプリケーションのインストールは、Windowsインストーラーのみとされているが、実際には、インストーラーが不要でファイルを展開しさえすれば実行可能なプログラムも多数存在する。
また、デスクトップアプリケーションのアンインストールは、コントロールパネルの「プログラムと機能」で行える。だが、これはWindowsインストーラーでインストールしたアプリに限られる。また、アプリに組み込まれたアンインストーラーが動作するため、具体的に何が行われるのかはアプリ開発者側に任されていた。アプリによってはインストール先フォルダに設定データを残したり、書き込んだレジストリを消去しなかったりする場合もある。このように、デスクトップアプリケーションのインストール管理に関していえば、Windows OSでは「野放し」状態が続いていたわけだ。
パッケージマネジャーとは
パッケージマネジャーとは、ソフトウェアを一定の「パッケージ」という形式として、「リポジトリ」で管理し、対象システムでのインストール/アップグレード(アップデート)/アンインストールなどを管理するものだ。このとき、ソフトウェア同士の依存関係を管理し、必要なライブラリなどの追加などを行う。アンインストールとアップグレードが区別されるため、アンインストールでは痕跡を残さないように行える。
パッケージマネジャーの仕組み
パッケージマネジャーは、パッケージ間の依存関係や、インストール先のシステム状態(インストール状態)を考慮してインストール/アップデート/アンインストールなどの作業を行う他、パッケージの検索や情報表示といった機能も持つ。
「Windowsパッケージマネージャー」は、Microsoftが運営するリポジトリ(「ソース」と呼ぶ)と専用のパッケージ形式、管理コマンド(winget.exe)から構成されている。オープンソースとして開発が行われており、現在のプレビュー版では、まだ機能が完全ではないものの、パッケージの検索からインストールまでを「winget」コマンドで行えるようになっている。
原稿執筆時点では、登録されているソフトウェアは、1400本程度、Microsoft Storeのアプリケーションは限定公開で300本弱が含まれ、全体のうちMicrosoftが公開しているソフトウェアが113本ある。
Linux系のパッケージマネジャーでは登録されているパッケージは、特定のディストリビューション、特定のリリースバージョン向けだけでも数万程度(ただしライブラリや複数バージョンを含む)は存在する。リポジトリはデフォルト登録だけでも10カ所以上あり、実際にはもっと多くのリポジトリが存在する。こうした状況から見ると、「Windowsパッケージマネージャー」は、まだ発展途上である。
今回紹介する「Windowsパッケージマネージャー」は、プレビュー版であり、コマンドオプションや動作など細かい部分は、最終的に変更される可能性があることをご理解いただきたい。現時点での完成予定は、2021年5月である。GitHubでソースコードが公開されており、ここで進行状況を見ることもできる。原稿執筆時点では、winget.exeのバージョンが「v.0.2.2941」であった。
winget.exeの機能
winget.exeは、コマンド1つでパッケージ管理を行う。一般ユーザーがパッケージを検索したり、インストール/アップデート/アンインストールを行ったりするのは、全てこのwinget.exeコマンドで行う。なお、パッケージの作成は、別のプロジェクト「microsoft/winget-pkgs」がGitHub上にある。パッケージの作成には、一般に開発者が行うものであり、パッケージに関連する情報を記述したファイルの作成など、かなりの手作業が必要になることなどから、ここでは解説を行わない。
winget.exeは、現時点ではMSIXパッケージでインストールされるMicrosoft Store(UWP)アプリで、winget.exeはアプリ実行エイリアスとなっている。原稿執筆時点では、Microsoft Storeでは配布が行われておらず、GitHubの「microsoft /winget-cli - Releases」ページからダウンロードとインストールを行う必要がある。このページのバージョン番号のリンクをクリックすると移動するページ(原稿執筆時点では、「Windows Package Manager v0.2.2941 Preview」)の後ろの方に、「Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundle」というリンクがある。これをクリックすることでパッケージのダウンロードならびにインストールが行える(正式版の配布時には、Microsoft Storeからインストールが可能になる)。パッケージ名は「Microsoft.DesktopAppInstaller_8wekyb3d8bbwe」だ。
winget.exeをインストールする(1)
WebブラウザでGitHubの「Windows Package Manager v0.2.2941 Preview」ページを開き、画面を下の方にスクロールする。
winget.exeをインストールする(2)
「Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundle」をクリックして、インストールパッケージをダウンロードする。パッケージのダウンロードができたら、パッケージをクリックして実行する。
インストールすると、ユーザーフォルダ以下の%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbweなどにログファイルが残る。
winget.exe自体は、Microsoft Storeアプリであるため、ARM64アーキテクチャのマシンでも動作するが、現時点では、「Windowsパッケージマネージャー」が複数アーキテクチャに対応しておらず、ARM64上ではパッケージのインストールを行うことができない(検索などは動作する)。「Windowsパッケージマネージャー」の計画では、複数アーキテクチャに対応する予定だ。
winget.exeのコマンドライン
「Windowsパッケージマネージャー」の操作をコマンドラインで行うのは、ソフトウェアのインストールなどをスクリプトなどから一括して行う用途を想定しているためだ。既存の多くのパッケージマネージャーも、コマンドラインからの利用を基本とする。GUIを持つものもあるが、内部でコマンドを呼び出しているものも少なくない。
コマンドラインでは、実行前にオプションなどで動作を全て指定でき、実行中にはユーザーの応答を必要しないように作ることができるため、スクリプト化に対応できる。例えば、新規にPCを購入したとき、スクリプトでこれまで使っていたPCと同じアプリケーションをインストールさせることが可能になる。
winget.exeのコマンドラインは以下の書式を使う。
winget.exe [<サブコマンド>] [<サブコマンドオプション>]
winget.exeは、引数を何も付けずに実行するとオンラインヘルプを表示する。「--help」または「-?」の「ヘルプ」オプションでもオンラインヘルプを表示でき、引数がエラーになった場合にもオンラインヘルプが表示される。
winget.exeを引数なしで実行する
winget.exeは、引数なしあるいはヘルプオプションの指定でオンラインヘルプを表示する。基本的には第一の引数としてサブコマンドを指定し、さまざまな動作を行わせる。
winget.exeのサブコマンド
「サブコマンド」などには、下表のようなものがある。サブコマンドの表中、「upgrade」と「list」サブコマンドについては、「実験的」実装とされており、設定で有効にしないと使うことができない。また、幾つかのコマンドは、現在のプレビュー版では未実装であるため利用できない。パッケージの検索や情報表示、インストールなどは行えるが、それ以外の機能に関しては、開発中である。
サブコマンド/オプション | 実装 | 説明 |
---|---|---|
-v,--version | 済 | wingetのバージョン表示 |
--info | 済 | wingetの情報表示 |
-?,--help | 済 | ヘルプ表示 |
experimental | 済 | 実験的な機能の例示(サブコマンドのサンプル) |
features | 済 | 実験的な機能の状態表示 |
hash | 済 | Hash値計算 |
install | 済 | アプリのインストール |
search | 済 | アプリ検索 |
settings | 済 | 設定コマンド(JSONエディタ利用) |
show | 済 | アプリ情報の表示 |
source | 済 | ソース(リポジトリ)管理 |
validate | 済 | パッケージの検証 |
upgrade | 実験的 | インストール済みアプリのアップグレード |
list | 実験的 | インストール済みアプリの表示 |
uninstall | 未実装 | アプリのアンインストール |
(Import/Export) | 未実装 | 管理している情報のインポート/エクスポート(未実装のためサブコマンド名は未定) |
winget.exeのサブコマンドの実装状態 |
「Windowsパッケージマネージャー」では、winget.exeを使わずにインストールしたアプリケーションの管理も可能にする予定だ。既に多くのアプリケーションが「Windowsパッケージマネージャー」によるパッケージを使わずにインストールされていること、WindowsインストーラーやMicrosoft Store経由のアプリケーションインストールは、今後もWindowsのアプリケーションインストールの基本であり、これを変更することは困難で、これらを除外したパッケージマネジャーはほとんど無意味だからだ。
winget.exeのサブコマンドは、それぞれ特有のオプション指定が必要になる。それをまとめたのが下表だ。これらは、それぞれのサブコマンドで詳細な情報を指定するために使われるが、同じ意味を持つオプションは、原則同じオプションとなる。例えば、パッケージIDを指定する「--id」オプションは、「install」「show」「search」「list」「upgrade」の各サブコマンドで共通である。サブコマンドの後ろにヘルプオプションを付けると、サブコマンドのオンラインヘルプが表示される。後述するsourceサブコマンドのように、サブコマンドの後ろにさらにサブコマンド(ハイフンが先頭に付かない)がある場合にも、「-?」を付けることでそのオンラインヘルプを見ることができる。
サブコマンド | オプション | 省略表記 | 動作 | |
---|---|---|---|---|
install | --query 文字列 | -q | ID、名前、モニカー(別名)、タグでの文字列部分一致検索(オプション省略可) | |
--manifest パス | -m | パッケージのマニフェストのパス | ||
--id 文字列 | IDで結果をフィルター処理 | |||
--name 文字列 | 名前で結果をフィルター処理 | |||
--moniker 文字列 | モニカーで結果をフィルター処理 | |||
--version バージョン | -v | 指定されたバージョンを使用する。デフォルトは最新バージョン | ||
--source winget|msstore | -s | 指定されたソースを使用してパッケージを検索 | ||
--exact | -e | 完全一致を使用してパッケージを検索 | ||
--interactive | -i | 対話式のインストール(ユーザーの入力が必要になる場合がある) | ||
--silent | -h | サイレントインストールを要求 | ||
--log <パス> | -o | ログの場所(サポートされている場合) | ||
--override <引数> | インストーラーに渡される引数を上書き | |||
--location <パス> | -l | インストール先(サポートされている場合) | ||
--force | ハッシュのチェックがエラーでも強行 | |||
--help | -? | サブコマンドのヘルプ表示 | ||
show | --query <文字列> | -q | ID、名前、モニカー、タグでの文字列部分一致検索(オプション省略可) | |
--manifest <パス> | -m | パッケージのマニフェストのパス | ||
--id <文字列> | ID で結果をフィルター処理 | |||
--name <文字列> | 名前で結果をフィルター処理 | |||
--moniker <文字列> | モニカーで結果をフィルター処理 | |||
--version <バージョン> | -v | 指定されたバージョンを使用する。デフォルトは最新バージョン | ||
--source winget|msstore | -s | 指定されたソースを使用してパッケージを検索 | ||
--exact | -e | 完全一致を使用してパッケージを検索 | ||
--versions | パッケージの利用可能なバージョンを表示 | |||
-?,--help | サブコマンドのヘルプ表示 | |||
source | add | 新しいソースを追加。オプションあり(詳細は-?で表示) | ||
list | 現在のソースを一覧表示。オプションあり(詳細は-?で表示) | |||
update | 現在のソースを更新。オプションあり(詳細は-?で表示) | |||
remove | 現在のソースを削除。オプションあり(詳細は-?で表示) | |||
reset | ソースをリセット。オプションあり(詳細は-?で表示) | |||
--help | -? | サブコマンドのヘルプ表示 | ||
search | --query <文字列> | -q | ID、名前、モニカー、タグでの文字列部分一致検索(オプション省略可) | |
--id <文字列> | IDで結果をフィルター処理 | |||
--name <文字列> | 名前で結果をフィルター処理 | |||
--moniker <文字列> | モニカーで結果をフィルター処理 | |||
--tag <文字列> | タグで結果をフィルター処理 | |||
--command | コマンドによる結果のフィルター処理 | |||
--source winget|msstore | -s | 指定されたソースを使用してパッケージを検索 | ||
--count <数値> | -n | 指定した数以下の結果を表示 | ||
--exact | -e | 完全一致を使用してパッケージを検索 | ||
--help | -? | サブコマンドのヘルプ表示 | ||
list | --query <文字列> | -q | ID、名前、モニカー、タグでの文字列部分一致検索(オプション省略可) | |
--id <文字列> | IDで結果をフィルター処理 | |||
--name <文字列> | 名前で結果をフィルター処理 | |||
--moniker <文字列> | モニカーで結果をフィルター処理 | |||
--tag <文字列> | タグで結果をフィルター処理 | |||
--command <文字列> | コマンドによる結果のフィルター処理 | |||
--source winget|msstore | -s | 指定されたソースを使用してパッケージを検索 | ||
--count <数値> | -n | 指定した数以下の結果を表示 | ||
--exact | -e | 完全一致を使用してパッケージを検索 | ||
--help | -? | サブコマンドのヘルプ表示 | ||
upgrade | --query <文字列> | -q | ID、名前、モニカー、タグでの文字列部分一致検索(オプション省略可) | |
--manifest <パス> | -m | パッケージのマニフェストのパス | ||
--id <文字列> | IDで結果をフィルター処理 | |||
--name <文字列> | 名前で結果をフィルター処理 | |||
--moniker <文字列> | モニカーで結果をフィルター処理 | |||
--version <バージョン> | -v | 指定されたバージョンを使用する。デフォルトは最新バージョン | ||
--source winget|msstore | -s | 指定されたソースを使用してパッケージを検索 | ||
--exact | -e | 完全一致を使用してパッケージを検索 | ||
--interactive | -i | 対話式のインストール(ユーザーの入力が必要になる場合がある) | ||
--silent | -h | サイレント インストールを要求 | ||
--log <パス> | -o | ログの場所 (サポートされている場合) | ||
--override <引数> | インストーラーに渡される引数を上書き | |||
--location <パス> | -l | インストール先 (サポートされている場合) | ||
--force | ハッシュのチェックがエラーでも強行 | |||
--all | インストール済みの全パッケージを最新版に更新する | |||
--help | -? | サブコマンドのヘルプ表示 | ||
hash | --file | -f | ハッシュするファイル | |
--msix | -m | 入力ファイルをmsixとして扱う | ||
--help | -? | サブコマンドのヘルプ表示 | ||
validate | --manifest <パス> | -m | 検証対象のマニフェストのパス | |
--help | -? | サブコマンドのヘルプ表示 | ||
settings | --help | -? | サブコマンドのヘルプ表示 | |
features | --help | -? | サブコマンドのヘルプ表示 | |
experimental | --arg | デモを目的とした試験的引数 | ||
--help | -? | サブコマンドのヘルプ表示 | ||
winget.exeのサブコマンドとオプション |
次ページでは、実際にwinget.exeの使い方を紹介しよう。
Copyright© Digital Advantage Corp. All Rights Reserved.