Microsoft は、システムにインストールされているものを追加、削除、更新するためのコマンド ライン ツールである Windows Package Manager 1.0 (winget として知られています) をリリースしました。
Windows パッケージ マネージャーには、ユーザーがインストールされているものを調べたり、アプリケーションを追加、削除、更新したりするための引数がいくつかあります。
Apt や Yum などのパッケージ マネージャーに慣れている Linux ユーザーは、(すべてがうまくいけば) アプリケーションだけでなく開発者ツールやライブラリも簡単なコマンドで管理でき、再起動はほとんど必要ありませんが、Windows でも同様のエクスペリエンスを実現したいと考えるでしょう。
Chocolatey のようなサードパーティのオプションは以前から存在していましたが、昨年の Build で Microsoft は「ほぼすべての開発者が Windows のネイティブ パッケージ マネージャーを望んでいた」として Winget を発表しました。
Microsoft は、他のパッケージ マネージャーが存在するにもかかわらず、独自の「信頼できるアプリケーション」のリポジトリを管理し、それを Windows と統合するためには、独自のファーストパーティ パッケージ マネージャーが必要であると述べました。
AppGet スパット
プロジェクトのスタートは、別の既存ソリューションであるAppGetの開発者が、Microsoftが当初は仕事のオファーのように見せかけた提案を持ちかけてきたものの、その後、彼の提案をすべて聞いた後、多くの点で同じアイデアを使った独自のソリューションを考案したと述べたことで、芳しくありませんでした。同社は遅ればせながら、この問題を認めました。
1年を経て、Winget 1.0がリリースされました。新しいパッケージの検索、インストール済みパッケージの一覧表示、アップグレードや削除などの機能が追加されました。
ユーザーは、Windows ストアから App Installer と呼ばれるアプリケーションをインストールすることで WinGet を入手できます (このプロセスには初期的な問題がいくつかあります)。
シニアプログラムマネージャーのデミトリウス・ネロン氏によると、Microsoftコミュニティリポジトリには現在1,400以上のパッケージが登録されているとのことです。また、彼は、新しいパッケージをリポジトリに送信するために必要なマニフェストを生成するためのツール「Windows Package Manager Manifest Creator」をプレビュー版として導入しました。
Winget の優れた機能は、Windows ストア経由でインストールされた既存のアプリケーションや、コントロール パネルのプログラムの追加と削除に表示される既存のアプリケーションを管理できることです。
開発者は、例えばwinget list javaコマンドを使って、自分が保有しているJavaのバージョン数を確認できます。ただし、このアプリケーションはまだWindowsストアを完全にサポートしていないため、検索してもWindowsストアで提供されているすべてのバージョンが見つかるわけではなく(これはおそらく良いことですが)、一部のバージョンしか見つかりません。そのため、Winget経由でソフトウェアを購入するための機能は今のところありません。
Regがスピン
Wingetは便利ですが、少し調べてみるとすぐに問題が出てきます。Wingetを使ってLibreOfficeのインストール状況を一覧してみたところ、古いバージョンがインストールされていることが分かりました。アップグレードを実行すると新しいインストーラーがダウンロードされ、インストーラーハッシュが検証されました(これは正常ですが)。しかし、「インストーラーは終了コード1603で失敗しました」というメッセージが表示されました。ログが生成されました(これも正常ですが)。ログにはインストーラーが昇格を必要としていることが示されていました。これはプロンプトを介して行われるはずですが、何らかの理由で今回はうまくいきませんでした。
解決策は Winget を管理者として実行することですが、ドキュメントには次のように書かれています。「コマンド プロンプトを管理者として実行するときは常に注意し、信頼できるアプリケーションのみをインストールしてください。」確かにそうです。
Wingetはパッケージの更新バージョンが利用可能になったときに表示しますが、アップグレードは簡単ではない場合があります
残念ながら、LibreOffice のインストールは再び失敗し、今回はエラー 3010 が発生しました。今回はそれほどひどい状況ではありませんでした。インストールは正常に完了しましたが、ログには次のように記録されていました: 「再起動が必要です。製品のインストールまたは更新では、すべての変更を有効にするために再起動が必要です。再起動は後で延期されました。」
その理由は、Winget が msiexec (インストーラー パッケージのコマンド ライン ツール) を引数 /qn /norestart で実行するためです。これは、「ユーザー インターフェイスなしでインストールし、再起動を強制しない」ことを意味します。
ユーザーインターフェースなしでインストールするのは便利に思えるかもしれませんが、LibreOfficeのような複雑なインストールで通常提供される重要なオプションはどうでしょうか?再起動も問題です。再起動しないのは良いのですが、アプリケーションが完全にインストールされていないとイライラします。
難問
こうした問題は、Windowsが設計上およびレガシーな理由から、Linuxほどパッケージ管理に適していないために発生します。Microsoftは開発者をWindowsストアやMSIXパッケージへと誘導するために尽力してきましたが、このガイドラインに従っていない人気アプリケーションが数多く存在します。
「Windowsには適切なパッケージがなく、無関係な管理されていないインストール方法がいくつもあるだけです。MSIXは近いかもしれませんが、多くの問題を抱えているため、選択肢にはなりません。これについては後ほど詳しく説明します。Windowsにはソフトウェアを一元管理するリポジトリがなく、ストアは多くの点で大惨事です」と、あるGitHubユーザーは述べた。
極端な意見ではありますが、ある程度の真実はあります。Winget とのスムーズな連携が企業の求めるものになれば、Winget は解決策の一部となるかもしれません。しかし、このコメントの元となった議論は、このジレンマをよく表しています。問題は、トランザクション処理ができず、予測不可能な動作をするレガシーインストーラーを備えたアプリケーションのサポートを中止すべきかどうかでした。
そのようなサポートを放棄すれば、Winget の有用性は低下するでしょう。Windows は、無秩序な過去から決して逃れられないかのように、ひたすら動き続けるでしょう。®