このページについて
SVNやGitを使ってバージョン管理をしているPJは殆どだと思います(稀に行っていないPJが未だにありますが。。。)が、
ライブラリ管理までしているPJは稀なので、布教も兼ねて書いてみるページです。
間違った認識があるかもしれないので、間違っていると感じましたらコメントお願いします!
想定読者
突然ですが、質問です。
「ライブラリ管理」していますか?
上記を聞かれて何を言っているのか判らない人がこのページの対象読者です。
ライブラリ管理とは何か
「何かのチェックポイント時点(例えば、タグ付けしたときや、本番環境にデプロイしたとき)」の成果物をいつでも自由に引き出せる状態にしておくことです。
「何かのチェックポイント時点」の成果物とは、実行可能ファイル(.exe)やライブラリファイル(.jar,.so,.lib)などのコンパイルして生成されたファイルと、
コンパイル時に参照していた外部のライブラリファイル(libcやapache-commonsのjarなどバージョンも含めて)を1セットとしたものです。
バージョン管理と何が違うのか
バージョン管理はソフトウェアの成長過程を記録しておき、
- 必要なときに履歴を閲覧して変更の意図をトレースしたり、
- ときにはバグが混入したタイミングを確認したり、
- はたまたバージョンを元に戻してビルドし直して配ったり、
と云ったものです。
ライブラリ管理には上記のような使い方はなく、
単純にある時点・バージョンの成果物を自由に切り替えて使えるようにしておく、
と云ったものです。
インターネット上のMaven Repositoryはライブラリ管理の代表格です。
ライブラリ管理のメリット
思うことを羅列してみます。
- ソフトウェアの階層ごとに、プロジェクトファイルが作れる。
業務系のプロジェクト、共通的に使用したいユーティリティ群のプロジェクトと云った具合にプロジェクトファイルを分けて作ることができる。 - プロジェクトファイルが分けられると、挙動の債務が明確に別れるため、品質が上がりやすい。
よくあるオールインワンの失敗としては、全てが1つのプロジェクトにで含まれているため、共通機能が業務機能を使っているなど、参照がめちゃくちゃになっていてソフトウェアの運用つら〜直すのこわ〜という状況。これを改善できます。 - プロジェクトの都合の良いタイミングで、使用するライブラリのバージョンを上げることができる。
これは、業務系のプロジェクトの都合の良いタイミングで、ユーティリティ群のプロジェクトでコンパイルした成果物を取り込みできると云った具合です。 - 今迄に見たことがないエラーが突然出た際に、すぐに以前のバージョンではどのような動きをしていたかを確認できる。
バージョン管理のみであれば、バージョンを元に戻してコンパイルして、ときには配って・・・など余計な作業が多いですが、ライブラリ管理をしていれば必要な成果物が一式あるので、すぐにバージョンを元に戻して確認を行えます。 - 上記のものに被りますが、本番リリース後に重大な不具合が見つかってしまった場合に、すぐに元のバージョンに戻すことができます。
本番リリースであれば、どこか同じロケーション上にバックアップが取ってあるでしょうからそこから元せば良いじゃんと言われてしまいそうですが、ライブラリ管理を行っていれば機械的に元に戻すことが可能になります。よく、継続的デプロイメントとか継続的デリバリーとか云われているものです。これとライブラリ管理は非常に相性が良いと感じています。
ライブラリ管理のデメリット
特にないです。(と思っています)
ライブラリ管理をどうやるか
手段は何でも良いです。
成果物がコンパイルしたファイルと、そのときの参照ライブラリ一式あればファイルサーバにバージョン番号のディレクトリでも作ってその中にでもひょいっと置いておけば良いです。
が、そんな怠いことはしたくないので、ツールを使います。
ライブラリ管理に使用するツール
- リポジトリマネージャ
Maven Repositoryみたいなインターネット上のサービスに業務アプリの成果物を置く訳にはほぼほぼいかないと思います。
そんなときは社内のサーバにリポジトリマネージャを立ち上げて使います。
リポジトリマネージャの代表としては以下のようなものがあります。 - Nexus
- Maven Archiva
- Artifactory
比較は以下にまとまってるのでリンク貼っておきます。
アーティファクトリポジトリマネージャの比較 Nexus/Archiva/Artifactory
私はNexus使ってます。
どれを使ってもミラーサーバとしての役割もあるため、むやみやたらにインターネット上のセントラルリポジトリにファイルを取りにいきません。
会社のプロジェクトでMavenか何かを使うときは、こういうのを使わないと不正アクセスか何かと勘違いされてアク禁になるそうです。
そりゃ、リポジトリサーバからすれば見えているIPアドレスは一緒だろうから、そうなりますよね。
ってことでアク禁解除はめんどうらしいので、必ずリポジトリマネージャを入れてミラーの設定も入れましょう。
- リポジトリマネージャにアクセスするツール
最近のビルドツールには、リポジトリマネージャにアクセスしてライブラリを自動ダウンロードして参照まで紐づけてくれるものが一般的です。
(今の私の環境は、antばかりですが。。良い加減やめようよant使うの)
利用言語、ライブラリに合わせて使うツールを選定しましょう。
リポジトリマネージャが対応していることの確認もお忘れなく!
JavaならばMavenを使っておけばとりあえず間違いはないです。
2017/4/6追加
りぽじとりマネージャの分について記載したので、ページのリンクを添付。
http://qiita.com/sh-ogawa/items/401a89da868a233c87ab