Windows Package Manager CLI 利用ノート

このノートの目的は、Windows 10 で winget を利用可能な状態にすることだ。成功すれば、手動で更新していた各種 Windows プログラムのアップグレード作業が著しく楽になるはずだ。

リンク

本稿でゴチャゴチャ記すことはしたくない。公式文書や先人たちの成果をありがたくいただくことにする。

インストール

Windows Package Manager CLI のインストール手順を簡単に記す。

まずコマンドプロンプトを起動する。おもむろに winget -v を実行する。バージョン番号に preview が付いている場合にはこれをアンインストールする。何も実行されないようならば問題なく次の工程に進むこと。

本プログラムを Windows にインストールする。Microsoft Store 経由でインストールするのが推奨手段とされている。検索ボックスで App Installer と入力して検索する。出てくるものをインストールする。この問い合わせ文字列がわかりにくかった。

インストールが終わったらコマンド winget -v を実行して利用可能であることを確認する。

> winget -v
v1.1.13405

設定

Windows Package Manager CLI の設定手順について簡単に記す。

CLI であるので、利用者の中では既定のコマンドラインオプションがあれば、それらをテキストファイルにあらかじめ指定しておく方式となる。

コマンド winget settings を実行すると、設定ファイルがテキストエディターに開かれる。設定ファイルは JSON ファイル settings.json だ。これは複雑なパスに配置されているのでバックアップやバージョン管理の際に注意を要する。

%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json

設定項目仕様は公式サイトの Settings.md に記載されている。

現在試行中の設定内容を次に示す:

{
    "$schema": "https://aka.ms/winget-settings.schema.json",
    "source": {
        "autoUpdateIntervalInMinutes": 0
    },
    "installBehavior": {
        "preferences": {
            "scope": "machine"
        }
    },
    "telemetry": {
        "disable": true
    },
    "network": {
        "downloader": "default",
        "doProgressTimeoutInSeconds": 60
    }
}

利用例

Windows Package Manager CLI の性質上、利用例は限定される。

Note

UNIX/Linux コマンドとは異なり winget はコマンドライン文字列の大文字小文字を区別しない。

コマンド一覧を確認する

引数なしでコマンド winget を実行すると、出力の一部にコマンド一覧が現れる。次にその内容を引用する:

使用状況: winget [<コマンド>] [<オプション>]

使用できるコマンドは次のとおりです:
  install    指定されたパッケージをインストール
  show       パッケージに関する情報を表示します
  source     パッケージのソースの管理
  search     アプリの基本情報を見つけて表示
  list       インストール済みパッケージを表示する
  upgrade    指定されたパッケージをアップグレードします
  uninstall  指定されたパッケージをアンインストール
  hash       インストーラー ファイルをハッシュするヘルパー
  validate   マニフェスト ファイルを検証
  settings   設定を開くか、管理者設定を設定する
  features   試験的な機能の状態を表示
  export     インストールされているパッケージのリストをエクスポート
  import     ファイル中のすべてのパッケージをインストール

特定のコマンドの詳細については、そのコマンドにヘルプ引数を渡します。 [-?]

次のオプションを使用できます。
  -v,--version  ツールのバージョンを表示
  --info        ツールの一般情報を表示

詳細については、次を参照してください。 https://aka.ms/winget-command-help

プログラムをインストールする

次のコマンドは VS Code を Microsoft Store や WinGet のリポジトリーなどから検索して、存在すればインストールする:

> winget install --exact --id Microsoft.VisualStudioCode

この方式では、オプション --id の引数を知っていなければならない。例えば、コマンド winget search を実行するなどして、欲しいプログラムごとに情報を別途得るといい。

既存のプログラムを更新する

すでにインストール済みのプログラムのバージョンを最新にしたい。これがもっとも多い利用例だと思う。特定のプログラムだけ更新する場合と、管理可能なプログラムすべてを更新する場合とがある。

> winget upgrade --exact --id Microsoft.VisualStudioCode
> winget upgrade --all

どのプログラムが更新対象であるかを調べるには、引数なしで実行し Available 列を見ればよい。

> winget upgrade

新しい Windows PC に移行する

新しい Windows PC でも同じプログラム集合を利用したいのが自然だ。Python のパッケージ環境を移行するのと考え方は似ている。プログラム一覧を移行元でエクスポートして、移行先でインポートするという手順だ。

> winget export -o winget.json

JSON ファイルが生成される。これを移行先システムに何らかの手段でコピーし、インポートする:

> winget import -i winget.json

その他

WSL からコマンドを実行できるようにする

通常、パスが通っていれば WSL 環境でも winget.exe を実行することは可能だ。

%LOCALAPPDATA%\Microsoft\WindowsApps\winget.exe

何ヶ月経ってもパッケージをアップグレードしてくれないとき

コマンド winget upgrade でいつまでも更新可能なパッケージがないと表示され続ける場合、コマンド winget source update で解決する場合がある。

> winget source update
すべてのソースを更新しています...
ソースを更新しています: msstore...
完了
ソースを更新しています: winget...
  ██████████████████████████████  100%
完了

このあと winget upgrade すると、更新可能なパッケージ一覧が出力されることがある。