鷲ノ巣

C# とか PowerShell とか。当ブログの記事は(特に公開直後は)頻繁に改定される場合があることをご了承ください。

パッケージシステムについて考える/前編

発端は PowerShellGet

Windows Management Framework 5.0 Preview May 2014というのが出ました。
Windows Management Framework、略して WMF というのは、PowerShell を中核としつつ、WMI やら WinRM やら何やらをひとまとめにした、コンピューターを管理するためのツール群のこと。
まぁ、大雑把に言うと、PowerShell の新しいバージョンが出たと思っておいて良いです。

ちなみに、インストールして試してみたいという方は、OS の表示言語を一時的に英語にする必要があります。
インストールが終わったら日本語に戻しても大丈夫です。
まだプレビュー版ですので、壊れて困るマシンには入れないように。

さて、WMF 5.0 の、この一つ前のバージョンから、OneGet というパッケージマネージャーシステムが搭載されました。
そして、今回出た最新バージョンから、PowerShellGet という、OneGet とは別のパッケージマネージャーが搭載されています。

というわけで、にわかに増えてきたパッケージマネージャーシステムについて、ちょっと考えてみたいと思います。

どんなのがあるの?

WebPI (Web Platform Installer)

Download the Microsoft Web Platform

2009 年に登場した、本記事で挙げるものの中では最古のもの。現在の最新バージョンは 5.0。
Web サーバーの環境を構築したり、Web アプリケーションを配布したり。
開発ツールの配布にも使用される。

Web Application Gallery と連携している。

NuGet

NuGet Gallery | Home

2010年に登場。最初は NuPack という名前だったが、同名の製品があるので改名した。
OuterCurve Foundation というところが作っている。Microsoft 製ではないということは意外に知られていないかもしれない。
Visual Studio のアドインとして提供され、主に Visual Studio プロジェクトにクラス ライブラリを追加するのに使われる。

Visual Studio Gallery

Products and Extensions for Visual Studio

2010 年に登場。
Visual Studio 2010 以降と連動する。Visual Studio 向けのアドインやテンプレートを配布している。

Chocolatey

Chocolatey Gallery

2013 年に登場。
Windows 向けのアプリケーションの配布に使用される。
Microsoft 製ではない。
サイトのデザインが NuGet にそっくりな点に注目。

OneGet

OneGet/oneget · GitHub

WMF 5.0 Preview 1 から搭載された仕組み。
Chocolatey 同様、アプリケーションの配布に利用される。
というか、現時点では独自のリポジトリを持っておらず、事実上、Chocolatey に対するフロントエンドと化している。
まぁプレビュー版なので仕方がない。正式版ではもうちょっとマシになるでしょう。
詳しく知りたい方はぎたぱそせんせーに聞いてください。

PowerShellGet

PowerShell Resource Gallery | Home

WMF 5.0 Preview 2 から搭載された仕組み。
PowerShell のモジュールを配布するのに利用される。
詳しくはぎたぱそせんせーに以下略。

KVM/KPM

aspnet/Home · GitHub

ASP.NET の次期版(vNext)で搭載される仕組み。
K Version Manager と K Package Manager の略。
K が何を意味するのかは知らないけれど…。K Runtime Engine (KRE) と併せて考えると、JVM (Java Virtual Machine) / JRE (Java Runtime Environment) に対抗心を燃やしている…のか? JPM (Java Package Manager) という言葉もあるらしい。初めて聞いた。
リポジトリとしては NuGet Gallery や MyGet が使える模様。
詳しくはメイドさんの人に聞いてください。

Windows ストア

Windows 向けアプリ - Microsoft Windows

Windows 8 から採用されたストア。
今後は、Windows Phone のストアと統合されるなど、さらなる発展が期待されます。

パッケージマネージャーとは言えないけど、関連するもの

MSDN Code Recipe

Sample Code - MSDN Examples in C#, VB.NET, C++, JavaScript, F#

開発者向けのサンプルコード置き場。
Visual Studio と連携している。

TechNet Script Center

Powershell, VB Script, SQL and JavaScript - TechNet IT Pro's and Scripting Guys

MSDN Code Recipe の TechNet 版。ITPro 向け。
PowerShell のサンプルコードやモジュールを配布している。

PowerShell ISE Script Browser

Download Script Browser & Script Analyzer 1.2 from Official Microsoft Download Center

PowerShell ISE のアドオン。
TechNet Script Center からコードをダウンロードできる。

NuGet とは

Windows のパッケージマネージャーに関して、NuGet が与えた影響は大きなものでした。

NuGet と一口に言っても、様々な構成要素から成りますが、ここでは「リポジトリ」と「ツール」に大別して考えてみましょう。

リポジトリ

NuGet はソースコードが公開されており、誰でも NuGet 的なリポジトリを立てることができます。
例えば、以下のようなものが挙げられます。既に挙げたものもありますが再掲します。

どれも見た目が似たり寄ったりですね。
さらに、こうしたリポジトリから、ツールがパッケージを探し出したり、パッケージをアップロードしたりするための API も共通です。

こういったリポジトリ上には、様々なソフトウェアやライブラリが、NuGet が規定した NuPkg という形式でアップロードされています。
NuPkg は、内部に特定の構造を持った Zip ファイルです。

ちょっと詳しく言うと、Open Packaging Conventions (OPC) という形式になっています。
OPC は他にも、

  • XPS (XML Paper Specification)
  • Office 2007 以降のファイル形式 (docx/xslx/pptx)
  • Visual Studio Gallery で配布されているアドイン パッケージ (vsix)
  • Windows ストアのアプリ配布パッケージ (appx)
  • 他多数

などで採用されています。

内部に特定のフォルダー構造を持っているとは言っても、Zip ファイルであることに変わりはありませんので、Zip ファイルを扱えるソフトなら展開することができます。

また、NuPkg ファイルの中には NuSpec という形式の XML ファイルが入っていて、これにはそのパッケージのメタデータ(名前、バージョン、作者、依存する他のパッケージなど)が書かれています。

ここまでの要素、つまり

  • サイトの見た目(はどうでもいいですが)
  • NuPkg 形式
  • API

などをまとめて、ここでは「NuGet のリポジトリ形式」と呼びます。

既に多数のサイトで採用されていることからもわかるように、NuGet はその登場以降、この界隈の事実上の標準規格となったように思います。

ツール

NuGet に関連するツールとしては、

などがあります。
これらのうち、前 2 者は、狭義の意味での NuGet、つまり、Visual Studio プロジェクトにクラス ライブラリを配布するというツールとして使われます。
NuGet.exe は、前掲したリポジトリと連携して、もう少し汎用的に使うことができます。
例えば、新しいパッケージを作成したり、リポジトリからパッケージを取得したり、逆にパッケージを登録したりといったことが行えます。
つまり、NuPkg 形式と NuGet リポジトリAPI に則ったものであれば、何に対しても適用可能だということです。

また前後編か

というわけで、パッケージ マネージャーに関する現状をざっくりと俯瞰してみたところで一旦区切りたいと思います。
大丈夫! 後編もすぐ書くから! じゃないとぎたぱそせんせーがおうちに帰れないらしいから!