wingetを使おう 後編:wingetの詳細設定、Tabキー補完など
Microsoftのパッケージ管理ソフト「winget」の使い方を紹介します。wingetは、Linuxでいうaptやyum、dnfなどに相当するツールで、wingetコマンドを通して、wingetリポジトリ(や、将来的にはMicrosoftストア)で配布されているソフトを導入することができます。
後編のこの記事では、wingetそのものの設定方法(試験的機能の有効化など)や、PowerShellにおけるwingetコマンドのTabキー補完、その他の機能を紹介します。
本記事は、「wingetを使おう」前編・中編・後編のうち後編です。
前編では、wingetそのもののインストール方法と、wingetを用いたアプリのインストール方法を紹介します。
中編では、wingetを用いたアプリのアンインストール、アップグレードや、インストール済みアプリ一覧の取得方法を紹介します。
後編(本記事)では、wingetそのものの設定方法やその他情報(PowerShellのTabキー補完)を紹介します。
wingetの設定を変更する
winget自体の設定も変更できます。また、試験的機能はデフォルトでオフになっていますが、ここでオンにすることで利用できるようになります(experimentalFeatures)。
winget設定ファイル(settings.json)の開き方
設定できるといっても、設定用のUIが用意されているわけではなく、設定用のJSONファイルを書き換えることで設定変更できます。VSCodeなど、JSONに対応したエディタを用意しておくと便利です。ちなみに、VSCodeもwinget install vscode
でインストールできます。インストールしたら、拡張子jsonをVSCodeに関連付けておきましょう。
設定用のJSONファイルは、winget settings
コマンドを実行すると開けます(jsonファイルに関連付けられているエディタで開かれます。何も変更していない場合、メモ帳で開かれます)。もしくは、次のどちらかにJSONファイルがありますので、それを直接開いても構いません。
- %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json
- %LOCALAPPDATA%\Microsoft\WinGet\Settings\settings.json
はじめて設定用のJSONファイルを開くと、次のようなスケルトン状態だと思います。ここにいろいろ書き足していくと、設定変更できます。
{
"$schema": "https://aka.ms/winget-settings.schema.json",
// For documentation on these settings, see: https://aka.ms/winget-settings
// "source": {
// "autoUpdateIntervalInMinutes": 5
// },
}
記事執筆時点(2021/08/09、winget v1.0.11591)では、次のような設定項目があるようです。installBehaviorの所はMicrosoftの記事を読んでもよく分からなかったためコメントアウトしていますが、それ以外はデフォルト設定で記述しています。こちらをコピペして、変更したい箇所だけ変えて保存すれば良いでしょう。
{
"$schema": "https://aka.ms/winget-settings.schema.json",
// For documentation on these settings, see: https://aka.ms/winget-settings
"source": {
"autoUpdateIntervalInMinutes": 5
},
"visual": {
"progressBar": "accent"
},
"installBehavior": {
"preferences": {
/*
"scope": "user",
"locale": ["ja-JP"]
*/
},
"requirements": {
/*
"scope": "user",
"locale": ["ja-JP"]
*/
}
},
"telemetry": {
"disable": false
},
"network": {
"downloader": "default",
"doProgressTimeoutInSeconds": 60
},
"experimentalFeatures": {
"experimentalCMD": false,
"experimentalARG": false,
"experimentalMSStore": false,
"packagedAPI": false,
"dependencies": false,
"list": false,
"upgrade": false,
"uninstall": false,
"restSource": false
}
}
ちなみに、JSONファイルの文法が間違っているなど、設定ファイルが不正な状態になっている場合、wingetコマンドを実行すると次にようなメッセージが出てきます。この場合は、もう一度JSONファイルが正しいか確認してみてください。
PS C:\> winget
設定の読み込み中に予期しないエラーが発生しました。Settings コマンドを実行して、設定を確認してください。
(以下省略)
設定項目の詳細
設定項目の詳細は、Microsoftの記事を参照してください。
ここでは、いくつか代表的な設定項目を紹介します。
source の autoUpdateIntervalInMinutes(デフォルト:5)
通常、wingetの各種コマンドを実行すると、一定間隔でパッケージリストの更新がかかります。この設定項目ではパッケージリストの更新間隔を変更でき、何分ごとに更新するかを正の整数で指定します。
0を指定すると、自動更新されなくなります。パッケージリストの更新(apt update
に相当する操作)はwinget source update
コマンドで行えます。
visual の progressBar(デフォルト:"accent")
ソフトダウンロード中などのプログレスバーの表示を切り替えます。選択肢は「accent」、「rainbow」、「retro」のいずれかで、順に下図のような表示になります。VSCodeで入力しようとすると「plain」という候補も出てきますが、実際には存在しない設定のようです。
experimentalFeatures の experimentalMSStore(デフォルト:false)
現在のwingetでは、wingetリポジトリのソフトしか扱えませんが、将来的にはMicrosoftストアのアプリもインストールしたりできるようになるそうです。現在、そのMicrosoftストアアプリを扱う機能は、試験的機能として提供されていて、こちらのオプションをtrueにすると利用できるようになります。
例えば、これを有効にしてPython関連のパッケージを探すと、下記のようにwingetリポジトリとmsstoreリポジトリそれぞれで見つけることができます。
PS C:\> winget search Python.
名前 ID バージョン ソース
----------------------------------------------------------------------
winpython-dot winpython.winpython-dot 3.9.5.0 winget
winpython winpython.winpython 3.9.5.0 winget
Python 3 Python.Python.3 3.9.6150.0 winget
Python 2 Python.Python.2 2.7.18150 winget
winpython-pypy winpython.winpython-pypy 3.7.10.0 winget
Python 3.7 PythonSoftwareFoundation.Python.3.7 Latest msstore
Python 3.8 PythonSoftwareFoundation.Python.3.8 Latest msstore
Python 3.9 PythonSoftwareFoundation.Python.3.9 Latest msstore
「msstoreリポジトリにあるものをwingetでインストール」と、「Microsoft Storeアプリからアプリをインストール」は等価です。つまり、Microsoft Storeアプリを使ってインストールする代わりに、wingetコマンドを使ってストアで配信されているアプリをインストールできるようになります。試しに、Microsoft Storeでアプリのページを開いたままwinget install
すると、下図のようにストアアプリの方でもインストール中の表示になります。
PS C:\> winget install "Python 3.9"
見つかりました Python 3.9 [PythonSoftwareFoundation.Python.3.9]
このパッケージは Microsoft Store から提供されています。winget は、現在のユーザーに代わって Microsoft Store からパッケージを取得する必要がある場合があります。
パッケージ取得の確認/要求...
パッケージ取得の成功の確認/要求
パッケージのインストールを開始しています...
██████████████████████████████ 100%
インストールが完了しました
また、Windows Terminalのように、wingetリポジトリとmsstoreリポジトリの両方で同じ名前・同じIDで配信されている場合、名前やIDを指定するだけでは一つに特定できず、インストールできません。
PS C:\> winget install "Windows Terminal"
複数のパッケージが入力条件に一致しました。入力内容を修正してください。
名前 ID ソース
--------------------------------------------------
Windows Terminal Microsoft.WindowsTerminal winget
Windows Terminal Microsoft.WindowsTerminal msstore
そのような場合は、winget install --source msstore "Windows Terminal"
のように、リポジトリ名も明示してインストールコマンドを実行します。
PS C:\> winget install --source msstore "Windows Terminal"
見つかりました Windows Terminal [Microsoft.WindowsTerminal]
このパッケージは Microsoft Store から提供されています。winget は、現在のユーザーに代わって Microsoft Store からパッケージを取得する必要がある場合があります。
パッケージ取得の確認/要求...
パッケージ取得の成功の確認/要求
パッケージのインストールを開始しています...
██████████████████████████████ 100%
インストールが完了しました
ちなみに、Microsoftストアでアプリをインストールする際は、Microsoftアカウントのログインが必要です。Microsoftストアアプリであれば、インストールの際にログインを促されますが、wingetの場合は「ストア アカウントが見つかりませんでした」というエラーでインストールが止まってしまいます。事前にMicrosoftストアアプリでログインしておいてください。
experimentalFeatures の dependencies(デフォルト:false)
パッケージ管理ソフトの最大の特徴は、依存関係を解決するような芋づる式インストールだと思っていますが、wingetにも将来的に同様の機能が搭載される予定です。現在、dependenciesという試験的機能の有効化オプションがありますが、これをtrueにすると依存関係の情報を表示してくれるそうです(現時点では、芋づるインストールは実装されていないとのこと)。依存関係の表示がされるパッケージが見つけられなかったので、ここでは機能の紹介だけにしておきます。
次のページに、依存関係の仕様案がまとめられていますが、aptやdnfなどと同じような動きで、依存関係を持つアプリをインストールしようとすると、合わせて.NET FrameworksやVisual C++ Redistributableもインストールするか聞かれる感じになるようです。
まだまだ完成には時間がかかるのかもしれませんが、期待して待っていたいと思います。
その他の機能
winget –help:ヘルプの表示
winget --help
を実行すると、簡単な使用方法が表示されます。同様に、winget install --help
のように、サブコマンドの後に--help
をつけると、サブコマンドのヘルプが表示されます。
wingetコマンドの使い方を忘れてしまった場合は、とりあえず--help
をつけて実行してみましょう。
winget show:パッケージ情報の表示
winget show パッケージ名
で、パッケージの情報を表示できます。
PowerShellにwingetのTabキー補完を設定する
Linuxのaptやdnfだと「apt ins[Tab]」で「apt install」とサブコマンド補完してくれたり、「apt install ngi[Tab]」で「apt install nginx」とパッケージ名を補完してくれたりします。
同様のことが、PowerShellとwingetの組み合わせでもできます。方法は、PowerShellのprofileファイルにコンプリーションの設定を書くだけです。profileファイルのパスは、PowerShell上でecho $PROFILE
で確認できます。今までに作成したことがない場合は、新規作成します。
次のコマンドを実行すれば、profileファイルの新規作成と、その中身を追記することができます。追記が終わったら、PowerShellを再起動して動作を確認してみてください。
New-Item (Split-Path -Parent $PROFILE) -type directory -Force
@'
# WinGet Command Line Tab Completion
# https://github.com/microsoft/winget-cli/blob/master/doc/Completion.md
# ( https://astherier.com/blog/2021/08/winget-usage-2/ )
Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
[Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new()
$Local:word = $wordToComplete.Replace('"', '""')
$Local:ast = $commandAst.ToString().Replace('"', '""')
winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
'@ | Add-Content $PROFILE
なお、profileファイルの利用もPowerShellスクリプトの実行権限が必要ですので、事前に管理者権限PowerShellでSet-ExecutionPolicy RemoteSigned
などを実行しておいてください。
また、Windows 10やWindows 11に標準搭載されている「Windows PowerShell (powershell.exe)」と、オープンソース版の「PowerShell 7 (pwsh.exe)」は$PROFILE
のパスが異なりますので、両方とも使用している方は、それぞれで上記コマンドを実行してください。
あとがき
前編・中編・後編と3回に渡ってwingetコマンドの使い方を紹介しました。
現時点ではWindowsに標準搭載されておらず、未実装の機能があるなど、開発途上ではあります。ですが、Linuxのaptやdnfなどと同じように、コマンドラインだけでソフトのインストールや管理を行うことができますので、同じ環境をいくつも複製したり管理したりするのが楽になると思いますので、ぜひ使ってみてください。
後編までご覧いただき、ありがとうございます。この「wingetを使おう」記事は、前編と中編もございます。もしご覧になっていない方は、良ければこちらもご覧ください。
前編では、wingetそのもののインストール方法と、wingetを用いたアプリのインストール方法を紹介しています。
中編では、wingetを用いたアプリのアンインストール、アップグレードや、インストール済みアプリ一覧の取得方法を紹介します。
参考リンク
wingetの公式ドキュメントはこちらです。
また、こちらのページ(GitHubのwingetリポジトリ)も参考になりました。
ディスカッション
コメント一覧
まだ、コメントがありません