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


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

備忘録としてメモ。

# 概要

![](https://qiita-image-store.s3.amazonaws.com/0/5051/2951e0f2-e85f-f66c-b90a-ade1e513b0b1.png)

- [Package Management for PowerShell Modules with PowerShellGet - The Microsoft MVP Award Program Blog - Site Home - MSDN Blogs](http://blogs.msdn.com/b/mvpawardprogram/archive/2014/10/06/package-management-for-powershell-modules-with-powershellget.aspx)

上図のように、既存の [NuGet](https://www.nuget.org/) や [Chocolatey](https://chocolatey.org/) を 1 つの Provider として位置付け、PowerShell 上から共通インターフェースでそれらを扱える仕組みを提供している。

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

2015 年 8 月末に PowerShell を始めとする Microsoft 公式のフレームワーク **Windows Management Framework (WMF)** の WMF 5.0 Production Preview として、また Windows の機能として[リリースされた](http://blogs.msdn.com/b/powershell/archive/2015/08/31/windows-management-framework-5-0-production-preview-is-now-available.aspx)。Windows 10 にはプリインストールされている。

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

- [Download Windows Management Framework 5.0 from Official Microsoft Download Center](http://go.microsoft.com/fwlink/?LinkId=398175)


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

- [psget/psget](https://github.com/psget/psget)

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

- [PowerShellGet Module](https://technet.microsoft.com/en-us/library/dn835097.aspx)

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

- [OneGet/oneget](https://github.com/oneget/oneget)

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

- [PackageManagement Module](https://technet.microsoft.com/en-us/library/dn890951.aspx)

# PowerShellGet

## リファレンス

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

```powershell
Get-Command -Module PowerShellGet
# PowerShellGet モジュールが持つコマンドレット一覧を表示

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

- [PowerShellGet Cmdlets](https://technet.microsoft.com/en-us/library/dn807169.aspx)


# OneGet (Package Management)

## プロバイダの導入

次のコマンドレットを実行して [NuGetProvider](https://github.com/OneGet/NuGetProvider) と [ChocolateyProvider](https://github.com/OneGet/ChocolateyProvider) をインストールして、この 2 つのパッケージマネージャを PackageManagement モジュールから利用可能にする:

```powershell
Get-PackageProvider -Name NuGet
# NuGet を Provider に追加

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

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

```powershell
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` コマンド的なのは次の通り:

```powershell
Get-Command -Module PackageManagement
# PackageManagement モジュールが持つコマンドレット一覧を表示

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

- [Package Management Cmdlets](https://technet.microsoft.com/en-us/library/mt422622.aspx)
- [Microsoft.PowerShell.OneGet.CmdLets](https://technet.microsoft.com/en-us/library/dn890706.aspx)

## コマンドレット一覧

### Find-Package

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

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

- [Find-Package](https://technet.microsoft.com/en-us/library/dn890709.aspx)

### Get-Package

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

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

- [Get-Package](https://technet.microsoft.com/en-us/library/dn890704.aspx)


### Get-PackageProvider

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

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

- [Get-PackageProvider](https://technet.microsoft.com/en-us/library/dn890703.aspx)

### Get-PackageSource

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

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

- [Get-PackageSource](https://technet.microsoft.com/en-us/library/dn890705.aspx)

### Install-Package

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

```
Install-Package -Name パッケージ名
```

- [Install-Package](https://technet.microsoft.com/en-us/library/dn890711.aspx)

### Register-PackageSource

- [Register-PackageSource](https://technet.microsoft.com/en-us/library/dn890701.aspx)

### Save-Package

- [Save-Package](https://technet.microsoft.com/en-us/library/dn890708.aspx)

### Set-PackageSource

- [Set-PackageSource](https://technet.microsoft.com/en-us/library/dn890710.aspx)

### Uninstall-Package

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

```
Uninstall-Package -Name パッケージ名
```

- [Uninstall-Package](https://technet.microsoft.com/en-us/library/dn890702.aspx)

### Unregister-PackageSource

- [Unregister-PackageSource](https://technet.microsoft.com/en-us/library/dn890707.aspx)


# 謝辞

- [Windows10のパッケージ管理を試した（仮） - Qiita](http://qiita.com/Zero_Kohaku/items/302055fdd40595ea7199)
- [PackageManagement (aka. OneGet) の利用時の簡単な注意 - tech.guitarrapc.cóm](http://tech.guitarrapc.com/entry/2015/09/03/045447)