treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Windows版aptのような「winget」を調べる

かなり前の話ですが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を使うようなことがあれば別途記事にして観たいと思います。