このページの本文へ

前へ 1 2 次へ

Windows Info 第240回

Windows用アプリのインストールがコマンドラインで可能なパッケージマネージャー「winget」はどうなった?

2020年09月06日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

今インストールされているプログラムのうち
wingetで扱えるものはどれ?

 リポジトリの概要がわかれば、次に知りたくなるのは、今使っているアプリのうち、wingetでインストールできるものは何だ、ということだろう。使っているアプリがwingetで扱えるなら、バッチファイルなどを作れば、新規マシンへの必要アプリケーションのインストールが一発でできるようになる。中には、必要なアプリをインストールするwingetコマンドを記述しておけばよい。

 まずは、インストールされているデスクトップアプリだが、以前の記事で扱った(「WindowsでのWin32アプリケーションのインストール状態を調べる方法」)。

 簡単に言えば、powershellからレジストリを調べることで、MSI経由でインストールされているデスクトップアプリケーションを列挙することが可能だ。具体的には、以下のリストのようなコマンドを使う。これでMSI経由でインストールしたアプリケーションのリストが得られるので、Wingetのsearch機能で該当のアプリを検索してみる。まずは、以下のコマンドを使ってインストールされているアプリのリストを得て変数$listに入れておく。

$list=(Get-ChildItem -Path ('HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', 'HKLM:SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall','HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall') | ForEach-Object { Get-ItemProperty $_.PsPath});

この$listを使ってwingetで検索する。

$list | Where-Object { $_.displayname -ne $null } | foreach { $x=(winget.exe search $_.displayname); if($x.count -gt 2){ Write-Host $_.displayname }}

レジストリから登録されているwin32アプリケーション(MSIでインストールしたもの)を探し、これでwingetリポジトリを検索させるとwingetでインストールできそうなものが見つかる

 wingetの検索はダウンロードしたリポジトリデータをローカルでしているため、そんなに遅くはないが、それでもインストールしてあるアプリ1つ1つがあるかどうかを調べるので少し時間がかかる(もちろんインストールしてあるアプリケーションの数に依存)。

 ただし、これはwingetでの単純な検索なので、プログラム名が部分一致している可能性もある。逆にレジストリへの登録状況などによっては、winget searchがうまくいかない可能性もある。たとえば、VS codeは、レジストリへの設定が「Microsoft Visual Studio Code (User)」となっているため、このままではwinget searchで検索ができない。

 ZIPファイルなどから直接ファイルをコピーしたようなアプリの場合、フォルダー名などから検索を行わせることもできる。筆者は、こうしたインストーラーを使わないプログラムは、1つのフォルダーの下にまとめている。こうしたフォルダーが"C:\app"だとしたら

Get-ChildItem -Path "C:\app" | foreach { $x=((winget.exe search $_.name )| select-object -skip 3); if($x.count -gt 0){ Write-Host "$_"; foreach($i in $x) { Write-Host "`t$i" }}}

とすれば、フォルダー名などから、wingetリポジトリの検索ができる。実際に試してみたところ、いくつかWingetで扱えるアプリを見つけることができた。これで、自分が今使っているアプリのうち、wingetで利用可能なものが探せ、その結果を利用して、全部をインストールするバッチファイルなどを作れば、新しいPCの環境整備が簡単にできるようになる。

Wingetの今後はどうなる?

 Wingetの今後については、一応のロードマップが出ており、改良予定の部分などがわかる。現時点での完成目標は、2021年の5月。ただし、あくまでも予定である。なので、一般ユーザーはしばらくは無理に使う必要はなく、今年後半から来年ぐらいまでは様子見でいいだろう。

 今回、インストールされたアプリケーションは、powershell側で調べたが、将来的には、wingetのコマンドとしてインストールされているアプリのリストや、アプリのアップデートの有無を調べることができるようになるようだ。

 また、現在配布中のv0.1.42241 Previewでは、検索やリポジトリのダウンロード時に表示されるテキストアニメーションの色指定などが行える。設定は、例によってJSONファイルで、

winget settings

で可能で、JSONエディターがインストールされていれば、settings.jsonファイルが開く。

wingetはJSONファイルを編集することで設定する

 設定の詳細は、以下のページにある。

●winget-cli/Settings.md
 https://github.com/microsoft/winget-cli/blob/master/doc/Settings.md

 wingetは、v0.1でまだ、道半ばというよりは、ようやく動き出した段階、とはいえ、Windowsのデスクトップアプリケーションで“公式”のリポジトリが使えるようになった点は大きい。Windows用のパッケージマネージャーはこれまでに存在しなかったわけではないのだが、リポジトリの管理に関しては難があった。情報を正確に維持するには、どうしてもコストが発生し、そうそう簡単にはできないからだ。今後に期待したい。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン