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」という名前がどのように選ばれたか説明した。

## 設計
設計目標は、

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

である。またMercurialは完全なWebインターフェースを含んでいる。
原著作者はOlivia (Mattは旧名) Mackall で、2016年にMercurial開発から引退した。

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％のみがそれを使用していると説明した。

Mozillaは長年Firefoxなどの開発にMercurialとGitを利用していたが、2023年にGitへ一本化することを発表した。

## Mercurial サーバと[[リポジトリ]]管理

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

### ソースコードホスティング

以下のウェブサイトは、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
* Nginx
* OpenJDK
* Orthanc
* Pidgin
* RhodeCode
* Roundup
* SDL
* Tryton
* WinDirStat
* wmii
* XEmacs
* Xine

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

## 脚注

## 出典

## 外部リンク

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