バージョン管理ツールの選択¶
方式の違い¶
集中型と分散型¶
バージョン管理ツールは、方式の違いから集中型と分散型に分類できます。
集中型は、リポジトリが1箇所(一元化)で、バージョン管理機能を利用するにはリポジトリにアクセスが必要です。したがってソースコードの変更管理にはネットワーク接続が必須となります。
分散型は、リポジトリが複数あり(通常開発者の手元にあるリポジトリと開発成果をまとめる共有リポジトリ)、個人作業においてバージョン管理機能を利用するには手元のリポジトリで十分です。リポジトリ間で変更を共有する機能があり、例えば個人作業リポジトリと共有リポジトリで変更をやりとりすることができます。したがって、ソースコードの変更管理にはネットワーク接続が必ずしも必須ではありません。
ただし、分散型は変更の共有には集中型より一手間作業が増えるので、使いにくい(習熟が必要)という意見もあるようです。
SIer的バージョン管理ツールの選択¶
SIerの場合、プロジェクトで一箇所に集まって開発作業をすることが多いので集中型のバージョン管理ツールで十分と思っていました。
しかし、開発場所と運用場所がネットワーク的に切り離されている、部署や会社をまたがって開発をして組織ごとにバージョン管理リポジトリを立てている、といったことがあると、集中型バージョン管理ツールでは管理しきれず構成管理ミスがしばしば発生します。例えば、運用(試験)場所での変更を開発場所のリポジトリに反映忘れる、ある開発会社の成果を開発場所の共有リポジトリに登録する際、上書きして登録したため必要な内容を消してしまった、などがあります。
このように、そもそもリポジトリが一元化されていない場合は、素直に分散型を使った方が問題を未然に防ぐことができます。
分散型バージョン管理ツールはどれがいいか¶
オープンソースの分散バージョン管理ツールでは、Git、Mercurial、Bazaarが有名です。
選択の基準を次とします。
- Windows、LinuxとOSをまたがってリポジトリを共有できる
- 日本語ファイル名も対応できる
- 初心者向けの情報、構成管理者向けの情報が充実している
- 統合開発環境(IDE)等でサポートされている
OS(異なる文字コード)をまたがって日本語ファイル名を扱えるツールはもとはBazaarだけでしたが、2012年にGitがファイル名をunicodeで扱うようになり、Gitでも対応可能になりました((正規化のいわゆるNFD問題は残っている))。
Gitは日本語情報(書籍)も多く、初心者向けも充実しています。
Gitは統合開発環境(IDE)等でもサポートされるようになっています。
そこで、現段階(2013年半ば)ではGitがいいでしょう。
つかいこなせない分散バージョン管理¶
分散バージョン管理を導入して最初に生じる課題のひとつに、「むずかしすぎ」て使いこなせないがあります。
VSS、CVS、あるいはSubversionなどの集中型バージョン管理を導入していて、しかも開発者個人ではブランチなどは作ってない場合、分散バージョン管理ツールを適用するといきなり各個人にブランチ管理(とそれに伴うマージ作業)が発生するので敷居がはなはだしく高くなります。
ブランチを作ってそこでこまめにコミットしながら開発する作業のメリット
- 共有のリポジトリから最新版を受け取っても開発中のコードには影響を与えないですむ
- 必要があれば取り込みは可能
- 共有のリポジトリに上げる条件(例:ある機能の実装、ユニットテスト完了)を満たすまでの間も、手元で変更の管理が可能
- 開発時の試行錯誤を手助け可能
- 開発を進めてみたら行き詰まったので、途中までさかのぼり、別の実装方法を進める、やっぱ戻す、等
- 開発作業の途中で、別な急ぎの作業が発生したときに、今の作業を凍結しておいて対応し終わり次第元に戻して続行する、等
- やりなおしがかなり自在