49
WinGet (Microsoft.AppInstaller) を使用して Windows 更新プログラムを管理する方法
ウィンゲット
(画像提供:Tom's Hardware)

WinGetは、コマンドプロンプトとPowerShellで動作するコマンドラインツールです。アプリやアプリケーションのWindowsインストールパッケージで動作します。Microsoft Learnの「wingetツールの使用」の記事によると、wingetは「Windows 10およびWindows 11コンピューター上でアプリケーションの検出、インストール、アップグレード、削除、構成を可能にします」とのことです。wingetはバックグラウンドでWindowsパッケージマネージャーサービスと連携し、そのコマンドラインインターフェースとして機能します。

WingGet はどこですか?

winget で Microsoft.Powershell をインストール

しかし、ほとんどのユーザーはPowerShellまたはコマンドプロンプトを起動してWinGetコマンドを使い始めることができるはずです。次のセクションでは、WinGetコマンドの構文と構造について簡単に説明します。通常のデスクトップ環境または本番環境から切り離してWinGetを試してみたい場合は、MS Learnドキュメントの「Windows Sandboxにwingetをインストールする」セクションの手順に従ってください。

WinGet コマンドとオプションの概要

WinGetのコマンドとコマンドラインオプションを見てみると、このツールが開発者向けに作られていることがすぐに分かります。実際、開発者でない限り、WinGetコマンドの多くはほとんど使わないでしょう。それでも、PowerShellの組み込みヘルプ機能を参考に、簡潔ながらも完全なコマンドとオプションのリストを以下に示します。

ウィンゲット

WinGetヘルプの出力には、PowerShellの17個のコマンドと7個のオプションが表示されています(画像提供:Tom's Hardware)

WinGetの主な用途: アプリの検索、インストール、更新、アンインストール

開発者はWingetを使用して、ソフトウェアパッケージを様々なオンラインソースに配布します(デフォルトのソースは「winget」というMicrosoftリポジトリです)。パッケージには、構成ファイル(通常は.msix、.msi、または.exeインストーラファイルと、それをサポートするインフラストラクチャ要素(DLLなど))を記述したマニフェストが付属しています。パッケージは、 GitHubのMicrosoft Package Manager Community Repository(別名:winget)またはMicrosoft Store(ソース:msstore)から提供されることが多いです。

この記事の焦点はエンドユーザーです。前述の見出しにあるように、エンドユーザーはWinGetを使って、必要に応じてアプリケーションを検索、インストール、アップデート、アンインストールします。このコマンドラインオプションのアルファベット順リスト(前のスクリーンショットから並べ替えられています)をご覧になる際は、この点にご留意ください(オプションは二重ダッシュで始まりますが、単一ダッシュと最初の文字だけでもほとんどの場合機能します)。 

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

表1は、左側にコマンド名またはオプション名(WinGetのコマンドラインで後続)を、右側に簡単な説明を示しています。アスタリスク(*)の付いた項目は開発者向け、プラス記号(+)の付いた項目は上級ユーザー向けです。以降、このストーリーでは、アスタリスクの付いていない項目に焦点を当てます。

スワイプして水平にスクロールします

表 1: Winget コマンドと (--) オプション。
設定+構成ファイルを読み取り、特定の構成に一致するパッケージをダウンロードしてインストールします。
--対話性を無効にする*対話型プロンプトをオフにします(通常は自動スクリプトで使用されます)
ダウンロード+特定のパッケージから現在のホストにインストーラをダウンロードします
エクスポート+インストールされているすべてのパッケージのリストを構成ファイルにエクスポートします。
機能+実験的な機能のステータスを表示します(使用するにはプレビュー バージョンが必要です)
ハッシュ*パッケージング用のインストーラファイルのハッシュ化を開発者に支援するヘルパー/ウィザード
- ヘルプ組み込みの PowerShell ヘルプにアクセスし、-? と同様に複数のレベルで動作します。
インポート+設定ファイルにリストされているすべてのパッケージをインストールします
- 情報wingetコマンドに関する情報を表示します
インストールコマンドの詳細またはオプションに従って指定されたパッケージをインストールします
リストインストールされた(ローカル)パッケージに関する情報を表示します
--ログ+ファイルエクスプローラーウィンドウでデフォルトのwingetログの場所を開きます
ピン+パッケージ ピンを管理する (更新を防止または許可するために使用)
修理*指定されたパッケージを修復します
検索基本的なパッケージデータを検索して表示する
設定+アプリの動作を管理するためのwingetの.json設定ファイルへのアクセスを提供します
見せるパッケージに関する情報を表示します(ソースデータベース、例:wingetから)
ソースパッケージ ソースを管理する (例: winget、msstore、その他のサードパーティ サイト)
アンインストール指定されたパッケージをアンインストールする
アップグレード指定されたパッケージを更新する
検証*マニフェストファイルの正確性と完全性を確認する
--詳細*詳細ログをオンにする
--バージョン現在実行中の WinGet のバージョン番号を表示します
- 待って*Winget を終了する前にユーザーに何らかのキーを押すように促す

結局のところ、WinGetの主要なコマンドとオプション(表1ではマークされていません)は、--info、--help、install、list、search、show、source、uninstall、upgrade、--versionです。これらについては、以降のセクションでさらに詳しく説明します。

WinGetでの日々の作業

WinGetはパッケージのインストールや削除にも便利ですが、主にアップデートツールとして利用しています。つまり、インストール済みのWindowsパッケージを調査します。インストール済みのバージョンをソースデータベース(通常はGitHubのWinGetリポジトリ)の最新バージョンと比較することで、 WinGetのアップグレードは更新が必要なパッケージをすべて報告します。つまり、リポジトリ内のバージョンは、ローカルにインストールされているバージョンよりも番号が大きいということです。以下はWindows 11 SFF PC(Dell OptiPlex 7080)での例です。

ウィンゲット

Winget アップグレードでは、利用可能なアップデートを含むパッケージが表示されます。(画像提供: Tom's Hardware)

私が最も頻繁に使用する WinGet コマンドは次のとおりです (ほとんどの PC でほぼ毎日使用)。

Winget アップグレード --all --include-unknown

これは、WinGet に、リポジトリから利用可能なバージョン番号が大きいパッケージをすべてインストールするように指示します。名前と ID 情報(上記の 1 列目と 2 列目)が完全に一致していなくても、すべてインストールされます(部分一致は問題ありません。これはinclude-unknownによって可能になります)。同じ PC から実行すると、次のように表示されます。

ウィンゲット

Winget upgrade -all –include-unknown は Windows 10 および 11 で「すべてのアプリを更新」します。(画像提供: Tom's Hardware)

WinGetで更新できないアプリケーションは、開発者がパッケージマニフェストをリポジトリに提供していないアプリケーションだけです。また、WinGetの対象外となる一般的なアプリケーションを捕捉して更新するために、PatchMyPCを実行することもあります。

WinGet インストール/アンインストールの使用

WinGet のインストールおよびアンインストールコマンドを使うのは、ほとんどの場合、アップデート/アップグレードが失敗したときです。WinGet は本質的に保守的な動作をします。つまり、現在のインストーラーとダウンロードした代替インストーラーとの間に何らかの差異が検出されると、アップグレードを適用しません。代わりに、アップデートに失敗した理由として、インストールテクノロジが異なることを示唆するエラーメッセージを表示します。

実際、最近PowerShell自体をアップグレードしようとしたときに、この現象に遭遇しました。正確な情報は「新しいバージョンのインストールテクノロジが、現在インストールされているバージョンと異なります」です。適切な対応方法も示されています。

ウィンゲット

WinGet はインストーラーの変更を検出すると、慎重を期してアップグレードを拒否します。(画像提供: Tom's Hardware)

スクリーンショットの下部に残っているテキストには、「パッケージをアンインストールし、新しいバージョンをインストールしてください」と書かれています。つまり、次のコマンドシーケンスを実行する必要があります。

Winget で Microsoft.PowerShell をアンインストールします。Winget
で Microsoft.PowerShell をインストールします。

最初のコマンドは古いバージョンのコードをPCから削除し、2番目のコマンドはそれを新しいバージョンに置き換えます。PowerShellは、古いバージョンを削除して新しいバージョンを導入する間も、メモリ内のバージョンから実行を継続するほど賢いです。しかし、この一連のコマンドの後には、PowerShellを一度閉じて再度開き、メモリ内の(古い)バージョンをフラッシュしてから新しいバージョンを起動するように指示されます。

検索、リスト、表示コマンドでパッケージを見つける

winget searchwinget はどちらも、winget ソース(デフォルトでは WinGet GitHub リポジトリ)からのアクセス情報を表示します。これらのコマンドを使用して、指定した検索文字列に一致する「外部」の情報を探索できます。以下は、PowerShell の表示設定スクリプト/ツール「winfetch」に基づく例です。

ウィンゲット

(画像提供:Tom's Hardware)

WinGet の検索および表示コマンドを使用すると、さまざまなレベルの詳細が提供されます。

上のスクリーンショットでわかるように、search は対象リポジトリで一致する文字列が見つかった場合、その簡単な情報を表示するだけです。一方、show は一致したリポジトリの完全な情報を表示します。 winfetch ユーティリティの「ヒット名」はsearchでは機能しますが、showでは機能しないことに注意してください。ヒット名を表示するには、ID値(nepnep.neofetch-win )を使用する必要がありました( Name文字列のneofetch-winも同様に機能します)。一般的に、 showでは最も近い一意の一致が機能しますが、 searchでは近いものであれば何でも機能することがよくあります。

winget list はsearch と同じように動作しますが、ローカルにインストールされたパッケージを検索します。上記のスクリーンショットを撮影したPCに winfetch をインストールした後、同じマシンでwinget list neofetch-win を実行すると、以下の結果が表示されます(ID文字列全体は同じです)。

ウィンゲット

ウィンゲットリストまたは    どちらも同じ結果になります。(画像提供:Tom's Hardware)

2つの主要オプション --version と --info

フルレングスのオプションは、ダッシュ1つと最初の文字で省略できる場合があります。次のスクリーンショットに示すように、-v は--versionと同様に動作し、実行中の WinGet インスタンスのバージョン番号を数値で表示します。ただし、図のように完全な winget 情報ブロックを表示するには、winget --infoと入力する必要があります。

ウィンゲット

Winget -v および --info コマンドの出力には、それぞれ数値バージョンと完全な詳細が表示されます。(画像提供: Tom's Hardware)

WinGetをPCで使う

PC(複数可)でPowerShellまたはコマンドプロンプトセッションを開きます。「winget -v」と入力して、インストールされているかどうかを確認します。インストールされている場合は、前のスクリーンショットに示されているv.1.7.17261のようなバージョン番号が表示されます。インストールされていない場合は、「'winget'という用語が認識されません…」で始まるエラーメッセージが表示されます。後者の場合は、WinGetのGitHubページにアクセスして最新バージョンを入手し、インストールしてください(右側の列の「リリース」見出しの下に緑色の「最新」ボタンが表示されるまで下にスクロールしてください)。

私の Windows PC のささやかな一群 (物理デバイスが 12 台、このグループ内のより高性能なノート PC とデスクトップに同数の VM が散在) で Windows パッケージを最新の状態に保つために WinGet を使用するのは (ほぼ) 日課になっています。WinGet は、スクリプトでも (API 経由でプログラムでも) 対話形式でも適切に機能するすばらしいツールです。Winget ( Id = Microsoft.AppInstaller ) を知れば知るほど、気に入るようになります。まだ使用していない場合は、ぜひ試してみてください。最後に、winget list Microsoft.AppInstallerwinget show Microsoft.AppInstaller の出力のスクリーンショットを次に示します。お楽しみください。

ウィンゲット

Winget List ではローカルバージョンの情報を提供し、Winget Show ではすべての詳細を明らかにします。(画像提供: Tom's Hardware)

Ed Tittelは長年ITライター、リサーチャー、コンサルタントとして活躍し、Tom's Hardwareにも時折寄稿しています。2018年からWindows Insider MVPを務めており、OS関連のドライバー、トラブルシューティング、セキュリティに関するトピックを好んで取り上げています。