Windows環境再構築をコマンドラインで自動化可能にするMicrosoft製ツール「winget」とはWindows 10 The Latest(2/2 ページ)

» 2020年12月03日 05時00分 公開
[塩田紳二]
前のページへ 1|2       

「Windowsパッケージマネージャー」を使ってみる

 具体的に「Windowsパッケージマネージャー」を使ってみることにしよう。まず、気になるところとしては、どんなソフトウェアがリポジトリに登録されているかだ。これには、winget.exeのsearchサブコマンドを使うことで調べられる。オプションなしで実行すると、リポジトリにある全てのパッケージを列挙できる。パッケージ/プログラム名の一部を引数として指定することで、パッケージID、名前、モニカー(別名)といったパッケージが持つ情報との部分一致(大文字小文字の区別なし)で検索が行われる。

winget.exeのsearchサブコマンドで実行する winget.exeのsearchサブコマンドで実行する
ソース(リポジトリ)に登録されているパッケージは、引数なしのsearchサブコマンドで出力できる。

 また、オプションである「--id <パッケージID>」「--moniker <モニカー>」「--name <パッケージ名>」「--tag <タグ>」「--command <コマンド名>」を使うことで、それぞれの属性による検索が可能だ。これらのオプションは複数指定が可能で、全条件を満たしたパッケージが検索される。

searchサブコマンドに検索語を付けて検索する searchサブコマンドに検索語を付けて検索する
searchサブコマンドでは、オプションなしの文字列指定で名前やID、モニカーなどの情報の部分一致で検索を行う他、オプションで対象を限定して検索することもできる。searchコマンドのオプションのほとんどは他のサブコマンドと共通だ。

searchサブコマンドに--idオプションを付けて検索する searchサブコマンドに--idオプションを付けて検索する
--idオプションを付けることで、ID欄に絞り込んだ検索が行える。同様にオプションを指定することで検索範囲を絞り込むことができる。

 それぞれのオプションに指定した<パッケージ名>などを完全一致で検索させたい場合には、「-e」または「--exact」オプションを付ける。すると部分一致ではなく完全一致で検索が行われる。パッケージID自体は重複がないが、同じプログラムの別パッケージとパッケージIDが部分一致してしまうことがある。例えば、WebブラウザのMozilla Firefoxは、複数バージョンが登録されており、そのパッケージIDはどれも「Mozilla.Firefox」で始まる。このようなとき、-eオプションを使うことでパッケージIDが「Mozilla.Firefox」となるプログラムだけを特定できる。

完全一致による検索を行う 完全一致による検索を行う
名称やIDの先頭部分が一致してしまう場合、--exactオプションを使うことで完全一致による検索が行える。

 なお、winget.exeのオプション文字は、GNU形式でハイフン2つとオプション名の組み合わせとなる(例:-id)。ただし、利用頻度が高いと思われるオプションには、1文字のオプション省略形が用意されている。

 winget.exeのsearchサブコマンドで候補を絞ったら、showサブコマンドで少し詳細な情報を得ることができる。オプション指定は、searchサブコマンドとほぼ同じだが、showサブコマンドは、特定の1つのパッケージにしか適用できないため、複数のオプションを指定したり、searchサブコマンドで表示された名前やIDを完全指定したりするなどしてコマンドを実行する。

showサブコマンドは対象が1つである必要がある showサブコマンドは対象が1つである必要がある
showサブコマンドは、対象が1つに限定できないとパッケージ情報を表示しない。searchコマンドで得られたIDを完全に指定したり、--sourceオプションで対象を限定したりするなど対象を1つに絞る必要がある。

 showサブコマンドの場合には、同名でバージョンの違う複数のパッケージを出力する「--versions」オプションがあり、これを使うと入手可能なバージョンを表示できる。バージョンを特定してパッケージ情報を見る場合には、「-v」オプション(--version)で同名パッケージのバージョンを指定できる。この「-v」オプションを省略すると最新バージョンが選択される。

リポジトリには複数のパッケージが登録されている リポジトリには複数のパッケージが登録されている
リポジトリ内ではパッケージはバージョンごとに管理されている。これは、ソフトウェア状態により過去バージョンが必要になることがあるからだ。このためパッケージは、バージョン別に管理されており、showサブコマンドの--versionsオプションで一覧を得られ、--versionオプションでバージョンを指定できる。

