Mercurial

Mercurial (マーキュリアル) は、ソフトウェア開発者向けの分散型バージョン管理システムである。Microsoft Windows、FreeBSD、MacOS、Linux等の Unix 系システムでサポートされている。GPL v2+  の条件の下でフリーソフトウェアとしてリリースされている。

Mercurial はシンプルな概念の下、次のものを主要な設計目標としている。

 分散型 VCS
 完全分散型の共同開発
 高いパフォーマンス
 スケーラビリティ
 プレーンテキストファイルとバイナリファイル両方に対する堅牢な処理
 高度な分岐
 マージ機能

Mercurial は主としてコマンドライン駆動のプログラムである。Mercurial のすべての操作は、そのドライバープログラム hg への引数として呼び出される。(hg というプログラム名は、 が水銀を意味しその元素記号が  であることに由来する。)

その一方で、Mercurial には、統合された Web インターフェイスが含まれており、グラフィカルユーザインタフェースの拡張機能が利用できる。 TortoiseHg およびいくつかの IDE では、Mercurial によるバージョン管理のサポートを提供する。また他のバージョン管理システム、特に Apache Subversion のユーザの移行を容易にする手段も講じている。

Mercurial は主に Python で実装されている。バイナリ Diff 実装は C 言語で記述されていた。現在はRustを用いた chg (差分取得。C言語 からの置換え)、hgcli (クライアント用コマンドツール)、hg-core (コアモジュール) の実装が進められている。

Olivia Mackall は、Mercurial の創始者であり、2016年後半までリード開発者を務めた。

歴史 
2005年4月上旬、Linuxカーネルの開発に利用されていたBitKeeperのフリー版の配布停止が発表された（詳細についてはBitKeeper#価格変更参照）。Linuxカーネル開発者の一人でもあった Mackall はBitKeeperに代わる分散型バージョン管理システムの開発に乗り出し、4月19日に0.1をリリースした。 既にLinuxカーネルの原著作者であるリーナス・トーバルズも同様の目的でGitの開発を開始していたが、Mackall は Linux kernel Mailing List 上で Mercurial の優位性(データを差分の形式で保持することにより、リポジトリのサイズを節約している等)を訴え、トーバルズと論争を繰り広げたこともあった。LinuxカーネルプロジェクトはMercurial ではなくGitを使用することを決定したが、現在、Mercurial は他の多くのプロジェクトで使用されている。「Git vs. Mercurial」はハッカー文化の聖戦の1つになった。

Mercurial メーリングリストの回答で、Mackall は「Mercurial」という名前がどのように選ばれたか説明した。最初のリリースの少し前に、私は BitKeeper が犯しつつある大失敗に関するある記事を読みました。その記事にはラリー・マクボイは mercurial（気まぐれ）であると書かれていました。この言葉が複数の意味を持つこと、便利な略語があること、そしてそれまで私が使ってきた命名スキームと適合すること（私の電子メールアドレスを参照）から、すぐにピンとひらめいたのです。つまり、Mercurial はラリーを称えて付けられた名前です。同じことが Git にも当てはまるかどうかはわかりません。

設計 
設計目標は、

高い性能とスケーラビリティ
サーバが不要な、完全に分散した共同開発環境
テキストファイルとバイナリファイルの両方を効率よく扱うこと
概念上はシンプルなままで、高度なブランチ機能とマージ機能を持つこと

である。またMercurialは完全なWebインターフェースを含んでいる。
原著作者はMatt Mackall で、現在も主要開発者である。

Mercurial はSHA-1ハッシュを使用してリビジョンを識別する。ネットワークを介したリポジトリへのアクセスでは、Mercurial はHypertext Transfer Protocolベースのプロトコルを使用して、往復要求、新しい接続、および転送されるデータを削減しようとします。 Mercurial は、プロトコルがHypertext Transfer Protocolベースのプロトコルに非常に似ているSSHでも機能する。デフォルトでは、外部マージツールを呼び出す前にマージ (バージョン管理システム)を使用する。

主な機能 
0.9.5版から、他のバージョン管理システムで管理されたソースコードを、取り込む機能がサポートされている。

採用事例 
Mercurial はLinuxカーネルソースの管理に選択されていないが、Facebook、World Wide Web Consortium、Mozillaを含むいくつかの組織で採用されている。FacebookはRustを使用してMononokeを作成している。これは、大規模なマルチプロジェクトリポジトリをサポートするために特別に設計されたMercurial サーバである。

2013年、FacebookはMercurial を採用し、大規模な統合コードリポジトリを処理するためのスケーリングに取り組み始めた。

Bitbucketは、Webベースのバージョン管理サービスが2020年6月にMercurial のサポートを終了すると発表し、新しいプロジェクトの1％のみがそれを使用していると説明した。

Mercurial サーバとリポジトリ管理 

 RhodeCode Inc. によるRhodeCode
 Kallithea(RhodeCodeのGPLv3フォーク)
 Fog Creek Software によるKiln
 Phacility によるPhabricator

ソースコードホスティング 
参照: OSSホスティングサービスの比較、分散バージョン管理Git/Mercurial/Bazaar徹底比較

以下のウェブサイトは、Mercurial リポジトリの無料のソースコードホスティングを提供している。

 アトラシアンによるBitbucket(2020年2月から非推奨、2020年6月1日から廃止されるMercurial リポジトリのサポート)
 SourceForge.net
 フリーソフトウェア財団によるSavannah
 Puszcza(Savannah姉妹サイト、ウクライナでホスト)
 OSDN
 Perforce
 Mozdev
 TuxFamily
 FusionForge
 その他

Mercurial を使用したオープンソースプロジェクト 
Mercurial 分散RCSを使用するいくつかのプロジェクト

 Adium
 GNU Health
 GNU Multi-Precision Library
 GNU Octave
 IcedTea
 LEMON
 LiquidFeedback
 Mozilla
 Nginx
 OpenJDK
 Orthanc
 Pidgin
 RhodeCode
 Roundup
 SDL
 Tryton
 WinDirStat
 wmii
 XEmacs
 Xine

関連項目 
バージョン管理システムの一覧

脚注

出典

外部リンク 

 
 Official Mercurial Project Wiki
 Mercurial 日本語チュートリアル
 分散バージョン管理Git/Mercurial/Bazaar徹底比較
 Mercurialではじめる分散構成管理
 Mercurial の利用
 Mercurialでバージョン管理

バージョン管理システム
Python
オープンソースソフトウェア
2005年のソフトウェア