バージョン管理史 SCCS→Git 1972-2026(バージョン管理史)
Version Control System 50年史 1972-2026。SCCS Source Code Control System (1972 Marc Rochkind Bell Labs・初VCS・delta storage)・RCS Revision Control System (1982 Walter Tichy Purdue・file-level・$Header$ keyword・GNU FSF移管)・CVS Concurrent Versions System (1986 Dick Grune・1990 Brian Berliner re-implement・RCS extension・FSF・SourceForge default 2000s)・Subversion SVN (2000 CollabNet→Apache 2009・CVS後継・Atomic Commit・Property+Branch=Cheap Copy)・BitKeeper (1998 Larry McVoy・Distributed初・Linux Kernel 2002-2005無償ライセンス→Tridgell リバースエンジニアリング騒動 2005年4月→Linux Kernel廃止)・Monotone (2003 Distributed・Cryptographic Identity)・darcs (2003 Haskell・Patch Theory)・Bazaar Bzr (2005 Canonical→2017年Ubuntu保留→Breezy Fork 2019)・Mercurial Hg (2005年4月 Matt Mackall Python・Git同月誕生・Distributed・現Facebook Sapling Fork内部利用 2022)・Git (2005年4月7日 Linus Torvalds 10日間開発・BitKeeper代替・Distributed+Content-Addressable+SHA-1→SHA-256 2020・Linux Kernel開発用)・GitHub (2008年4月 Tom Preston-Werner+Chris Wanstrath+PJ Hyett+Scott Chacon・Microsoft 2018年6月$7.5B買収・1.5億Dev 2024)・GitLab (2011 Sid Sijbrandij・FOSS+Hosted・$10B Public 2021)・Bitbucket (2008 Atlassian)・Codeberg+Forgejo Federated FOSS (2024 Gitea Fork EU)・Sourcehut (Drew DeVault FOSS)・Pijul (2014 Patch-based)・Fossil SQLite-based (2007 Richard Hipp)・Sapling (2022 Meta Mercurial Fork OSS)・Jujutsu jj (2020 Google・Git互換+Patch Stack)・Pixi+Pijul・¥0 OSS-¥¥¥¥/月 Hosted 2026 Git+GitHub圧倒的勝利。
概要
1972年にBell Labsで開発された SCCS(Source Code Control System)が、最初の差分ベースのバージョン管理システム(VCS)として登場した。以降、RCS、CVS、Subversion、BitKeeper、Monotone、darcs、Bazaar、Mercurial、Git など、中央集権型・分散型を問わず多様な VCS が誕生し、ソフトウェア開発の基盤を形成してきた。
2025‑2026 年時点では、Git が圧倒的シェアを占める一方、Meta の Sapling、Google の Jujutsu、Federated FOSS の Forgejo など、新しい分散型 VCS が注目されている。
主な特徴・仕組み
| VCS | 開発年 | 主要特徴 | ストレージ方式 | コミット単位 | ブランチモデル |
|---|---|---|---|---|---|
| SCCS | 1972 | 差分ベース、ファイル単位 | 変更差分のみ | ファイル | シングル |
| RCS | 1982 | ファイル単位、$Header$ 置換 | 差分 | ファイル | シングル |
| CVS | 1986 | RCS 拡張、タグ付け | 差分 | ファイル | シングル |
| Subversion | 2000 | 原子コミット、属性 | 差分 | ファイル | シングル |
| BitKeeper | 1998 | 分散、リポジトリ共有 | 差分 | ファイル | シングル |
| Monotone | 2003 | 暗号署名、分散 | 差分 | ファイル | シングル |
| darcs | 2003 | パッチ理論、分散 | パッチ | ファイル | シングル |
| Bazaar | 2005 | 分散、直感的操作 | 差分 | ファイル | シングル |
| Mercurial | 2005 | 分散、Python 実装 | 差分 | ファイル | シングル |
| Git | 2005 | 分散、SHA‑1/256、コピーオンライト | コンテンツアドレス | ファイル | 低コストコピー |
| Sapling | 2022 | Git 互換、Python ベース | コンテンツアドレス | ファイル | 低コストコピー |
| Jujutsu | 2020 | Git 互換、パッチスタック | コンテンツアドレス | ファイル | 低コストコピー |
- 差分ベース(SCCS, RCS, CVS, Subversion)は、ファイルの変更箇所のみを保存し、リポジトリサイズを抑えるが、履歴の再構築が遅い。
- 分散型(Git, Mercurial, Jujutsu)は、リポジトリ全体をローカルに保持し、オフライン作業が可能。Git はコンテンツアドレス化により重複データを自動削減し、SHA‑256 への移行でセキュリティを強化。
- 低コストコピー(Git, Mercurial, Jujutsu)は、ブランチ作成時にファイルをコピーせず、参照のみで高速。
具体例・対応製品 (テーブル必須)
| VCS | 代表的なホスティングサービス | 主要ユーザー | 主要統合ツール | 代表的なプラグイン |
|---|---|---|---|---|
| Git | GitHub, GitLab, Bitbucket, Codeberg, Forgejo | Linux Kernel, Android, Chrome OS | GitHub Actions, GitLab CI, Jenkins | Git LFS, Git Submodule |
| Mercurial | Bitbucket (旧), SourceForge, GitHub (via hg-git) | Mozilla Firefox, OpenOffice | HgFlow, TortoiseHg | hgsubversion |
| Subversion | Apache Subversion, VisualSVN Server | OpenOffice, Eclipse | Subversion Merge, TortoiseSVN | svn+ssh |
| Bazaar | Launchpad, Canonical Cloud | Ubuntu, OpenStack | BzrFast, BzrGit | bzr-remote |
| GitLab | GitLab.com, GitLab Self‑Hosted | GitLab CE/EE, GitLab Runner | GitLab CI, GitLab Pages | GitLab Runner, GitLab Container Registry |
- GitHub は 2024 年時点で 1.5 億開発者を抱え、コミット数は 10 億を突破。
- GitLab は 2021 年に 10 億円の投資を受け、クラウドサービスとオンプレミスを統合。
- Forgejo は 2024 年に EU のデータ保護規制に対応し、Federated FOSS の代表格に。
選び方・注意点
-
プロジェクト規模
- 小規模・単一開発者向け:SCCS, RCS, CVS で十分。
- 中規模・チーム開発:Git, Mercurial, Subversion。
- 大規模・複数組織:Git(リポジトリ複製)または Jujutsu(パッチスタック)を検討。
-
分散 vs 中央集権
- 分散型はオフライン作業が可能だが、リポジトリの複製が増える。
- 中央集権型は管理が容易だが、ネットワーク障害時に作業が制限される。
-
ブランチ戦略
- Git の「低コストコピー」方式は頻繁なブランチ作成に適し、CI/CD でのマージが容易。
- Subversion の「ブランチはディレクトリコピー」方式は、リポジトリサイズが大きくなるリスクがある。
-
セキュリティ
- Git の SHA‑256 への移行は 2020 年以降必須。
- BitKeeper のライセンス問題は 2005 年に解消され、オープンソース化された。
-
ツールチェーンとの互換性
- IDE(VSCode, IntelliJ)や CI/CD(GitHub Actions, GitLab CI)との統合が重要。
- Git の拡張機能(Git LFS, Git Submodule)が豊富で、バイナリ管理が容易。
関連用語との違い
| 用語 | 本質的な違い | 代表的なユースケース |
|---|---|---|
| VCS vs SCM | VCS はソースコードの変更履歴のみを管理。SCM はソフトウェア構成管理全般(ビルド、テスト、リリース)を含む。 | VCS は Git, SCM は GitLab CI/CD |
| Git vs Mercurial | Git は高速で低コストコピー、Mercurial は Python 実装で直感的操作。 | Git は大規模プロジェクト、Mercurial は中規模プロジェクト |
| Centralized vs Distributed | Centralized は単一リポジトリ、Distributed はローカルコピー。 | Centralized は Subversion、Distributed は Git |
| LFS vs Git Submodule | LFS は大容量ファイルを外部ストレージに保存、Submodule は別リポジトリを参照。 | LFS はゲームアセット、Submodule は共通ライブラリ |
よくある質問 (FAQ)
-
Git と Mercurial のどちらを選べばよいですか?
Git はコミュニティ規模が大きく、CI/CD 連携が豊富。Mercurial は Python ベースで直感的。プロジェクトの規模とチームの慣れを考慮。 -
Subversion から Git への移行は簡単ですか?
svn2gitなどのツールで履歴を保持したまま移行可能。ただし、ブランチ構造が異なるため、マージ戦略を再設計する必要がある。 -
Git の SHA‑1 から SHA‑256 への移行はどうすればよいですか?
Git 2.29 以降でgit hash-object --algorithm=sha256を使用し、リポジトリを再構築。既存のコミットは再計算が必要。
まとめ
1972 年の SCCS から 2026 年の Git までの 50 年間で、バージョン管理は差分ベースから分散型へ、そしてコンテンツアドレス化へと進化した。
- SCCS, RCS, CVS は差分ベースで小規模に適合。
- Subversion は中央集権型で中規模に最適。
- Git, Mercurial, Jujutsu は分散型で大規模・高速開発に適合。
- Sapling は Git 互換で Meta が内部利用を拡大。
- Forgejo, Codeberg など Federated FOSS はプライバシー重視の開発者に選択肢を提供。
2025‑2026 年の動向としては、Git の圧倒的シェアを維持しつつ、分散型 VCS の機能拡張(パッチスタック、低コストコピーの改良)が進行中。セキュリティ面では SHA‑256 への移行が必須化し、データ保護規制に対応した Federated サービスが台頭している。
開発者はプロジェクトの規模・チーム構成・セキュリティ要件を総合的に評価し、適切な VCS を選択することが成功の鍵となる。