OneGetでは、パッケージの取得先のことをパッケージソース (PackageSource)と呼びます。OneGetにはデフォルトで2つのパッケージソース(PackageSource) が入っています。*1
Get-PackageSource
Name ProviderName IsTrusted IsRegistered IsValidated Location ---- ------------ --------- ------------ ----------- -------- nuget.org NuGet False True False https://www.nuget.org/api/v2/ PSGallery PSModule False True False https://www.powershellgallery...
必要に応じてChocolateyなども登録できるので、自分のパッケージをnuget push
やnuget push
してChocolateyなどに登録すれば、あっという間にOneGetで利用できるようになります。
しかしChocolateyに社内で利用するパッケージを公開すると、同時に世界に公開されてしまいます。そう、プライベートなパッケージソースは自分達で構築しないとなのです。
そこで今回は「自社だけに配信するためのプライベートなパッケージソースを立てて、利用する方法」を説明します。
概要
今回は、Creative Cloud デスクトップ
アプリをプライベートパッケージソースから配信するようにしてみましょう。いたって簡単です。
プライベートなパッケージソースを作るには、プリべートNuGet Serverを立てるだけです。OneGetは、NuGet Feedを解釈できるので、NuGet Serverでいいのですね。
これだけでピンと来る人は、通常のNuGet Server構築とほぼ変わりません。以降適当に流し読みどうぞ。
GitHub
この記事の内容をあげておいたので、ご自分で試すときにでもどうぞ。
NuGetServer の構築
Visual Studui 2015で作成したNuGet ServerをWindows 10 + IIS 10から配信してみましょう。もちろんAzure Web Appsでも、Windows Server 2012 R2上のIIS 8でも問題なく実行できます。
ASP.NET 空プロジェクトの作成
早速New Projectから、ASP.NET Web Application
を作成します。名前は適当にMyOneGetServerとしました。
NuGet.Server の導入
Package Manager ConsoleからNuGet.Server
を入れます。
Install-Package NuGet.Server
参照がごそっと入って
プロジェクト構成がこのようになります。
あとはプロジェクトのプロパティ -> Webにいって、IISにデプロイするようにしておいて
デバッグ実行してみると?
構築終わりです。簡単。Azureでもどこでもデプロイしたらいいでしょう。*2
もしデバッグ実行やIISにホストしたポートがファイアウォールで空いてない場合は開けておきましょう。
NuGet.Server の設定編集
さて、実際にパッケージをNuGet Serverからフィード(配信) するには、.nupkg を所定のパスに置く必要があります。NuGet.Serverではこういった設定はWeb.Configから行えます。
今回は2点設定しておきましょう。
- apikey
- nupkgの配置パス
apikey
API Keyを必要とするのは、pushとdeleteの時です。PowerShellやLinqPadで適当にGuidを生成しておけばいいでしょう。
この値をweb.configのapikeyにいれれば完了です。
nupkg の配置パス
apikey同様に、web.configのpackagesPathにnupkgを設置したいパスを指定します。指定しなければ、~/Packages
になります。
今回は、C:\Packages
に設置することにしましょう。
これで、再びデバッグ実行すると、C:\Packages
がフィード元になっていることが表示されます。
nupkg の作成
NuGetライブラリをリリースしている人は、まぁふつーに作ってください。nuget packしてnuget pushすればokです。
ただし、Chocolateyと同様にソフトウェアインストールを扱うのでちょっといじります。
NuGet のダウンロード
nugetコマンドを扱うので、手元にない人はNuGet.exeをダウンロードしておいてください。
今回は、適当にC:\Packages\nuspec
に置いておきます。
パッケージファイルの作成テンプレート
私が実際に使っているnupkg作成テンプレートを公開します。これはAdobe CCをChocolateyプロバイダーとしてOneGetコマンドからインストールするテンプレートです。
面倒なのは、Install-ChocolateyPackageなどの配置ですが、テンプレート通りにやればいいでしょう。
アンインストールを今回用意していませんが、Uninstall-ChocolateyPackageをテンプレートで併せて作成すればいけます。
さっそくテンプレートを実行してnupkgを作成します。
今回は、こんな感じでNuGetのフィードパスC:\Packagesにnupkgを配置しました。
push してみる
nupkgを作成したら、パッケージをサーバーに配置します。今回のようにweb.configに指定したパッケージ参照元であるC:\Packages
に直接ファイルコピーでもいいです。
が、リモート先にサーバーを立てた後そんなことするのはつらいのでnuget push
で配置します。
push方法は、先ほどからデバッグ実行してあるNugetサーバーのTopに載っています。
このコマンドの通りに実行します。
配置できていますね。
プライベートパッケージソースを OneGetから利用する
NuGetサーバーを立て終わりました。あとはOneGetから利用するだけです。
早速、PowerShell 5.0をおもむろに立ち上げて見てみましょう。
プライベートパッケージソースOneGet に登録する
最後に利用したい人のOneGetに、作成したMyOneGetを登録します。
さて、作成したNueGetサーバーをOneGetのパッケージソースとして登録する際には、フィード元のURLが必要です。これは、NuGetサーバーにアクセスしたときのTop画面に表示されています。
パッケージソースの登録もコマンド1つです。
もしGet-PackageSource
でChocolateyがない人は先に登録してください。
Name ProviderName IsTrusted IsRegistered IsValidated Location ---- ------------ --------- ------------ ----------- -------- chocolatey PSModule True True False https://chocolatey.org/api/v2/
Chocoalateyが登録されていれば、MyOneGet登録できましたね。
Name ProviderName IsTrusted IsRegistered IsValidated Location ---- ------------ --------- ------------ ----------- -------- MyOneGet Chocolatey True True True https://localhost:33478/nuget
パッケージの検索
パッケージを検索するには、 Find-Package
です。このときにFind-Package
からMyOneGetに絞ることで結果を限定できます。
作成したnupkgが表示されますね。
Name Version Source Summary ---- ------- ------ ------- Adobe.CreativeCloud 3.2.0.129 https://localh... Adobe Creative Cloud installation through OneGet
もちろん、nupkgをnuget deleteや直接消せば見えなくなります。
nupkgを戻せば元通りですね。
パッケージのインストール
パッケージをインストールするには、VSを使ってる人にはおなじみのInstall-Package
です。Install-Package
からInstall-Package
パイプラインでつなぐこともできるので好きな方法で。
パッケージの一覧をGet-Package
で確認するとありますね。というか、これインストール最中ですでにでるという...。
ふつーにインストールされます。
まとめ
いかがでしょうか。パッケージのメンテナンスを考えると、Chocolateyにあるものをわざわざ手元に持ってくるのもおかしな話です。
しかし、利用シーンはいくつもあるでしょう。
- 企業内のルールで閲覧先が限定されている場合などでもOneGetから取得するようにしたり
- 利用可能なソフトウェアを表示したり
- ソフトウェアのインストールを自動化
などなど。もってこいと言えます。
NuGet.Serverもご覧のとおり簡単に作成できるので、開発経験がなくても気おくれすることもありません。 利用規約内ならVS Communityでnugetを使って作成できますからね!
https://www.visualstudio.com/ja-jp/products/visual-studio-community-vs.aspx
まだまだOneGetは物足りない部分も多いですが、活用できるシーンで使っていくといいと思います。