winget.exeでパッケージをインストールする

 installサブコマンドを使うと、リポジトリのパッケージをインストールすることが可能になる。ただし、パッケージのインストール時に管理者権限が必要になる場合もあるため、winget.exeを起動するウィンドウ(コマンドプロンプトやWindows Terminalなど)は、管理者権限で起動しておいた方がいい。

 このinstallサブコマンドでは、showコマンドと同じようなオプションを使って、パッケージを特定できる。ただし、installサブコマンドには、インストール固有のオプションが幾つかある。

 「Windowsパッケージマネージャー」では、パッケージ形式は定められているが、場合によっては、アプリ固有のインストールプロセスが起動することがある。このようなインストールプロセスの中には、いわゆるGUIインストーラーが含まれる場合がある。

 「Windowsパッケージマネージャー」のパッケージ形式では、こうした従来のインストール方式を含むことができる。しかし、場合によっては、GUIウィンドウを表示しないでインストールしたい場合もあるだろう。こうした場合に対して、installサブコマンドには、「-i(--interactive)」と「-h(--silent)」オプションがある。前者は、GUI画面を表示し、場合によっては、ユーザー操作を要求することがある(必ずしもユーザー操作が必要になるわけではない)。後者は、GUI画面を表示せず、ユーザー操作も要求しない。

winget.exeでインストールを実行するとGUIが表示されるものもある winget.exeでインストールを実行するとGUIが表示されるものもある
一部のパッケージは、GUIウィンドウを開くインストーラーを持つ。この場合、ユーザー操作が必要になる場合もありえる。スクリプト内で実行する場合などには、--silentオプションで、GUIウィンドウを抑制できる。

winget.exeのデフォルトの設定を変更する

 「Windowsパッケージマネージャー」の設定は、settingsサブコマンドで行う。「winget.exe --settings」を実行すると、json形式の設定ファイル「settings.json」が、拡張子「.json」の既定のプログラムによって表示される。

設定はsettings.jsonファイルで行う 設定はsettings.jsonファイルで行う
settingサブコマンドは、settings.jsonファイルを出力し、これをJSONエディタで開く。「メモ帳」アプリやVisual Studio Codeなどを起動して編集を行えばよい。

 ただし、Windows 10のデフォルトでは既定のプログラムが設定されていないため、[このファイルを開く方法を指定してください]ダイアログが開くので、ここで「メモ帳」アプリなどを指定する。既にjsonに関連付けられたアプリケーション(Visual Studio CodeやVisual Studioなど)があれば、そちらが開く。簡易な編集を望む場合、Visual Studioは起動に時間がかかるためVisual Studio Codeなどをインストールしておくといいだろう。

 こうした設定の仕組みは、現在のWindows Terminalと同じである。ただし、Windows Terminalと違って、現在のバージョンはJSONスキーマには対応していないため、構造のチェックなどは自前で行い、正しい形式のjsonファイルを維持する必要がある。

 設定値は、それほど多くなく、ソースの自動更新間隔(デフォルトは5分)と、ダウンロード状態などを示すプログレスバーの色「accent」「retro」「rainbow」の3種類が指定できる。

settings.jsonでプログレスバーを「rainbow」に設定する settings.jsonでプログレスバーを「rainbow」に設定する
settings.jsonの「progressBar」では、進行状態を示すプログレスバーの色を3つの中から選ぶことができる。「rainbow」を選択すると、画面のようにカラフルなプログレスバーとなる。

 この設定で、「実験的」とされている機能を有効にできる。実験的な機能の状態は、「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」がマジックハンドを持った恐竜に乗っているところの画像ではないかと思われる。

experimentalサブコマンドを--argオプションを付けて実行する experimentalサブコマンドを--argオプションを付けて実行する
experimentalサブコマンドは、--argオプションを指定するとASCIIアートとあいさつ文を表示する。ASCIIアートは、Windows Insider向けに配布した画像(右上)だと思われる。

 「Windowsパッケージマネージャー」が完成すると、Win32アプリケーションやMicrosoft Storeアプリのインストールがコマンドラインから可能になり、新規PCのインストールなどが効率的に行えるようになりそうだ。取りあえず、現時点でのプレビュー版では、リポジトリを検索してアプリケーションのインストールを行わせることができる。

 例えば、Microsoftのオープンソース系プログラムである「Windows Terminal」や「PowerToys」「Visual Studio Code」などは、「Windowsパッケージマネージャー」でインストール可能だ。「Windowsパッケージマネージャー」の計画としては、インストールされているアプリの一覧を出力することも可能になり、他のマシンにまったく同じアプリをインストールすることも可能になるらしい。

 こうしたWin32アプリ、特にオープンソース系のツールを多用するユーザーにとって、新規マシンへのインストールは面倒な作業の1つだった。Windows 10では、同じMicrosoftアカウントを利用すれば、基本的な設定はローミング(同期)で、移行が可能だし、ユーザーデータもOneDriveを使うことで簡単に移行できる。しかし、Win32アプリの移行に関しては、引っ越しソフトなどが必要だった。「Windowsパッケージマネージャー」により、Win32アプリのインストール作業がスクリプト化されると、ハードウェアの移行が簡単になりそうだ。

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。