チーム開発でもパッケージ管理を容易に! NuGetを活用してライブラリを効果的に配布しよう
実例に学ぶチーム開発におけるNuGet導入のすすめ 第1回
dll直接配布の問題点
このやり方で起こりうる問題として、ここでは以下の2つを例として挙げます。
1)ライブラリ利用までの手順が煩雑
まずはライブラリを利用するまでの手順が多いため、利用者にとっては負担となります。参照すべきライブラリが少なければそれほどではないかもしれませんが、業務システム開発等においては参照すべきライブラリが多くなる傾向があります。数が多ければ、その分ミスも発生しやすいでしょう。
また、ライブラリ配置用フォルダー(上記の例ではlibフォルダー)はその位置、名前をチームで統一しなければなりません。もし統一されていない場合、他者の作成したソリューションファイルを開いたとき、参照が必要なdllファイルが見つからず、参照設定をやり直さなければならない可能性もあります。
こういった手順やルールをチーム内に周知、徹底させるための教育コストが必要である、というのも一つの問題です。
2)異なるバージョンが同居できない
libフォルダーには、常に最新バージョンのdllだけが配置されます。つまり、ライブラリのバージョンがアップしても、新バージョンのdllファイルで旧バージョンのdllファイルを上書きすることになります。
その結果、今使っているライブラリのバージョンを確認するには、dllファイルのタイムスタンプやバージョン番号で確認するしかなくなります。よって、最新のバージョンであるかどうかは、これらの情報をローカルと共有フォルダー双方のdllファイルで比較するしかありません。
また、開発中に何かしらライブラリの不具合を見つけても、問題がなかった過去のバージョンに戻すといったことも、容易ではありません。
その他、こういう運用を行っている場合、ライブラリのバージョンが適切に管理されず、変更前後のdllファイルが何度も同じバージョンのまま配布されてしまう懸念もあります。この時は、ファイルのタイムスタンプしかdllファイルが最新であるかどうかを判断する方法がなくなってしまいます。
NuGetを使った解決法
NuGetを使うとライブラリ配布の手順は次のようになります(図2)。
1. 提供者がライブラリのNuGetパッケージをプライベート・リポジトリにアップする
ライブラリ提供者は、dllファイルを含むNuGetパッケージを作成し、NuGetのプライベート・リポジトリにアップします。プライベート・リポジトリは共有フォルダーや専用サーバー等で提供できます。
2. 利用者がプライベート・リポジトリからNuGetパッケージをインストールする
事前にVSに1.のプライベート・リポジトリを登録しておき、後は必要なライブラリのNuGetパッケージをインストールします。インストールしたライブラリは自動的にダウンロードされ、ソリューション内のpackagesフォルダーに、NuGetパッケージ名とバージョン名を含むサブフォルダーが作成されて配置されます。また、dll参照も同時に行われます。
この方法により、dll直接配布する際の問題点が次のように解消されます。
1)ライブラリ利用までの手順がシンプル
利用者が行うのは初回のプライベート・リポジトリ登録と、NuGetパッケージをインストールするだけです。これだけでライブラリのダウンロードとライブラリ用フォルダーへの配置、並びに参照設定が行えます。
2)異なるバージョンを混在させられる
NuGetはバージョン番号を含むパッケージ名のフォルダーにファイルを展開するため、ライブラリのバージョンがアップした場合でも新旧バージョンが別フォルダーに配置されます(図2)。そのため、ソリューションで同一ライブラリの異なるバージョンを使用するプロジェクトを混在させることもできます。
また、NuGetのUpdate-Packageコマンドを使うことで、特定バージョンへのロールバックも容易です(リスト1)。
PM> Update-Package (パッケージ名) -Version (バージョン番号)
NuGet採用時の注意点
NuGetを採用することで、様々な問題が解決できることがわかってもらえたかと思います。しかし、NuGetを採用することにはメリットばかりではありません。dllを直接配布する場合に比べて、一部注意が必要なところもあります。
1)バージョン管理を徹底する必要がある
NuGetは特定バージョンへアップデートすることできるということは、すなわちライブラリ提供側でしっかりとバージョン管理を行う必要があるということです。例えば、配布後にすぐに軽微なバグが見つかったとしても、それは新たなバージョン番号を付けて再度プライベート・リポジトリにアップしなければなりません。
これは一見面倒なようですが、これまでバージョン管理を疎かにしていたのであれば、習慣を見直すよい機会として捉えることもできます。特に、システムが大規模になればライブラリの利用者も増えるため、適切なバージョンを付けて管理していくことは、後々の問題発生時のトレーサビリティ確保にも役立ちます。
なお、バージョン番号の付け方については様々な流儀があります。参考資料4)、5)のページ等を参考に、チームの状況に合わせて運用方法を考えてみてください。
2)ライブラリのデバッグに注意が必要
dllを直接配布する場合、Debug構成でビルドしてできたpdbファイルも、dllファイルと一緒に配布することができます。こうすることで、利用者側がデバッガーでライブラリのコードにステップ・インすることができるようになります。これは、ライブラリの不具合等を利用者側でも調査することができるので、チーム開発では便利な運用方法の一つです。
しかし、NuGetでライブラリを配布する場合、NuGetパッケージにpdbファイルを含めることができないため、この方法は使えません。代わりに「シンボル・パッケージ」をライブラリとは別に作成した上で、対応したNuGetサーバーソフトを使う必要があります。詳しくは参考資料6)の記事を参考にして下さい。
この記事は参考になりましたか?
- 実例に学ぶチーム開発におけるNuGet導入のすすめ連載記事一覧
-
- NuGetを活用してライブラリの変更に柔軟に対応しよう
- チーム開発でもパッケージ管理を容易に! NuGetを活用してライブラリを効果的に配布しよう
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 高野 将(タカノ ショウ)
<個人紹介>新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C# 2017対応』(日経BP社、2017)など。< WINGSプロジェクト について>有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での 登録メンバ は約50名で、現在も執筆メンバを 募集中 。興味のある方は、どしどし応募頂きたい。 著書 、 記事 多数。 RSS X: @WingsPro_info (公式)、 @WingsPro_info/wings (メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

