git以外のバージョン管理ツール4選

## 読み飛ばしてください
おはようございます、しなもんです

**Git、圧倒的に人気ですよね。**

バージョン管理は現在のソフトウェア開発において必要不可欠なものとなっています。
その中でも、Git及びGithubは**ほとんどのエンジニアが使うツール**だと思います。

ですが、実はほかにも**多くの選択肢が存在する**のです。

この記事では、git以外のバージョン管理ツールについて探っていきます。

## Subversion (SVN)

オープンソースな中央集中型のバージョン管理システムです。
正式名称が`Apache Subversion`であることから分かるように、
主にApache関係の開発で使用されています。（開発は別会社だったらしいが移管済み）

### 特徴と利点
**中央リポジトリモデル**を採用しています。

Gitのような分散型とは違い、**サーバー上の保管領域にあるファイルを更新していく**ことで作業を行います。
作業者はリポジトリを全てローカルに保存する必要はありません。

必要最低限のファイルやディレクトリのみを取得できるので、
複数のプロジェクトを並列で作業する場合に役立ちます。
（**部分的なチェックアウトが可能**）

サーバ上に一元管理されたリポジトリに対して作業を行います。
そのため、いつ誰がどのような変更を行ったかを細かく記録でき、復元性が高いことも特徴です。
ファイルの整合性を保ちやすく、**チームでの開発に適している**ことが特徴です。

コマンドライン操作が中心であるもののGUIクライアントも豊富に用意されています。

### 使用例
大規模なオープンソースプロジェクト（Apache Software Foundationなど）で使用されています。

### 特に適している開発シナリオや業界
- 中央集中型の管理を好む大規模組織
- 厳格なアクセス制御が必要なプロジェクト
- 非常に大きなバイナリファイルを扱う業界（映像制作、ゲーム開発など）

### 開発状況
- 最新バージョン: 1.14.x（2023年末）
- Apache Software Foundationによる継続的な開発と保守
- gitへの移行ツールの改善と、既存SVNユーザーのサポート強化

https://subversion.apache.org

## Mercurial

Mercurialは、gitと同じ**分散型バージョン管理システム**です。
Gitと同じ目的で、同じ時期に開発されました。
主にPythonで実装されていますが、後述するように現在はRustに書き換えが進んでいます。

### 特徴と利点
Gitと比べて**シンプルで分かりやすいコマンド体系**が特徴です。
そのため、初心者でも比較的容易に習得できます。

また、**軽量な設計で動作が速い**ため、大規模なリポジトリでも高速に処理できます。

さらに、**豊富な拡張機能**が用意されており、クライアント機能の追加やワークフローの自動化、特定のタスクをサポートするツールなどがあります。
様々な拡張機能があるため、ユーザーに合わせた幅広いカスタマイズが可能です。

分散型システムであるため、各ユーザーがローカルにリポジトリ全体を保持することが特徴です。
ブランチの扱いもGitと変わりません。

ただし、日本語の資料は正直かなり少ないです。

### 使用例
FacebookやMozillaでの開発で使用されています。
Facebookについては、Rustを利用して特別に設計したMercurialを使用しています。

### 特に適している開発シナリオや業界
- Pythonベースのプロジェクト
- シンプルなワークフローを好む小中規模チーム
- 科学計算や研究分野のプロジェクト

### 開発状況
- 最新バージョン: 6.8.x（2024年夏時点）
- パフォーマンス改善と大規模リポジトリのサポート強化
- Rust言語による一部コンポーネントの書き換えプロジェクト進行中

https://www.mercurial-scm.org

## Perforce
Perforce Software社によって開発されている中央サーバ型バージョン管理システムです。
大規模プロジェクトや大容量ファイルの管理に適していて、基本的にゲーム開発で使用されています。
商用のバージョン管理システムです。

### 特徴と利点
**中央サーバ型**アーキテクチャを採用し、大規模なリポジトリでも効率的に処理しています。

特に大きな特徴が、**バイナリファイルの管理**に優れている点です。
画像や動画などの大きなバイナリファイルを扱うことができるため、
ゲーム開発や映像制作などの大量のデータ扱うプロジェクトに適しているのです。

**ゲームエンジンが標準対応していることがある**ことも、業界で広く使用されている理由の一つです。

また、複雑なブランチ構造にも柔軟に対応できる**高度なブランチ機能**があります。

**細かいアクセス制御**ができることも特徴です。
ファイルやディレクトリレベルで詳細なアクセス制御が可能で、チームメンバーの役割や権限に応じてアクセス権を設定できます。
機密性の高いデータの保護に役立ちます。

Gitとは、バイナリファイルの管理やデータの整合性、
セキュリティを重視している点で異なります。

### 企業での採用例
Electronic Arts、NVIDIA、Samsungなどの大手企業で採用されています。
中には[935TBのリポジトリでの使用例](https://www.slideshare.net/slideshow/the-rise-of-the-monorepo-at-nvidia/60790238)もあるようです。

### 特に適している開発シナリオや業界
- 大規模なゲーム開発プロジェクト
- ハードウェア設計や組み込みシステム開発
- 複数の開発言語やツールを使用する複合的なプロジェクト

### 開発状況
- クラウドベースのソリューション「Helix Core Cloud」の提供開始
- AI/ML を活用した開発支援ツールの統合
- DevOps パイプラインとの連携強化

https://www.perforce.com/ja

## Fossil
分散型バージョン管理システムであり、バグトラッキングやウィキサービス、ブログ機能が組み込まれたオールインワンのシステムです。
コンテンツはSQLiteで管理されています。

### 特徴と利点
Fossilは、**プロジェクト全体を単一のファイル (.fossil) で管理**します。
ファイル履歴、ブランチ、設定情報などを全てこのファイルに格納するため、プロジェクトごと簡単に共有したり、バックアップしたりすることができます。
そのため、大規模なプロジェクトには不向きです。

また、ブラウザベースのWeb界面を備えていて、
コマンドラインツールを使用せずにプロジェクトを管理することができます。
リポジトリの閲覧、コミット、ブランチ操作、マージなど、**基本的な操作を全てブラウザで行う**ことができるのです。

Fossilリポジトリの無料ホスティングサービスも提供されています。

Fossil自体のコンポーネントがSQLiteであることもあり、主に**SQLiteプロジェクトのバージョン管理**に使用されているようです。

### 特に適している開発シナリオや業界
- 小規模なオープンソースプロジェクト
- 統合的なプロジェクト管理を必要とする個人開発者やスタートアップ
- 教育機関でのプロジェクト管理（シンプルさと統合機能が魅力）

### 最新のトレンドと開発状況
- 最新バージョン: 2.x（2024年夏時点）
- WebインターフェースのモダナイゼーションとUX改善
- セキュリティ機能の強化（例：2段階認証の導入）

https://www.fossil-scm.org/home/doc/trunk/www/index.wiki

## まとめ

git以外のバージョン管理ツールについてまとめてみました。
今はgitの人気が圧倒的ですが、プロジェクトの規模や要件によって最適なツールは異なります。
一度ほかのツールも調べてみるのも良いと思いました。

※最新の情報や詳細については、各ツールの公式サイトをご確認ください。