
ユカイ、ツーカイ、カイハツ環境!(3)
分散バージョン管理Git/Mercurial/Bazaar徹底比較
岡本 隆史
2009/1/14
分散バージョン管理システムの覇者は?
コマンドラインで使う分には、達人が使うのでなければ、どのツールも正直あまり代わり映えがしません。一般的な開発者の多くは開発環境として日本語版のWindowsを利用していると思われるので、日本語版のWindows上の環境での状況を中心に各ツールを比較してみます。
| 表 SVN、Git、Mercurial、Bazaarの機能比較 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
この表を基に、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編集部にありますのでご了承ください。
■ @IT関連記事
| ソースコード管理システムgitにライバル出現 連載:Linux Kernel Watch 6月版 Linusが開発したgitにライバル出現。また、シリアルコンソールで顕在化したwatchdog問題やRAWデバイス廃止論まで、トピック満載 「Linux Square」フォーラム 2005/6/21 |
||
| gitベースのカーネル2.6.12に問題発生!? 連載:Linux Kernel Watch 7月版 gitベースによる初の安定版カーネル2.6.12が登場。リリース自体はうまくいったものの、混乱も発生。そして、devfsの議論は大詰めに 「Linux Square」フォーラム 2005/7/26 |
||
| バージョン管理に便利なSubversiveプラグイン CoolなEclipseプラグイン(15) バージョン管理といえばCVSが有名ですが、もっと便利なものがあるって、知ってましたか? SubversionとTracで開発を「見える化」しよう! 「Java
Solution」フォーラム 2007/3/2 |
||
| Subversionによるバージョン管理 Apache 2.0でWebDAV(後編) DeltaVがRFCとしてリリースされ、WebDAVのバージョン管理機能も足元か固まった。DeltaVの実装である「Subversion」を導入しよう 「Linux Square」フォーラム 2002/7/13 |
||
| ソースコードの宝石箱、●●Forgeを見逃すなかれ 安藤幸央のランダウン(39) 開発ホスティングサービスを知っていますか? ソースコードが満載でWeb上のDB操作やコンパイル、管理機能、CMSなど便利な機能が無料です 「Java Solution」フォーラム 2008/3/18 |
| チーム開発におけるバージョン管理の活用方法 連載:Team Foundation Server 2008の適用 TFSのバージョン管理機能にはどんな特徴があるのか? どのよう使えばよいのか? 現場で使えるノウハウを解説する 「Insider.NET」フォーラム
2008/12/26 |
| Index | ||||||||||||
|
||||||||||||
ユカイ、ツーカイ、カイハツ環境! バックナンバー 連載インデックスへ»
- 第1回 Trac Lightningで始めるチケット式開発「電撃」入門
- 第2回 SubversionとTracでファイル管理の“迷宮”から脱出
- 第3回 分散バージョン管理Git/Mercurial/Bazaar徹底比較
- 第4回 Aptanaなら開発環境とクラウドの連携が超お手軽!
- 第5回 App Engine/AptanaなどJavaクラウド4つを徹底比較
- 第6回 Eclipse 3.5 Galileoの「実に面白い」新機能とは
- 第7回 ブラウザを選ばずWebテストを自動化するSelenium
- 第8回 JUnit/FindBugs/PMDなどを総観できるQALab/Limy
- 第9回 Googlerも使っているIntelliJ IDEAのOSS版を試す
- 第10回 Webのバグを燃やしまくるFirebugと、そのアドオン7選
- 第11回 DB設計の神ツール「ERMaster」なら、ここまでできる
- 第12回 AWS ToolkitでTomcatクラスタをEC2上に楽々構築
- 第13回 究極の問題解析ツール、逆コンパイラJD-Eclipseとは
- 第14回 AzureのストレージをJavaで扱えるWindowsAzure4j
- 第15回 Java EE 6/Tomcat 7/Gitに対応したEclipse 3.6
- 第16回 単体テストを“神速”化するQuick JUnitとMockito
- 第17回 コード探知機「Sonar」でプロジェクトの深海を探れ!
- 第18回 Team Foundation ServerでJava開発は大丈夫か?
- 第19回 Review Boardならコードレビューを効率良くできる!
- 第20回 Bazaarでござ〜る。猿でもできる分散バージョン管理
- 第21回 「Hudson」改め「Jenkins」で始めるCI入門
- 第22回 Ant使いでもMavenのライブラリ管理ができるIvyとは
- 第23回 AWSの自由自在なPaaS「Elastic Beanstalk」とは
- 第24回 Eclipse 3.7 Indigo公開、e4、Orion、そしてクラウドへ
- 第25回 Java開発者が知らないと損するPaaSクラウド8選
- 第26回 Git管理の神ツール「Gitolite」なら、ここまでできる!
| Java Solution全記事一覧 |
TechTargetジャパン
- 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ - 新キャラ登場!スクラムやるならRedmineとALMinium (2011/12/26)
「黒板を“かんばん”にしてたら先生に怒られた(T_T)」「管理はPC内でやればいいのよ」「承知しました」
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

