Windows 10 のパッケージ管理エコシステムについて整理する。

More than 1 year has passed since last update.

NIX 互換環境に見られるようなパッケージマネージャが Windows 10 で遂に公式にサポートされるようになった。既存のサードパーティ製パッケージマネージャを内包して抽象化するエコシステムが取られている。

備忘録としてメモ。


概要

上図のように、既存の NuGetChocolatey を 1 つの Provider として位置付け、PowerShell 上から共通インターフェースでそれらを扱える仕組みを提供している。

図の転載元記事にあるように、このエコシステムは PowerShellGetOneGet と呼ばれる。

2015 年 8 月末に PowerShell を始めとする Microsoft 公式のフレームワーク Windows Management Framework (WMF) の WMF 5.0 Production Preview として、また Windows の機能としてリリースされた。Windows 10 にはプリインストールされている。

Windows 7 以降であれば、WMF 5.0 Production Preview をダウンロードして導入できる:

PowerShell は様々なモジュールから構成されており、サードパーティモジュールを導入する事も可能だ。このモジュール導入を簡略化するシステムが PsGet としてコミュニティで開発されてきた:

WMF 5.0 ではこの PsGet が PowerShellGet モジュールとして採用されている模様。

上記仕組みの上で、パッケージマネージャー機能のモジュールを提供するのが OneGet になる:

そして WMF 5.0 の機能として取り込まれた OneGet は、PowerShell 5.0 のモジュールとして、 PackageManagement に名称が変更された模様。


PowerShellGet


リファレンス

man コマンド的なのは次の通り:

Get-Command -Module PowerShellGet

# PowerShellGet モジュールが持つコマンドレット一覧を表示

Get-Command Find-Module
# `Find-Module` コマンドレットのヘルプを表示


OneGet (Package Management)


プロバイダの導入

次のコマンドレットを実行して NuGetProviderChocolateyProvider をインストールして、この 2 つのパッケージマネージャを PackageManagement モジュールから利用可能にする:

Get-PackageProvider -Name NuGet

# NuGet を Provider に追加

Get-PackageProvider -Name Chocolatey
# Chocolatey を Provider に追加

完了したら適当にパッケージを検索してみる:

Find-Package -Name google-chrome-x64

# Chocolatey に登録されている Google Chrome (64-bit) を検索してみたり、
# https://chocolatey.org/packages/google-chrome-x64

Find-Package -Name Rx-Main
# NuGet に登録されている Reactive Extensions ライブラリを検索してみたり、
# https://www.nuget.org/packages/Rx-Main/


リファレンス

man コマンド的なのは次の通り:

Get-Command -Module PackageManagement

# PackageManagement モジュールが持つコマンドレット一覧を表示

Get-Command Find-Package
# `Find-Package` コマンドレットのヘルプを表示


コマンドレット一覧


Find-Package

利用可能なパッケージの検索と出力。

Find-Package [-Name パッケージ名]


Get-Package

インストール済みのパッケージ一覧を出力。

Get-Package [-Name パッケージ名]


Get-PackageProvider

ローカルの PackageManagement に登録されているパッケージマネージャ一覧を出力。

Get-PackageProvider [-Name マネージャ名]


Get-PackageSource

登録されている全てのパッケージマネージャ一覧を出力。

Get-PackageSource [-Name マネージャ名]


Install-Package

指定パッケージを 1 つインストール。

Install-Package -Name パッケージ名


Register-PackageSource


Save-Package


Set-PackageSource


Uninstall-Package

指定パッケージをアンインストール。

Uninstall-Package -Name パッケージ名


Unregister-PackageSource


謝辞