本サイトからスピンオフした姉妹サイトです。.NET2013年6月19日.NET開発の必需品となった「NuGet」。公開ライブラリのインストールにしか使っていないならもったいない。プライベート・リポジトリ機能を活用して、開発現場の作業効率を高めよう。2012において既定でインストールされるようになったことや、マイクロソフト製の公式なライブラリもNuGetで提供されるようになったことなどからも、今や.NET開発に欠かせないインフラになったといえる。このNuGet、単に「公開されているライブラリを利用するためだけのツール」と捉えていないだろうか。NuGetは公開されているライブラリを利用するだけでなく、パッケージを自分で作成し、公式リポジトリであるNuGetギャラリーにプッシュして公開することも可能である。「パッケージが自作できても、フリーウェアとして公開するつもりはないから......」などと、自分とは無関係だと捉えている開発者も少なくないのではないだろうか。NuGetは「プライベート・リポジトリ」と呼ばれる、いわば「クローズドなNuGetギャラリー」を作成して運用する機能を保有している。このプライベート・リポジトリを活用することで、開発現場における環境の改善と効率化を行うことも可能だ。今回は実際に筆者が運用している例も交えながら、その活用方法をお伝えしたい。NuGetは執筆時点の最新版)である。*なお、今回はプライベート・リポジトリの作成と運用にフォーカスするため、パッケージ自体の作成方法の詳細には触れない点をご容赦いただきたい。Package(英語)」を参照していただきたい。マネージャー編」においてもパッケージ作成方法の例が動画で紹介されている。併せて参照されることをお勧めする。具体的にプライベート・リポジトリを構築する方法を説明しよう。具体的には大きく2通りの手段がある。ファイル・システム・ベースのプライベート・リポジトリまず1つ目はファイル・システム・ベースのプライベート・リポジトリの構築方法だ。実はこれは「リポジトリ構築」などとかしこまって言うほど大げさなものではない。単純に特定のフォルダーにパッケージを配置し、参照するよう設定するだけである。リポジトリとして利用するフォルダーを準備リポジトリとしてパッケージを配置するフォルダーを準備する。“準備する”といっても、特別なことをする必要はない。どこか適当なフォルダーを専用に確保するだけでよい。今回は例として、「C:\MyNuGetRep」としよう。パッケージソース」)、[ソース]欄にリポジトリとして利用するバス(例:「C:\MyNuGetRep」)を入力し、[更新]ボタンを実行する。Studioのオプション設定ダイアログファイル・システム・ベースのプライベート・リポジトリを設定しているところ。2[+]ボタンをクリックして新規パッケージ・ソースを追加。3[名前]欄に任意の名称を設定。4[ソース]欄に今回リポジトリとして利用するフォルダーを指定。5最後に[更新]ボタンをクリックする。以上でリポジトリの設定は完了である。パッケージソース」)を指定すると、プライベート・リポジトリに配置したパッケージが参照・利用できることが確認できる。加されたプライベート・リポジトリにパッケージを配置し、参照した例またパッケージをバージョン・アップした場合の扱いも簡単である。最新のパッケージ(通常、パッケージ名にバージョン番号が付与される)を同じフォルダーに配置するだけで、自動的に適切に扱うため、特に気にする必要はない。以下の画面はその例だ。更新されたパッケージを旧バージョンと同時に配置パッケージ・マネージャー(GUI)からは最新版が表示される。コマンドラインや依存関係により旧バージョンが指定された場合は、正しく旧バージョンがインストールされるなお、この方法で特に知っていただきたいのは、ローカルのファイル・システムだけでなく、ネットワーク上の共有フォルダーも同様に利用可能、という点である。パッケージ・ソースを指定する際、[ソース]欄にUNCでネットワーク・パスを記述すれば(次の画面を参照)、ローカルの場合と全く同様に利用することができる。リポジトリ・ソースとしてネットワーク上の共有フォルダー「\\FileServer01\NuGetRepository」を指定した例このため、部署や社内などWindowsのファイル共有が利用できる範囲での利用であれば、複数人で利用する場合であっても、後述するHTTPを利用する手法よりも手軽に運用が可能である。HTTPベースのプライベート・リポジトリ2つ目の方法はHTTPを利用して公開するリポジトリの構築だ。いわゆるWebサーバーによるプライベート・リポジトリである。ファイル・システムを利用する手法は手軽ではあるが、ファイアウォールを超えてアクセスする必要がある場合は運用が困難となることが予想される。その場合はWebサーバーを利用してプライベート・リポジトリを構築・運用する方法を検討してみるとよい。この方法で作成する場合、原理的には、NuGetがWebサーバーから最低限以下のものをダウンロードできればよい。パッケージ・ファイルのメタデータなどがXML(Atom)で記述されたカタログパッケージ・ファイルのバイナリそのため、上記の要件さえ満たせればLinux上でホストしたApacheなどのIIS以外のWebサーバーも問題なく使える。その場合、最も原始的な手段を取るのであれば、手作業でカタログを作成してパッケージとともに公開ディレクトリに配置すればよい。次のXML(Atom)データは、公式のNuGetギャラリーにブラウザでアクセスして得られたカタログの内容を一部抜粋したものだ。このようなカタログを作成する必要がある。公式のNuGetギャラリーにブラウザでアクセスし、得られたカタログの例とはいえ現実問題として、パッケージの管理やカタログの作成などの運用を考慮するならば、それらの作業を補助する何らかのアプリケーションを導入する方が現実的であろう。NuGetでは「NuGet.Server」というサーバー・アプリケーションが提供されている。IISおよびASP.NETが動作する環境であれば手軽にプライベート・リポジトリを公開・運用できるため、今回はこのアプリケーションの利用手順を手短ではあるが紹介しよう。Studio上での実行するに留めている点をご了承いただきたい。Webアプリケーション・プロジェクトを作成するまずは空のWebアプリケーション・プロジェクトを作成する。アプリケーション」を選択すること。プロジェクト新規作成ダイアログNuGet.Serverをインストールするために、空のWebアプリケーションを作成しているところ。アプリケーション」を選択。「4.5」を選択してもよいが、2013年5月26日現在のバージョンでは一部Web.Configファイルの修正が必要になる。NuGetで「NuGet.Server」を検索し、インストールするプロジェクト・テンプレートの展開が終了したら、NuGetで「NuGet.Server」を検索してインストールする(次の画面はその例)。これにより、依存関係のあるライブラリと同時にNuGet.Serverがインストールされる。NuGet.Serverをインストールする(画面は2013年5月26日現在のバージョン「2.5.0.1」)3.NuGet.Serverを実行するパッケージのインストールが終わったら[F5]キーを押すなどしてNuGet.Serverを実行してみよう。問題なければ、ブラウザが起動し、下記のような画面が表示されるはずだ。v2.5.40416.9020が実行中であることを示している。1NuGetのパッケージ・ソースとして指定するURL。2コマンドラインからパッケージをプッシュする際のコマンド例。3直接、フォルダーにパッケージを配置する際の配置先のパス。リポジトリとしての設定は以上で完了である。この状態ですでにリポジトリとして動作する状態となっている。以下では、引き続き、このリポジトリへのパッケージの配置方法と、そのパッケージをソースとして指定する方法を説明する。パッケージ・ファイルを配置する配布するパッケージを配置しよう。NuGet.Serverでは公式のNuGetギャラリーと同様、コマンドラインによるプッシュ配置と、フォルダーへの直接配置の2つの方法をサポートしている。前者の方法で配置する場合はブラウザの指示に従いコマンドを実行すればよい。この場合はWeb.Configファイル内の<appSettings>セクションにて「apikey」(=全ユーザーで共有するキー、任意の値でOK)の設定を行っておく必要がある(※この設定項目は、NuGet.Serverのインストール時に自動生成されている)。後者の場合は、単に所定のフォルダーにパッケージ・ファイルをコピーしておくだけでよい。パッケージ・ソースを指定する最後にパッケージのソースを指定しよう。Studioのオプション設定ダイアログから行う。違いはソースに先ほどブラウザで指定されたURLを設定する点のみである(次の画面を参照)。NuGet.Serverによるプライベート・リポジトリをパッケージ・ソースに指定いかがだろうか。どちらの手法の場合でもごく簡単にプライベート・リポジトリを構築できることをご理解いただけただろうか。それでは最後に、筆者の体験に基づく利用シナリオをいくつか紹介しよう。社内標準ライブラリなど、自社内で作成・利用するライブラリの配布を行うという、最もオーソドックスな利用方法である。ここから始めてみるとよいだろう。NuGetをご利用の方はお分かりだと思うが、NuGetを利用するとプロジェクトでのライブラリ利用はとても快適なものとなる。ライブラリ利用時の設定作業や依存関係の解決など、面倒な作業の大半が自動化されるためだ。ライブラリの初期導入時はもちろんだが、バージョン・アップ時の方がこの恩恵をより多く受けることになる場合も少なくない。NuGetを利用したパッケージには大変多くの機能がある。ライブラリをはじめとした各種ファイルを配布するだけでなく、設定ファイル(Web.Config/App.Config)への設定の追加や、PowerShellのスクリプト実行することも可能だ。これらの機能を有効に利用すれば、ライブラリをプロジェクトで利用する際に必要な作業の大部分をNuGetに任せてしまうことも可能となる。NuGetパッケージが提供されていないライブラリを管理するNuGetギャラリーで公開されるパッケージは日々増加しており、.NETで開発を行う際に必要なライブラリの多くはNuGetギャラリー経由での利用することが可能となっている。いえ世の中で公開されている全てのライブラリがNuGetギャラリーで提供されているわけではない。ソース・コードのみが提供されており、自分でビルドして利用する必要があるライブラリもあるかもしれない。そんな場合でも、NuGetを活用する方法がある。自分でそれらのパッケージを作成し、プライベート・リポジトリに配置すればよいのだ。利用するライブラリのライセンスや再配布のポリシーには十分注意する必要があるのは言うまでもない(当然ではあるが)。「ライブラリの依存のみ」を配布する業務でアプリケーションを作成する際、社内標準/チーム標準により利用するべきライブラリが指定されているということはないだろうか。「社内Webアプリ作成の際はlog4netとGlimpseを利用すること」などである。NuGetを使うと、これらを簡単に管理することができる。NuGetではファイルを配布することなく、依存関係のみをメタデータに記述したパッケージを作成・配布することができる。これを適用すれば、自動的に必要なライブラリがアプリケーション内に取り込まれるというわけだ。次の画面で示す[社内Webアプリでの標準...]という自作のパッケージをインストールすると、アプリケーションに必要なlog4netとGlimspeがプロジェクトに取り込まれる。log4netとGlimspeをプロジェクトに取り込むためのパッケージの例また、「社内検証を行い、Goサインが出たバージョンしか利用してはいけない」というようなルールがある現場もあるだろう。NuGetでは依存関係の指定時、依存するバージョンを詳細に指定することができる。「○○ライブラリのバージョン1,2.0以上、1.3.0未満」や「△△ライブラリのバージョン1.1.0のみ」といった具合だ。これを利用して適切に依存関係のバージョンを指定しておくことで、ルールを無視して不用意にライブラリのバージョンを上げてしまうような事故を防止できる。新しいバージョンの検証が終わり次第、依存関係が更新されたパッケージを作成して配布すれば、更新処理も簡単に行える。まとめNuGetで容易にクローズドなプライベート・リポジトリを作成することが可能であること、そしてNuGetを活用することで日々の開発業務の効率を大きく改善できる可能性があることをご理解いただけただろうか。NuGetは非常にパワフルで可能性を秘めたツールである。今回は紹介できなかったが、シンボル・サーバーと連携してソース・ファイルやデバッグ・シンボルを配布・利用する仕組みも存在する。“ライブラリ”・パッケージ・マネージャーの枠を超え、NuGetの仕組みをアプリケーション・パッケージの管理に利用する動きもある。NuGetを、単に「NuGetギャラリーに公開されているライブラリを利用するためのツール」としてしか利用しないのは大変もったいない。皆様なりのNuGetの有効な活用方法を見つけ出し、日々の開発に利用していただければと思う。機械学習エンジニアを目指す人~初中級者のための技術情報サイトです。「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。開発者のためのSlackチーム、作りました:「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。2020最適なビューへの切り替えを推奨します:スマートフォン用表示に。