具体的に「Windowsパッケージマネージャー」を使ってみることにしよう。まず、気になるところとしては、どんなソフトウェアがリポジトリに登録されているかだ。これには、winget.exeのsearchサブコマンドを使うことで調べられる。オプションなしで実行すると、リポジトリにある全てのパッケージを列挙できる。パッケージ/プログラム名の一部を引数として指定することで、パッケージID、名前、モニカー(別名)といったパッケージが持つ情報との部分一致(大文字小文字の区別なし)で検索が行われる。
また、オプションである「--id <パッケージID>」「--moniker <モニカー>」「--name <パッケージ名>」「--tag <タグ>」「--command <コマンド名>」を使うことで、それぞれの属性による検索が可能だ。これらのオプションは複数指定が可能で、全条件を満たしたパッケージが検索される。
それぞれのオプションに指定した<パッケージ名>などを完全一致で検索させたい場合には、「-e」または「--exact」オプションを付ける。すると部分一致ではなく完全一致で検索が行われる。パッケージID自体は重複がないが、同じプログラムの別パッケージとパッケージIDが部分一致してしまうことがある。例えば、WebブラウザのMozilla Firefoxは、複数バージョンが登録されており、そのパッケージIDはどれも「Mozilla.Firefox」で始まる。このようなとき、-eオプションを使うことでパッケージIDが「Mozilla.Firefox」となるプログラムだけを特定できる。
なお、winget.exeのオプション文字は、GNU形式でハイフン2つとオプション名の組み合わせとなる(例:-id)。ただし、利用頻度が高いと思われるオプションには、1文字のオプション省略形が用意されている。
winget.exeのsearchサブコマンドで候補を絞ったら、showサブコマンドで少し詳細な情報を得ることができる。オプション指定は、searchサブコマンドとほぼ同じだが、showサブコマンドは、特定の1つのパッケージにしか適用できないため、複数のオプションを指定したり、searchサブコマンドで表示された名前やIDを完全指定したりするなどしてコマンドを実行する。
showサブコマンドの場合には、同名でバージョンの違う複数のパッケージを出力する「--versions」オプションがあり、これを使うと入手可能なバージョンを表示できる。バージョンを特定してパッケージ情報を見る場合には、「-v」オプション(--version)で同名パッケージのバージョンを指定できる。この「-v」オプションを省略すると最新バージョンが選択される。
installサブコマンドを使うと、リポジトリのパッケージをインストールすることが可能になる。ただし、パッケージのインストール時に管理者権限が必要になる場合もあるため、winget.exeを起動するウィンドウ(コマンドプロンプトやWindows Terminalなど)は、管理者権限で起動しておいた方がいい。
このinstallサブコマンドでは、showコマンドと同じようなオプションを使って、パッケージを特定できる。ただし、installサブコマンドには、インストール固有のオプションが幾つかある。
「Windowsパッケージマネージャー」では、パッケージ形式は定められているが、場合によっては、アプリ固有のインストールプロセスが起動することがある。このようなインストールプロセスの中には、いわゆるGUIインストーラーが含まれる場合がある。
「Windowsパッケージマネージャー」のパッケージ形式では、こうした従来のインストール方式を含むことができる。しかし、場合によっては、GUIウィンドウを表示しないでインストールしたい場合もあるだろう。こうした場合に対して、installサブコマンドには、「-i(--interactive)」と「-h(--silent)」オプションがある。前者は、GUI画面を表示し、場合によっては、ユーザー操作を要求することがある(必ずしもユーザー操作が必要になるわけではない)。後者は、GUI画面を表示せず、ユーザー操作も要求しない。
「Windowsパッケージマネージャー」の設定は、settingsサブコマンドで行う。「winget.exe --settings」を実行すると、json形式の設定ファイル「settings.json」が、拡張子「.json」の既定のプログラムによって表示される。
ただし、Windows 10のデフォルトでは既定のプログラムが設定されていないため、[このファイルを開く方法を指定してください]ダイアログが開くので、ここで「メモ帳」アプリなどを指定する。既にjsonに関連付けられたアプリケーション(Visual Studio CodeやVisual Studioなど)があれば、そちらが開く。簡易な編集を望む場合、Visual Studioは起動に時間がかかるためVisual Studio Codeなどをインストールしておくといいだろう。
こうした設定の仕組みは、現在のWindows Terminalと同じである。ただし、Windows Terminalと違って、現在のバージョンはJSONスキーマには対応していないため、構造のチェックなどは自前で行い、正しい形式のjsonファイルを維持する必要がある。
設定値は、それほど多くなく、ソースの自動更新間隔(デフォルトは5分)と、ダウンロード状態などを示すプログレスバーの色「accent」「retro」「rainbow」の3種類が指定できる。
この設定で、「実験的」とされている機能を有効にできる。実験的な機能の状態は、「features」サブコマンドで表示できるが、設定はsettingsサブコマンド側で行う必要がある。原稿執筆時点で配布されていた「v 0.2.2941」では、下表のような項目があった。listサブコマンドとupgradeサブコマンドは、実験的機能であるため、ここで有効にしておく必要がある。
機能 | 項目名 | 意味 |
---|---|---|
Command Sample | experimentalCmd | サンプル実装 |
Argument Sample | experimentalArg | サンプル実装 |
Microsoft Store Support | experimentalMSStore | ソースにMicrosoft Store(msstore)を追加する |
List Command | list | インストールパッケージを表示するListサブコマンドを有効にする |
Upgrade Command | upgrade | パッケージを更新するUpgradeサブコマンドを有効にする |
winget.exeの「実験的な機能」 |
また、「Windowsパッケージマネージャー」が使うリポジトリは、sourceサブコマンドで指定できる。ユーザーが自分用のリポジトリを作り、それを検索したり、パッケージをインストールしたりすることも可能だが、これに関しては説明が長くなるため、今回は割愛させていただく(同様にhashサブコマンドとvalidateサブコマンドもパッケージ作成に関連したサブコマンドなのでここでは解説しない)。
winget.exeは、リポジトリからパッケージ情報をダウンロードし、ローカルキャッシュとして利用する。最初にwinget.exeを起動するとダウンロードが開始され、ローカルキャッシュが作られる。このローカルキャッシュの寿命を指定するのが「settings.json」の「source」にある「autoUpdateIntervalInMinutes」で、標準では5分が設定されている。パッケージ情報をダウンロードした後、5分が経過したら、searchサブコマンドなどを使おうとすると自動的にダウンロードが行われる。手動でローカルキャッシュを更新したい場合には、「winget.exe source update」サブコマンドを利用する。
実験的機能の1つが、Microsoft Storeアプリを扱う機能だ。「"experimentalFeatures": { "experimentalMSStore":true } 」とすると、サブコマンドでMicrosoft Storeアプリの一部が検索対象となる(書式の詳細はGitHubの「WinGet CLI Settings」を参照していただきたい)。ただし、いまのところ実験段階として、一部のMicrosoft Storeアプリのみに限定されており、全てのMicrosoft Storeアプリが扱えるわけではない。
現在のプレビュー版には、listとupgradeサブコマンドがある。ただし、どちらも実験的な実装状態であり、完全には動作しない。listサブコマンドは、インストールされているパッケージおよびWin32アプリケーション、Microsoft Storeアプリを表示するためのものだ。
現在のプレビュー版では、Microsoft Storeアプリしか表示できない。そもそも、「Windowsパッケージマネージャー」でなくとも、PowerShellなどで、インストール済みのMicrosoft Storeアプリは表示が可能なので、その機能だけが実装されているのだと考えられる。
upgradeサブコマンドは、installサブコマンドとほとんど同じオプションを受け付け、インストールされているアプリケーションを最新版に更新するものだ。オプションとして、見つかった最新版を全てインストールする--allオプションが用意されている。ただし、listサブコマンドが完全ではないため、このupgradeサブコマンドも完全な状態ではない。
experimentalサブコマンドは、「--arg」オプションでASCIIアートを表示する。おそらくWindows Insider Programの参加者向けに配布した「Ninja Cat」がマジックハンドを持った恐竜に乗っているところの画像ではないかと思われる。
「Windowsパッケージマネージャー」が完成すると、Win32アプリケーションやMicrosoft Storeアプリのインストールがコマンドラインから可能になり、新規PCのインストールなどが効率的に行えるようになりそうだ。取りあえず、現時点でのプレビュー版では、リポジトリを検索してアプリケーションのインストールを行わせることができる。
例えば、Microsoftのオープンソース系プログラムである「Windows Terminal」や「PowerToys」「Visual Studio Code」などは、「Windowsパッケージマネージャー」でインストール可能だ。「Windowsパッケージマネージャー」の計画としては、インストールされているアプリの一覧を出力することも可能になり、他のマシンにまったく同じアプリをインストールすることも可能になるらしい。
こうしたWin32アプリ、特にオープンソース系のツールを多用するユーザーにとって、新規マシンへのインストールは面倒な作業の1つだった。Windows 10では、同じMicrosoftアカウントを利用すれば、基本的な設定はローミング(同期)で、移行が可能だし、ユーザーデータもOneDriveを使うことで簡単に移行できる。しかし、Win32アプリの移行に関しては、引っ越しソフトなどが必要だった。「Windowsパッケージマネージャー」により、Win32アプリのインストール作業がスクリプト化されると、ハードウェアの移行が簡単になりそうだ。
Copyright© Digital Advantage Corp. All Rights Reserved.