ソースコードなどの変更履歴を記録・管理する仕組み。
バージョン管理システム(VCS)とは、ソースコードなどの変更履歴を記録し、いつでも過去の状態に戻せる・複数人で共同編集できる仕組みです。「いつ・誰が・何を変えたか」をすべて残します。
身近な例で考えると、レポートを書くときの「セーブと巻き戻し」に似ています。「最終版」「最終版2」「本当に最終版」とファイルを増やして混乱した経験はないでしょうか。バージョン管理を使えば、1つのファイルのまま全変更が記録され、好きな時点へ正確に戻せます。
上の図解①のように、変更は「コミット」という単位で時系列に積み重なります。あとから「v2 の状態に戻したい」と思えば、その地点を選ぶだけで復元できます。これがバージョン管理の最大の価値です。
バージョン管理システムは、履歴をどこに置くかによって大きく2つのタイプに分かれます。
・集中型:1つの中央サーバが履歴をまとめて管理する方式(例: SVN)。各開発者は作業用のコピーだけを手元に持つ
・分散型:各自が完全な履歴の複製を手元に持つ方式(例: Git)。オフラインでも作業でき、サーバ障害に強い
| 項目 | 集中型 | 分散型 |
|---|---|---|
| 履歴の場所 | 中央サーバのみ | 各自が完全な複製を持つ |
| オフライン作業 | 基本できない | コミット可能 |
| 代表例 | Subversion(SVN) | Git、Mercurial |
図解②のように、集中型は「1冊の台帳をみんなで見に行く」イメージ、分散型は「全員が同じ台帳のコピーを各自持つ」イメージです。分散型は、サーバが止まっても各自の複製から復元でき、ネットワークがなくても作業を進められる点が大きな利点です。現在は分散型の Git が主流になっています。
実際に広く使われている代表的なバージョン管理システムには、次のものがあります。
・Git:分散型。現在もっとも広く使われている。GitHub などのサービスと組み合わせて共同開発に使われる
・Subversion(SVN):集中型の代表。中央サーバで履歴を一元管理する
・Mercurial:Git と同じく分散型のシステム
名前が似ているため混同しやすいですが、Git と Subversion はタイプ(分散型/集中型)が異なる点をおさえておきましょう。Git が分散型、Subversion が集中型です。
どのシステムを使う場合も、目的は同じ「変更履歴を記録し、安全に過去へ戻せるようにし、複数人での共同作業を支える」ことです。文書編集の取り消し(Undo)を、チーム全体・プロジェクト全体に広げた仕組みだと考えると分かりやすいでしょう。