分散バージョン管理システムの覇者は?
コマンドラインで使う分には、達人が使うのでなければ、どのツールも正直あまり代わり映えがしません。一般的な開発者の多くは開発環境として日本語版のWindowsを利用していると思われるので、日本語版のWindows上の環境での状況を中心に各ツールを比較してみます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この表を基に、5つのポイントから比較してみましょう。
比較ポイント【1】日本語化環境での利用
GitはWindows上のgitコマンドで文字化けしないように利用するために、コラムで紹介したような工夫が必要でした。また、ファイル名に日本語を利用した場合、WindowsとUNIX環境が混在するとファイル名が文字化けします。EGITでも日本語のファイルは正しく扱えません。
Mercurialではコミットメッセージは特に設定は必要なく、文字化けも起こりません。ただし、Windows/UNIX混在環境ではファイル名が文字化けします。また、Mercurial Eclipseの[History]ビューを見ると文字化けしています。
Bazaarのみがコミットメッセージ、ファイル名ともにマルチバイト文字の処理をしていて、日本語のファイル名をWindowsやLinuxのようなシステムのエンコーディングが異なる環境間でリポジトリを共有しても正しく扱えます。しかし、Eclipse環境では日本語のファイル名のファイルを正しく扱えませんでした。
日本語環境での利用はどれも何かしら問題があり、甲乙付け難いですが、bzr本体で完全な処理を行っているBazaarが優勢といったところでしょうか。
比較ポイント【2】Windows環境での利用
Windows上の環境としては、基本的にすべてCygwinで利用可能です。Cygwin以外でのサポートについては、TortoiseBzrとTortoiseHgを提供しているBazaarとMercurialが一歩抜きんでています。
GitもTortoiseGitを提供していますが、開発の極めて初期段階であり、現時点では実用的ではありませんでした。Windows専用のビルドツールであるMsysGitを利用するとGit GUIが同梱されてきますが、Windowsシェルとの統合機能はなく、専用クライアントでの利用となります。SVN連携機能は2008年12月の執筆時のバージョンではサポートされていませんでした。
比較ポイント【3】Eclipse上での利用
Eclipse上の開発環境としては、GitとBazaarはリポジトリ管理下にあるファイルや、リポジトリ上のファイルから変更されたファイルにアイコンが付くなど、Mercurialに比べると優れています。
セットアップの簡便さとしては、BazaarとMercurialはコマンドラインのツールをインストールし、コマンドラインのコマンドへパスを設定する必要があります。さらに、Bazaarは「xmloutputプラグイン」を追加でインストールする必要がありました。GitはJavaクライアントが組み込まれており、インストールしてすぐに利用できます。
Mercurialは日本語のコミットメッセージが文字化けし、ファイルの状態がアイコンで表示されないため、BazaarやGitに比べると日本語環境での利用で問題がありそうですが、メニューからのオペレーションは最も豊富です。また、日本語のファイル名を正しく扱えるのはMercurial Eclipseだけです。
英数字のファイル名のソースコードだけを扱うのであれば導入が楽なGit、日本語のファイル名のファイルを扱うのであればMercurial Eclipseが有利です。
比較ポイント【4】アクセス制御
GitとBazaarはリポジトリ単位のアクセス制御しか設定できません。Mercurialはディレクトリ/ファイル単位でアクセス制御を設定可能です。しかしながら、アクセスの可否だけでread/writeなどSVNのように細かい設定はできません。
比較ポイント【5】拡張性
BazaarとMercurialはPythonでモジュールを作成し、プラグイン(エクステンション、機能拡張)としてインストールすることで簡単に機能拡張できます。
一方、GitはC言語で記述された低レベルコマンドとシェルスクリプトやPerlスクリプトで記述されたハイレベルコマンドから構成されています。これらのコマンドを利用したスクリプトを追加することにより、拡張できるようになっています。アーキテクチャ的にはGitはUNIXの洗練された考え方を受け継いでおり、コマンドをスクリプトで組み合わせて新しい機能を実装します。
そのほか
先進的な機能はまずGitに実装され、Mercurial、Bazaarが追従しているといった感じです。Rebase機能やBisect機能は少し前まではGitのウリとされてきましたが、現在ではMercurialもBazaarも同等の機能を利用できます。機能的にはどれもどんぐりの背比べと感じました。
いまこそ分散型に移行すべき? Subversionと共存?
本稿では、メジャーとなりつつある分散バージョン管理システムとしてMercurial、Git、Bazaarを比較紹介してきました。どのツールも甲乙付け難く、どれを使うべきとはいえない状況です。世の中のシェアを見ると、Git>Mercurial>Bazaarというふうに、Gitが最も使われていますが、日本語とWindows環境のサポートがいま一歩です。個人的には、国際化サポートがしっかりしているBazaarをお勧めしたいところですが、将来的にはGit、Mercurialでもこれらの問題は解決されると思われます。
分散バージョン管理システムを利用した場合でも、成果物を共有するよりどころとして中央リポジトリは必要となります。現時点では、中央リポジトリとしてSVNを利用し、各自の作業を行うローカルリポジトリに分散バージョン管理システムを利用するのがベストだと筆者は考えています。各自のローカルリポジトリを管理するツールを変更するのであれば、中央リポジトリへは影響を与えないので、後々ツールを変更してもオーバーヘッドにはなりません。
新しくツールを覚えたくない開発者はSVNのクライアントを従来どおり利用できます。ロック処理やサーバの細かいアクセス制御などのSVNのメリットを得ながら、分散バージョン管理システムが有利な場面では、分散バージョン管理システムを併用し、まずは適用しやすい場面や開発者から導入を始めてみてはいかがでしょうか。
最後になりますが、本稿を執筆するに当たり、Debianで日々Gitを使っている上川純一氏にご協力をいただきました。上川氏にご協力いただいたとはいえ、本稿に誤りがある場合は責任の一切は筆者と@IT編集部にありますのでご了承ください。
- exe/dmgしか知らない人のためのインストール/パッケージ管理/ビルドの基礎知識
- これでGitも怖くない! GUIでのバージョン管理が無料でできるSourceTreeの7つの特徴とは
- DevOps時代の開発者のためのOSSクラウド運用管理ツール5選まとめ
- GitHubはリアルRPG? そして、ソーシャルコーディングへ
- ついにメジャーバージョンUP! Eclipse 4.2の新機能7選
- いまアツいアジャイルプロジェクト管理ツール9選+Pivotal Tracker入門
- Git管理の神ツール「Gitolite」なら、ここまでできる!
- Java開発者が知らないと損するPaaSクラウド8選
- Eclipse 3.7 Indigo公開、e4、Orion、そしてクラウドへ
- AWSの自由自在なPaaS「Elastic Beanstalk」とは
- Ant使いでもMavenのライブラリ管理ができるIvyとは
- 「Hudson」改め「Jenkins」で始めるCI(継続的インテグレーション)入門
- Bazaarでござ〜る。猿でもできる分散バージョン管理“超”入門
- Review Boardならコードレビューを効率良くできる!
- Team Foundation ServerでJava開発は大丈夫か?
- コード探知機「Sonar」でプロジェクトの深海を探れ!
- 単体テストを“神速”化するQuick JUnitとMockito
- Java EE 6/Tomcat 7/Gitに対応したEclipse 3.6
- AzureのストレージをJavaで扱えるWindowsAzure4j
- 究極の問題解析ツール、逆コンパイラJD-Eclipseとは
- AWS ToolkitでTomcatクラスタをAmazon EC2上に楽々構築
- DB設計の神ツール「ERMaster」なら、ここまでできる
- Webのバグを燃やしまくるFirebugと、そのアドオン7選
- Googlerも使っているIntelliJ IDEAのOSS版を試す
- JUnit/FindBugs/PMDなどを総観できるQALab/Limy
- ブラウザを選ばずWebテストを自動化するSelenium
- Eclipse 3.5 Galileoの「実に面白い」新機能とは
- App Engine/AptanaなどJavaクラウド4つを徹底比較
- Aptanaなら開発環境とクラウドの連携が超お手軽!
- 分散バージョン管理Git/Mercurial/Bazaar徹底比較
- SubversionとTracでファイル管理の“迷宮”から脱出
- Trac Lightningで始めるチケット式開発「電撃」入門
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ソースコード管理システムgitにライバル出現
連載:Linux Kernel Watch 6月版 - gitベースのカーネル2.6.12に問題発生!?
連載:Linux Kernel Watch 7月版 - バージョン管理に便利なSubversiveプラグイン
CoolなEclipseプラグイン(15) - Subversionによるバージョン管理
Apache 2.0でWebDAV(後編) - ソースコードの宝石箱、●●Forgeを見逃すなかれ
安藤幸央のランダウン(39) - 第1回 Subversionを利用したイケてる.NET開発
オープンソースで始めるバージョン管理 - 第2回 正しいバージョン管理でさらにイケてる.NET開発
オープンソースで始めるバージョン管理 - 第3回 Tracによるタスク管理で、もっとイケてる.NET開発
オープンソースで始めるバージョン管理 - チーム開発におけるバージョン管理の活用方法
連載:Team Foundation Server 2008の適用