Windowsアプリケーション向けの新しいパッケージマネージャー winget がプレビューリリースされました

2020.05.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。
現在オンラインで開催中のMicrosoft Build 2020でWindowsアプリケーション向けの新しいパッケージマネージャであるwingetがプレビューリリースされました。

Windows Command Line Blogによる詳細なアナウンスは以下。

これまでChocolateyScoopといった有志によって提供されていたパッケージマネージャーがMicrosoft公式に提供される形になります。

試してみた

詳細に触れるまえに、まずは試してみます。
このツールは Windows 10 Windows 10 Fall Creators Update (1709)以降のOSで利用可能で、

  • (推奨) Windows 10 Insider Previewに参加しMicrosoft Storeからインストール
  • GitHubで公開されているAppxバンドルファイルを手動でインストール
  • GitHubで公開されているソースコードを自分でビルドしローカルマシンにインストール

する方法が提供されています。
Insider Previewに参加するのが推奨されていますが、今回は手っ取り早く試したいので二番目のAppxバンドルを手動でインストールしてみます。
(この場合アプリケーションの更新は自分で行う必要があります)

まずはGitHubのリリースページにアクセスし、最新バージョンの.appxbundleパッケージをダウンロードします。

ダウンロードしたバンドルファイルをダブルクリックで実行し、画面の指示に従いインストールします。

これでOKです。
PowerShellコンソールなどを起動しwinget --versionを実行してバージョン番号が表示されればOKです。

アプリケーションの検索

winget showまたはwinget searchでインストール可能なアプリケーションを検索できます。

後述しますがアプリケーションの一覧はGitHubから確認することも可能です。

アプリケーションのインストール

今回は最初に表示された7Zipをインストールしてみます。
winget install [アプリケーション名]でアプリケーションをインストールできます。

すると7Zipのサイトからインストーラーをダウンロードし、

インストーラーが起動されサイレントインストールが開始されます。
(管理者権限が必要な場合は昇格ダイアログが表示されます)

インストールが完了すると終了メッセージが表示されます。

アプリケーション一覧に無事登録されています。

こんな感じです。非常に便利ですね。

なお、現時点では残念ながらインストール済みアプリケーションの一覧表示、アプリケーションの一括更新、アプリケーションのアンインストールといった機能は実装されていません。

先程バージョン番号を表示した様に現在はまだVer.0.1の本当に最初のリリースです。
上記の機能はこれからの実装となります。

仕組みについて

wingetはGitHubでオープンソースで開発されています。
winget.exeのクライアントソフトウェア用とアプリケーションパッケージ用の2つのリポジトリで管理されています。

winget.exeはC++製のMicrosoft Storeアプリケーションとして作成されています。
アプリケーションパッケージはYAMLで所定の記述をしGitHubに公開し、winget.exeはそのYAMLの内容に基づいてインストールを行う形となっています。
macOSでいうところのHomebrewやHomebrew Caskと似た仕組みですね。

ちなみに先程インストールした7ZipのYAML定義はこんな感じです。

また、インストール可能なアプリケーションの形式は現在のところ、

  • Inno Setupインストーラー
  • WiXインストーラー
  • MSIインストーラー
  • Nullsoft Scriptable Install System (NSIS)インストーラー
  • App Package (.appx)
  • EXE形式のインストーラー
  • (これから実装予定) Zipファイル

となっている様です。

ロードマップ

wingetはこちらでVer.1.0までのロードマップが公開されています。

詳細はリンク先をご覧いただければと思いますが、ざっくり感として、月一回のリリースでバージョン番号を0.1ずつ更新し、Ver.1.0の公開は2021年の5月を目標としています。1年かけて正式リリースさせたい様です。

実装予定の機能も記載されていますので併せてご覧いただくと良いでしょう。

余談 : PackageManagement (OneGet) の終焉

ここまでがwingetの説明となりますが、Windowsに慣れ親しんでいる方からすると

PackageManagementとの関連はどうなっているの?

という疑問がわくと思います。

Microsoftはこれまで、PowerShellモジュール、Nugetパッケージ、MSIインストーラーなどのソフトウェアモジュールを統合的に管理するPackageManagement (旧称 OneGet)をPowerShellモジュールベースで提供していました。

今回のwingetはPackageManagementとは一切関連しない独立したアプリケーションとなっています。
また、PackageManagementを基盤として使っていたPowerShellモジュール管理のためのPowerShellGetも次のメジャーバージョンアップとなるPowerShellGet 3.0ではPackageManagementへの依存を撤廃することを表明しています。

残念ながらPackageManagementはその思想とは裏腹にPowerShellGetくらいでしか使われてこなかった現状があり、そのPowerShellGet自体もPackageManagementへの依存を廃止し、今回完全に独立したwingetが登場したことを踏まえるとPackageManagementは完全に終息に向かうと見てよいでしょう。
(Microsoftからの正式なアナウンスがあるわけではないのでご注意ください)

一応こんなIssueも上がってはいますので今後何らかの手当てが入る可能性も無くはないと補記しておきます。

最後に

以上となります。
軽く使ってみただけですが非常に便利だと感じました。

これまでもChocolateyScoopといったパッケージマネージャーはありましたが公式に提供されるのはやっぱり嬉しいです。
wingetの機能やインストール可能なアプリケーションもこれからどんどん増えていくでしょうし、皆さん自身がコミュニティーに貢献できる機会も非常に多いと思いますので、是非試していただいてフィードバックを上げていただければと思います。