wingetを使おう 中編:wingetでソフトを管理する
Microsoftのパッケージ管理ソフト「winget」の使い方を紹介します。wingetは、Linuxでいうaptやyum、dnfなどに相当するツールで、wingetコマンドを通して、wingetリポジトリ(や、将来的にはMicrosoftストア)で配布されているソフトを導入することができます。
中編のこの記事では、wingetを用いたアプリのアンインストールやバージョンアップ、インストール済みソフト一覧の取得やソフトの一括インストール方法を紹介します。
本記事は、「wingetを使おう」前編・中編・後編のうち中編です。
前編では、wingetそのもののインストール方法と、wingetを用いたアプリのインストール方法を紹介します。
中編(本記事)では、wingetを用いたアプリのアンインストール、アップグレードや、インストール済みアプリ一覧の取得方法を紹介します。
後編では、wingetそのものの設定方法やその他情報(PowerShellのTabキー補完)を紹介します。
wingetでインストール済みソフトを管理する
wingetでインストールしたアプリは、wingetコマンドで管理することができます。ここでは、wingetを用いてアプリをアンインストールする方法と、アップデートする方法を紹介します。
winget uninstall:パッケージをアンインストールする
wingetでインストールしたソフトは、winget uninstall パッケージ名
でアンインストールできます。
PS C:\> winget uninstall CrystalDiskMark
Windows Terminalを一般権限で開いている場合、アンインストールの際も、UACの昇格確認がある場合があります。問題なければ「はい」を押しましょう。
今回例に挙げたCrystalDiskMarkの場合は、アンインストールは途中で「設定やログを削除して良いか」と聞かれます。このあたりの扱われ方は、ソフトによると思います。他のソフトでは、何も聞かれずにアンインストールが進みます。
下記のように、正常終了と表示されたら、アンインストール完了です。
PS C:\> winget uninstall CrystalDiskMark
見つかりました CrystalDiskMark [CrystalDewWorld.CrystalDiskMark]
パッケージのアンインストールを開始しています...
正常にアンインストールされました
winget upgrade:パッケージをアップデートする
パッケージを最新版にアップデートする
wingetでインストールしたパッケージは、winget upgrade パッケージ名
で最新バージョンに更新できます。このときも、パッケージ名には正式名かIDかmonikerに完全一致するよう指定します。
PS C:\> winget upgrade CrystalDiskMark
見つかりました CrystalDiskMark [CrystalDewWorld.CrystalDiskMark]
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://osdn.net/frs/redir.php?m=auto&f=crystaldiskmark%2F75540%2FCrystalDiskMark8_0_4.exe
██████████████████████████████ 3.87 MB / 3.87 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
パッケージを指定したバージョンにアップデートする
また、winget upgrade
でも-vオプション(–versionオプション)が利用できます。これで、指定のバージョンへ更新できます。
PS C:\> winget upgrade CrystalDiskMark -v 8.0.3
見つかりました CrystalDiskMark [CrystalDewWorld.CrystalDiskMark]
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://osdn.net/frs/redir.php?m=auto&f=crystaldiskmark%2F75466%2FCrystalDiskMark8_0_3.exe
██████████████████████████████ 3.86 MB / 3.86 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
ちなみに、今より古いバージョンを指定しても、ダウングレードはできないようです。
PS C:\> winget upgrade CrystalDiskMark -v 8.0.2
適用可能な更新は見つかりませんでした。
すべてのパッケージを最新版にアップデートする
パッケージ名なしで実行すると、アップデートがあるパッケージを出力してくれます。
PS C:\> winget upgrade
名前 ID バージョン 利用可能 ソース
--------------------------------------------------------------------------
CrystalDiskInfo CrystalDewWorld.CrystalDiskInfo 8.6.1 8.12.4 winget
CrystalDiskMark CrystalDewWorld.CrystalDiskMark 8.0.2 8.0.4 winget
すべてのパッケージをアップデートするには、winget upgrade --all
を実行します。アップデートするアプリが多い場合は、何度もUAC昇格が必要になると思いますので、管理者権限でWindows Terminalを起動しておくと便利です。
PS C:\> winget upgrade --all
見つかりました CrystalDiskInfo [CrystalDewWorld.CrystalDiskInfo]
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://osdn.net/frs/redir.php?m=auto&f=crystaldiskinfo%2F75685%2FCrystalDiskInfo8_12_5.exe
██████████████████████████████ 4.50 MB / 4.50 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
見つかりました CrystalDiskMark [CrystalDewWorld.CrystalDiskMark]
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://osdn.net/frs/redir.php?m=auto&f=crystaldiskmark%2F75540%2FCrystalDiskMark8_0_4.exe
██████████████████████████████ 3.87 MB / 3.87 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
インストール済みソフトの一覧を取得する
パソコンにインストールしているソフトの一覧を取得する方法を紹介します。winget list
を使用して画面上にリストアップする方法と、winget export
を使用してJSON形式で出力する方法があります。
winget list:インストール済みソフトをリストアップする
winget list
を実行すると、パソコンにインストール済みのソフトをリストアップしてくれます。winget以外でインストールしたソフトもリストアップされるようです。今後のバージョンアップでMicrosoftストアなどのリポジトリも扱えるようになるらしいので、それを想定した動作なのでしょう。
PS C:\> winget list
名前 ID バージョン
---------------------------------------------------------------------------------------------
インテル® グラフィックス・コマンド・… AppUp.IntelGraphicsExperience_8j3eq9… 1.100.3370.0
Ubuntu CanonicalGroupLimited.UbuntuonWindow… 2004.2021.222.0
CrystalDiskMark CrystalDewWorld.CrystalDiskMark 8.0.4
Docker Desktop Docker.DockerDesktop 3.5.2
ELAN Touchpad 12.11.3.2_X64_Beta Elantech 12.11.3.2
Microsoft Edge Microsoft.Edge 92.0.902.55
Microsoft Edge Update Microsoft Edge Update 1.3.145.49
(以下省略)
また、このコマンドもパッケージ名を指定することができます。ここは完全一致ではなく、名前、ID、monikerのいずれかに含まれる場合にリストアップしてくれるようです。
PS C:\> winget list crystal
名前 ID バージョン
----------------------------------------------------------
CrystalDiskInfo CrystalDewWorld.CrystalDiskInfo 8.12.4
CrystalDiskMark CrystalDewWorld.CrystalDiskMark 8.0.4
winget export:インストール済みソフト一覧をJSON形式で出力
winget export
コマンドで、インストール済みのソフトの情報をJSON形式で出力することができます。このコマンドは、winget export 出力ファイル名
の形で実行します。
「どのソースからも利用できません」という警告がたくさん出てきてしまいます。いずれもwingetのリポジトリにないソフトです。恐らく、将来的にMicrosoftストアのアプリが扱えるようになったら改善されるものと思います。
PS C:\> winget export C:\Users\username\Desktop\winget-export.json
インストールされているパッケージのバージョンは、どのソースからも利用できません: インテル® グラフィックス・コマンド・センター
インストールされているパッケージのバージョンは、どのソースからも利用できません: Ubuntu
インストールされているパッケージのバージョンは、どのソースからも利用できません: ELAN Touchpad 12.11.3.2_X64_Beta
インストールされているパッケージのバージョンは、どのソースからも利用できません: Microsoft Edge Update
CrystalDiskInfo、CrystalDiskMark、Docker Desktop、VLCプレイヤー、Mery(テキストエディタ)をインストールした状態でwinget exportしたら、次のようなJSONファイルが出力されました。
Edge、Windows Terminal、OneDriveは明示的にはインストールしておらず、最初から入っていたものです。恐らくwinget list
でリストアップされたもののうち、wingetリポジトリからインストール可能なものがリストアップされていると思われます。
{
"$schema" : "https://aka.ms/winget-packages.schema.2.0.json",
"CreationDate" : "2021-07-26T01:57:31.520-00:00",
"Sources" :
[
{
"Packages" :
[
{
"PackageIdentifier" : "CrystalDewWorld.CrystalDiskInfo"
},
{
"PackageIdentifier" : "CrystalDewWorld.CrystalDiskMark"
},
{
"PackageIdentifier" : "Docker.DockerDesktop"
},
{
"PackageIdentifier" : "Microsoft.Edge"
},
{
"PackageIdentifier" : "Microsoft.WindowsTerminal"
},
{
"PackageIdentifier" : "Microsoft.OneDrive"
},
{
"PackageIdentifier" : "VideoLAN.VLC"
},
{
"PackageIdentifier" : "Kuro.Mery"
}
],
"SourceDetails" :
{
"Argument" : "https://winget.azureedge.net/cache",
"Identifier" : "Microsoft.Winget.Source_8wekyb3d8bbwe",
"Name" : "winget",
"Type" : "Microsoft.PreIndexed.Package"
}
}
],
"WinGetVersion" : "1.0.11591"
}
wingetでソフトを一括インストールする
パソコンを何台も初期設定する場合など、まっさらなパソコンに対して一括でソフトをインストールしたいことがあるかもしれません。そのような状況を想定して、wingetでソフトを一括インストールする方法を紹介します。
インストールするソフトによっては、インストール時にUAC昇格が必要です。一般権限で一括インストールを行うと、インストールするソフトの分、UACメッセージが出てきてしまいますので、管理者権限でWindows Terminalなどを起動することをおすすめします。
ちなみに、Linuxのapt install
やdnf install
では、インストールしたいパッケージ名を列記すれば、1コマンドで複数のアプリをインストールできますが、winget install
コマンドは1回あたり一つずつしかインストールできません。
winget import:JSONファイルでインストール
winget import
を使用すると、winget export
で出力したJSONファイルを元に、各アプリをインストールできます。こちらは、winget import ファイル名
のようにJSONファイルを指定して実行します。試しに、前項の状態からCrystalDiskInfoとMeryをアンインストールし、CrystalDiskInfoの旧バージョンを入れた状態で、前項のJSONファイルをインポートしてみました。
すると下記のように、JSONファイルにあるものを順番に探して、パソコンになければ新規インストール、パソコンに旧バージョンがあるならバージョンアップ(upgrade)を行ってくれます。
PS C:\> winget import C:\Users\username\Desktop\winget-export.json
(中略)
適用可能な更新は見つかりませんでした。
パッケージは既にインストールされています: VideoLAN.VLC
見つかりました [CrystalDewWorld.CrystalDiskInfo]
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://osdn.net/frs/redir.php?m=auto&f=crystaldiskinfo%2F75539%2FCrystalDiskInfo8_12_4.exe
██████████████████████████████ 4.50 MB / 4.50 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
見つかりました [CrystalDewWorld.CrystalDiskMark]
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://osdn.net/frs/redir.php?m=auto&f=crystaldiskmark%2F75540%2FCrystalDiskMark8_0_4.exe
██████████████████████████████ 3.87 MB / 3.87 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
見つかりました [Kuro.Mery]
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://dforest.watch.impress.co.jp/library/m/mery/11901/MerySetup-x64-2.6.7.exe
██████████████████████████████ 2.68 MB / 2.68 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
スクリプト等でソフトを一括インストール
wingetはコマンドラインで動くアプリですので、スクリプト等からの実行も行いやすいです。例えば、次のようなPowerShellスクリプトを作成して実行すれば、一括でソフトをインストールすることができます。
こちらの13行目~16行目を、インストールしたいアプリ名に変更すれば、そのまま使えると思います。
<#
wingetでソフトを一括インストールするPowerShellスクリプト例 winget-install.ps1
wingetを使おう (中編:wingetでソフトを管理する)
$appListに挙げられているソフトを順にインストールしていきます。
Copyright (c) 2021 astherier
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
#>
$appList=@(
"CrystalDiskInfo",
"CrystalDiskMark",
"VLC",
"Kuro.Mery"
)
function exec_winget($app){
echo "インストール開始:$app"
& winget install $app
if($LastExitCode -eq 0){
$result="インストール成功:$app"
}else{
$result="インストール失敗:$app"
}
echo $result
$script:exec_result+=$result
}
$exec_result=@()
foreach($app in $appList){
exec_winget $app
}
echo "インストールがすべて終了しました。"
echo $exec_result
中編はここまでです。
後編では、wingetそのものの設定方法やその他情報(PowerShellのTabキー補完)を紹介します。
ちなみに、前編では、wingetそのもののインストール方法と、wingetを用いたアプリのインストール方法を紹介しています。まだご覧になっていない方は、こちらもどうぞ。
ディスカッション
コメント一覧
まだ、コメントがありません