SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

実例に学ぶチーム開発におけるNuGet導入のすすめ

チーム開発でもパッケージ管理を容易に! NuGetを活用してライブラリを効果的に配布しよう

実例に学ぶチーム開発におけるNuGet導入のすすめ 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

dll直接配布の問題点

 このやり方で起こりうる問題として、ここでは以下の2つを例として挙げます。

1)ライブラリ利用までの手順が煩雑

 まずはライブラリを利用するまでの手順が多いため、利用者にとっては負担となります。参照すべきライブラリが少なければそれほどではないかもしれませんが、業務システム開発等においては参照すべきライブラリが多くなる傾向があります。数が多ければ、その分ミスも発生しやすいでしょう。

 また、ライブラリ配置用フォルダー(上記の例ではlibフォルダー)はその位置、名前をチームで統一しなければなりません。もし統一されていない場合、他者の作成したソリューションファイルを開いたとき、参照が必要なdllファイルが見つからず、参照設定をやり直さなければならない可能性もあります。

 こういった手順やルールをチーム内に周知、徹底させるための教育コストが必要である、というのも一つの問題です。

2)異なるバージョンが同居できない

 libフォルダーには、常に最新バージョンのdllだけが配置されます。つまり、ライブラリのバージョンがアップしても、新バージョンのdllファイルで旧バージョンのdllファイルを上書きすることになります。

 その結果、今使っているライブラリのバージョンを確認するには、dllファイルのタイムスタンプやバージョン番号で確認するしかなくなります。よって、最新のバージョンであるかどうかは、これらの情報をローカルと共有フォルダー双方のdllファイルで比較するしかありません。

 また、開発中に何かしらライブラリの不具合を見つけても、問題がなかった過去のバージョンに戻すといったことも、容易ではありません。

 その他、こういう運用を行っている場合、ライブラリのバージョンが適切に管理されず、変更前後のdllファイルが何度も同じバージョンのまま配布されてしまう懸念もあります。この時は、ファイルのタイムスタンプしかdllファイルが最新であるかどうかを判断する方法がなくなってしまいます。

NuGetを使った解決法

 NuGetを使うとライブラリ配布の手順は次のようになります(図2)。

図2:NuGetで配布する
図2:NuGetで配布する

1. 提供者がライブラリのNuGetパッケージをプライベート・リポジトリにアップする

 ライブラリ提供者は、dllファイルを含むNuGetパッケージを作成し、NuGetのプライベート・リポジトリにアップします。プライベート・リポジトリは共有フォルダーや専用サーバー等で提供できます。

2. 利用者がプライベート・リポジトリからNuGetパッケージをインストールする

 事前にVSに1.のプライベート・リポジトリを登録しておき、後は必要なライブラリのNuGetパッケージをインストールします。インストールしたライブラリは自動的にダウンロードされ、ソリューション内のpackagesフォルダーに、NuGetパッケージ名とバージョン名を含むサブフォルダーが作成されて配置されます。また、dll参照も同時に行われます。

 この方法により、dll直接配布する際の問題点が次のように解消されます。

1)ライブラリ利用までの手順がシンプル

 利用者が行うのは初回のプライベート・リポジトリ登録と、NuGetパッケージをインストールするだけです。これだけでライブラリのダウンロードとライブラリ用フォルダーへの配置、並びに参照設定が行えます。

2)異なるバージョンを混在させられる

 NuGetはバージョン番号を含むパッケージ名のフォルダーにファイルを展開するため、ライブラリのバージョンがアップした場合でも新旧バージョンが別フォルダーに配置されます(図2)。そのため、ソリューションで同一ライブラリの異なるバージョンを使用するプロジェクトを混在させることもできます。

 また、NuGetのUpdate-Packageコマンドを使うことで、特定バージョンへのロールバックも容易です(リスト1)。

リスト1:特定バージョンへのロールバック
PM> Update-Package (パッケージ名) -Version (バージョン番号)

NuGet採用時の注意点

 NuGetを採用することで、様々な問題が解決できることがわかってもらえたかと思います。しかし、NuGetを採用することにはメリットばかりではありません。dllを直接配布する場合に比べて、一部注意が必要なところもあります。

1)バージョン管理を徹底する必要がある

 NuGetは特定バージョンへアップデートすることできるということは、すなわちライブラリ提供側でしっかりとバージョン管理を行う必要があるということです。例えば、配布後にすぐに軽微なバグが見つかったとしても、それは新たなバージョン番号を付けて再度プライベート・リポジトリにアップしなければなりません。

 これは一見面倒なようですが、これまでバージョン管理を疎かにしていたのであれば、習慣を見直すよい機会として捉えることもできます。特に、システムが大規模になればライブラリの利用者も増えるため、適切なバージョンを付けて管理していくことは、後々の問題発生時のトレーサビリティ確保にも役立ちます。

 なお、バージョン番号の付け方については様々な流儀があります。参考資料4)、5)のページ等を参考に、チームの状況に合わせて運用方法を考えてみてください。

2)ライブラリのデバッグに注意が必要

 dllを直接配布する場合、Debug構成でビルドしてできたpdbファイルも、dllファイルと一緒に配布することができます。こうすることで、利用者側がデバッガーでライブラリのコードにステップ・インすることができるようになります。これは、ライブラリの不具合等を利用者側でも調査することができるので、チーム開発では便利な運用方法の一つです。

 しかし、NuGetでライブラリを配布する場合、NuGetパッケージにpdbファイルを含めることができないため、この方法は使えません。代わりに「シンボル・パッケージ」をライブラリとは別に作成した上で、対応したNuGetサーバーソフトを使う必要があります。詳しくは参考資料6)の記事を参考にして下さい。

次のページ
ケース2:VCSで必要なソースファイルのみ管理する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
実例に学ぶチーム開発における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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 高野 将(タカノ ショウ)

<個人紹介>新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C# 2017対応』(日経BP社、2017)など。<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8735 2015/06/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング