NIX 互換環境に見られるようなパッケージマネージャが Windows 10 で遂に公式にサポートされるようになった。既存のサードパーティ製パッケージマネージャを内包して抽象化するエコシステムが取られている。
備忘録としてメモ。
概要
上図のように、既存の NuGet や Chocolatey を 1 つの Provider として位置付け、PowerShell 上から共通インターフェースでそれらを扱える仕組みを提供している。
図の転載元記事にあるように、このエコシステムは PowerShellGet と OneGet と呼ばれる。
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)
プロバイダの導入
次のコマンドレットを実行して NuGetProvider と ChocolateyProvider をインストールして、この 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 パッケージ名