FE EXAM

バージョン管理システム(変更履歴の記録)

ソースコードなどの変更履歴を記録・管理する仕組み。

DIAGRAM
集中型分散型

① 変更がコミットとして時系列に記録され、過去に戻せる

過去最新 →(時系列)v1新規作成コミットv2機能追加コミットv3バグ修正コミットv4画面改善コミットいつでも過去のバージョン(v2)に戻せる

② 集中型と分散型の2タイプ

集中型履歴は中央サーバだけが持つ(例: SVN)中央サーバ全履歴開発者A作業コピーのみ開発者B作業コピーのみ開発者C作業コピーのみ分散型各自が完全な履歴の複製を持つ(例: Git)リモート共有用(同期相手)開発者A全履歴の複製オフラインOK開発者B全履歴の複製オフラインOK開発者C全履歴の複製オフラインOK
解説

📌
バージョン管理システムとは

v1v2v3v4変更を時系列に記録 → 過去へ戻せる各バージョンが残るので、いつでも復元できる

バージョン管理システム(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)を、チーム全体・プロジェクト全体に広げた仕組みだと考えると分かりやすいでしょう。

練習問題

🎯
基本情報技術者 練習問題

Q1.バージョン管理システムの説明として最も適切なものはどれか。
A.ソースコードなどの変更履歴を記録・管理する仕組み
B.プログラムを機械語に翻訳する仕組み
C.プログラムのバグを取り除く作業を支援する仕組み
D.ビルドとテストを自動実行する仕組み
Q2.集中型と分散型のバージョン管理システムの違いとして正しいものはどれか。
A.集中型は1つの中央サーバで履歴を管理し、分散型は各自が完全な履歴の複製を持つ
B.集中型は各自が完全な履歴の複製を持ち、分散型は中央サーバだけが履歴を持つ
C.集中型も分散型もまったく同じ仕組みである
D.分散型は履歴を一切保存できない
Q3.代表的なバージョン管理システムに該当しないものはどれか。
A.Git
B.Subversion(SVN)
C.Mercurial
D.Eclipse

関連コンテンツ