かなり前の話ですがWindowsにLinuxのaptやyumのような機能がコマンドラインベースで提供されたという情報を聞いていたので、それを調べてみた内容のご報告です。
その名前はWindowsらしく「winget」と言います。
wingetの基礎知識
wingetはMicrosoft提供のWindows標準ツール(コマンド)で、Windowsパッケージマネージャを操作する一機能としてリリースされています。
※参考:Microsoft Learn:WinGet ツールを使用したアプリケーションのインストールと管理
https://learn.microsoft.com/ja-jp/windows/package-manager/winget/
DebianやUbuntuのaptやRHEL系のyumのように、CUIベースでアプリケーションの追加をするのに使えるコマンドです。
ただし、aptがディストリビューションのリポジトリに登録されたアプリケーションの追加を実行するコマンドであるように、wingetも「wingetリポジトリ」に登録されているアプリケーションを対象に操作を実行するという動きをします。インストールするアプリケーションに制限がある環境での利用には注意が必要です。事前の検証が欠かせません。
wingetリポジトリ内のアプリケーションしか対象にできませんが、CUIだけでアプリケーションを導入・構成、削除などができるというのは環境や使い方によっては有用だといえそうです。
wingetを使ってみる(初回)
最初の実行時には以下のメッセージが表示されるため、同意する必要があります。
--------------------------------------------------------------
'msstore' ソースでは、使用する前に次の契約を表示する必要があります。
Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction
ソースが正常に機能するには、現在のマシンの 2 文字の地理的リージョンをバックエンド サービスに送信する必要があります (例: "US")。
すべてのソース契約条件に同意しますか?
[Y] はい [N] いいえ:
--------------------------------------------------------------
同意後にwingetの機能が使えるようになりますので、管理者権限で一度実行しておくといいと思います。
wingetのヘルプを確認
wingetをオプションなしか「-?」オプションで実行すると、サブコマンドのリストが表示されます。(以下、一部抜粋)
--------------------------------------------------------------
WinGet コマンド ライン ユーティリティを使用すると、コマンド ラインからアプリケーションやその他のパッケージをインストールできます。
使用法: winget [<コマンド>] [<オプション>]
使用できるコマンドは次のとおりです:
install 指定されたパッケージをインストール
show パッケージに関する情報を表示します
source パッケージのソースの管理
search アプリの基本情報を見つけて表示
list インストール済みパッケージを表示する
upgrade 利用可能なアップグレードの表示と実行
uninstall 指定されたパッケージをアンインストール
hash インストーラー ファイルをハッシュするヘルパー
validate マニフェスト ファイルを検証
settings 設定を開くか、管理者設定を設定する
features 試験的な機能の状態を表示
export インストールされているパッケージのリストをエクスポート
import ファイル中のすべてのパッケージをインストール
pin パッケージ ピンの管理
configure システムを適切な状態に構成します
download 指定されたパッケージからインストーラをダウンロードする
repair 選択したパッケージを修復します
特定のコマンドの詳細については、そのコマンドにヘルプ引数を渡します。 [-?]
--------------------------------------------------------------
ちなみにバージョンは1.10.390で確認しています。
これ以降で使いそうなものをざっと記述していきます。
wingetでアプリを探す
前述のヘルプから自分が使うものだけ抜き出してみました。
書式:
winget search %アプリケーション名%
アプリケーション名からwingetリポジトリに存在するパッケージかどうかを探すことができます。
画像の一番上のように、キーワードが間違っていたらまったく引っ掛かりません。アプリケーションの正式名称を間違えずに入力する必要があります。逆に言えばアプリケーションの名前を間違えなければコマンドラインだけでアプリケーションの導入を完結させることができます。
wingetでアプリをインストールする
書式:
winget install %アプリケーション名%
7-zipを例に実行してみます。
searchで7-zipというアプリケーション名がwingetリポジトリに存在することは分かったので、そのまま名称を指定します。
winget install 7-zip
実行すると、
ダウンロードらしきゲージが溜まっていき、
進捗っぽいゲージの表示がされます。
ここまでが完了したところで、
このような画面になります。7-zipは管理者権限が必要になるためUACが動作します。
UACを承認したら、
「インストールが完了しました」という表示になりました。
スタートメニューを確認すると
7-zipが追加されました。簡単。
7-zipはデスクトップ版アプリケーションがインストールされるようです。
このようにappwiz.cplでも表示されました。
インストールされているアプリのアップデート
バージョンアップも簡単です。aptのように一括でリポジトリ内のアプリケーションをアップデートできます。
書式:
winget upgrade
バージョンアップ可能なアプリを
このように列挙してくれます。
実際にアップデートするには以下のコマンドを実行します。
書式:
winget upgrade --all
「winget upgrade」で列挙されたバージョンアップを全アプリ対象にしてまとめて更新します。
実行すると、
画面中「自動的にパッケージのインストールを開始しています...」まで動作が進んでいきました。
これでバージョンアップが完了しました。wingetリポジトリ内のアプリであればこれだけで自動更新できるので、個別にアプリケーションのアップデートを実行する必要がなくなるというのはメリットとしてあります。
インストールされているアプリケーション一覧
インストールされているアプリケーションの一覧をCUI画面上に表示できます。
書式:
winget list
実行すると、
現在の環境内にインストールされているアプリケーションの一覧が表示されます。
よく見ると「ソース」に「winget」と記載のあるものは、wingetで導入されたものなのでwingetコマンドで制御可能です。
アプリケーションをアンインストール
アプリケーションのアンインストールもwingetから可能です。
書式:
winget uninstall %アプリケーション名%
先ほどインストールした7-zipをアンインストールしてみます。
winget uninstall 7-zip
で、実行すると(7-zipインストール時にUACが動作したので)
アンインストールでもUACが動作します。「はい」を選ぶと、
コマンドライン上ではアンインストールが進行してアンインストール完了のメッセージが表示されました。
プログラムと機能(appwiz.cpl)画面でも、
正常にアンインストールされたことが確認できました。
ポイント(気づいたこと)
今回の確認ではアプリケーション名でコマンドを実行したのですが、同名のアプリケーションがリポジトリ内にあった場合にどちらのアプリケーションか判別できなくなるため、一意に割り当てられている「ID」を使ったwingetコマンドの実行が確実(手堅い)ようです。
IDはwinget searchで確認できます。
画面中の「ID」の欄でアプリケーションを指定できるということのようです。
もう一つの方法
ほぼ自分用のメモ。
wingetと同様の機能を使う方法としてLinuxでよく使われるcurlのWindows版を使う、という手もあります。
ただ、Windows11標準でwingetが提供されているため、wingetを使っておくのがお手軽だと思いました。
最後に
wingetコマンドによるアプリケーションの追加と削除、テスト環境でやってみましたが有用な環境がありそうです。
バッチファイルに組み込んでインストール済のアプリケーションの制御とかバージョンを確認すためにも使えそうと思いました。(今まで手間の掛かる方法でやっていたので)
バッチファイルでwingetを使うようなことがあれば別途記事にして観たいと思います。