「“分散”バージョン管理は難しい」という人こそ
最近、GitやMercurialが注目を浴び、SubversionやCVSなどの中央型のバージョン管理システムに代わり分散型のバージョン管理システムの普及が進んでいます。本稿では、GitやMercurialに比べ、いま一歩マイナーな分散バージョン管理システムである「Bazaar」を紹介します。
本稿は、想定読者層としてはSubversionやCVSを、すでに使っており、分散バージョン管理システムに興味がある方を対象としています。「分散バージョン管理システムって何?」と思われる方は、連載第3回の「分散バージョン管理Git/Mercurial/Bazaar徹底比較」を参照しておくとスムーズに読み進められると思います。
なお本稿では、一般的なシステム開発やソフトウェア開発で利用が想定される、“中央リポジトリ”を利用することを前提として解説しています。ご了承ください。
猿でも使えるかもしれない「Bazaar」とは?
Bazaarは、2005年から開発されている分散バージョン管理システムで、「プログラマ/ハッカーだけではなく、すべての人が使える分散バージョン管理システム」というコンセプトの下で開発されています。
GitやMercurialと並び、分散バージョン管理システムの御三家の1つといわれており、UbuntuのスポンサーであるCanonicalの支援で開発されています。また、フリーソフトウェアで有名なGNUの公式プロジェクトです。CanonicalがスポンサーとなりホスティングしているOSS開発基盤であるLaunchpadで採用され、LaunchPad上で開発されるOSSの多くはBazaarを利用しています。
採用プロジェクトの有名どころとしては、UbuntuをはじめMySQL、Emacs、Mailman、GRUB、Inkscapeなどがあります。Bazaarプロジェクトの公式発表では、すでに1000以上のOSSおよび商用プロジェクトがBazaarを採用しているとのことです。
では、Bazaarには一体どういう特徴があるのか、見ていきましょう。
分散バージョン管理システムである
当たり前のことですが、他の分散バージョン管理システムと同じように、効率的なオフラインでの作業や安心して使えるブランチ(分岐)とマージ(差分同期)を提供します。
現在主要な分散バージョン管理システムのGitやMercurial、Bazaarはいずれも2005年に初期のバージョンがリリースされています。Mercurialは、2005年4月19日に最初のバージョン0.1がリリース、Gitは4月6日にプロジェクトのアナウンスが行われた中、Bazaarは3月26日にバージョン0.01がすでにリリースされています。
Bazaarは後発に思われがちですが、この3つの中では最初にリリースされた分散バージョン管理システムなのです。
コラム 「猿でも分かるリポジトリの扱いの違い」
Bazaarは分散バージョン管理システムではありますが、GitやMercurialとはリポジトリ(バージョン管理の履歴の保存場所)の扱いが若干異なります。次の図を見てください。
Subversionは、作業コピーとしてある時点でのスナップショットのファイルしか持っていません。リポジトリを「木」に例えると、Subversionの作業コピーは「葉」しか持っていないことになります。履歴を調べたり、マージを行うためには、中央リポジトリへアクセスする必要あります。
これに対し、GitやMercurialはリポジトリ全体のミラーを持っています。「木」の複製をそのまま持っているといっていいでしょう。このため、履歴へのアクセスやブランチの切り替えをサーバへアクセスすることなく行えます。
ただし、本当に「木」のすべてを各開発者が持っておく必要があるのでしょうか?
Bazaarでは、デフォルトではブランチの履歴の複製をローカルに持ちます。つまり、「枝」の部分だけを持つことになります。通常作業を行うときは、trunk(主幹)や特定のブランチ上で作業するので、自分の作業ブランチの履歴やマージができれば十分です。Bazaarのリポジトリは無駄がない構成だといえるでしょう。
さらにBazaarでは、複数のブランチを取ってきて作業することもできますし、チェックアウトを利用するとSubversionのように作業コピーだけ保持することもできます。開発者のスタイルに合わせて柔軟に構成できます。
拡張可能なプラグインアーキテクチャ
Bazaarは、Pythonで記述したプラグインにより機能拡張ができます。中央リポジトリのブランチの取得が終わったときにポップアップで通知してくれる「notification」プラグインや、Git/Mercurialのリポジトリを扱うプラグインなどが提供されています。
また「xmloutput」プラグインを利用すると、Bazaarの操作をXMLを介して行うことができ、他の言語からも簡単に利用できます。Bazaar用のEclipseプラグインである「Bzr-Eclipse」は、このxmloutputプラグインを利用してコマンドラインのbzrと通信しています。
Subversionから乗り換えやすいという4つの理由
MercurialはGitよりSubversionユーザーになじみやすいことで有名ですが、Bazaarは、さらにSubversionからの乗り換えを意識して開発されています。
【1】Subversionに似たCUIコマンド体系
バージョン管理システムの中で最もよく利用されているSubversionに近いコマンドを利用します。
【2】Subversionのリポジトリを直接扱える
Subversionのリポジトリを直接扱えます。「bzr co 【SubversionのリポジトリのURL】」でチェックアウトします。「bzr update」「bzr commit」コマンドでアップデートとコミットと、まさにSubversionのクライアントとして利用できます。
もちろんSubversionと異なり、ローカルのリポジトリへのコミットもできますし、マージもSubversionと比べて優秀です。より便利なSubversionのクライアントとして使い始められます。
【3】フォルダベースのブランチ
ブランチをSubversionのようにフォルダで扱います。GitやMercurialは作業コピー上でブランチを直接切り変えながら利用しますが、Bazaarはデフォルトでは、Subversionのようにフォルダベースでブランチを扱うため分りやすいです。
また、Git/Mercurialのように作業コピー上で現在作業中のブランチを切り替えて利用することもできます。
【4】中央型のリポジトリとしても利用可能
分散バージョン管理システムでは、通常リポジトリをクローンして利用しますが、Bazaarはリポジトリ全体をクローンすることなく、最新のコードを作業コピーとしてチェックアウトして利用できます。
また、通常分散バージョン管理システムでは、「ローカルのリポジトリへコミットした後、中央リポジトリへプッシュで反映」という手順を踏みますが、Bazaarは「コミットで中央リポジトリへ反映する」という、Subversionと同じ使い方もできます(図2)。
次ページでは、引き続きBazaarの特徴を解説し、Bazaarの使い方を流れに沿って紹介していきます。
Copyright © ITmedia, Inc. All Rights Reserved.