📝

バージョン管理システムの基本概念を学習したノート

に公開

はじめに

この記事は、GitHub や Azure DevOps に代表されるバージョン管理システム(VCS: Version Control System)について学習した際のノートをまとめたものです。個人用の学習記録として、実務や開発の現場でバージョン管理がどのように使われているか、そもそもなぜ必要なのか、どのような仕組みになっているのか、という疑問を整理した内容です。

バージョン管理とは

まず、「バージョン管理」とは何か。

バージョン管理とは、ファイルの変更履歴を記録し、過去の状態に戻したり、変更の内容を追跡したりできるようにするための仕組み。

主にソースコードの管理に使われますが、ドキュメントや設定ファイルなど、変更履歴を追いたいあらゆるファイルに対して使うことができます。

なぜ必要か?

バージョン管理が必要とされる理由は以下のとおりです。

  1. 変更履歴の記録: いつ、誰が、どこを変更したかを追跡可能。
  2. 過去の状態への復元: バグが出た時や誤って変更した場合に、特定の時点に戻せる。
  3. 共同作業の効率化: 複数人で同時に開発しても、変更をマージして統合可能。
  4. 試行錯誤を記録: 新機能を試すために分岐(ブランチ)し、うまくいけば統合、ダメなら破棄できる。

バージョン管理システムの種類

  1. ローカル型
    古い形式のバージョン管理システム。ファイルごとに履歴を管理する。
    例: RCS(Revision Control System)
    単独作業向け。チーム開発には不向き。
  2. 中央集権型(Centralized VCS)
    中央にサーバー(リポジトリ)があり、すべての変更がそこに集約される。
    例: Subversion(SVN)
    メリット:管理がシンプル、最新版の把握が容易
    デメリット:サーバーが落ちると作業不能。ローカルでは履歴を見られない。
  3. 分散型(Distributed VCS)
    ローカルに完全なリポジトリのコピーを保持。オフラインでも作業・履歴の閲覧が可能。
    例: Git、Mercurial
    メリット:オフラインでの作業が可能、柔軟なブランチ運用
    デメリット:学習コストが若干高い

Gitの基本用語と概念整理

用語 説明
リポジトリ バージョン管理の対象(=プロジェクト)単位の入れ物
コミット 変更の記録単位。変更内容+メッセージ+タイムスタンプなどが含まれる
ブランチ 変更履歴の分岐。新機能や修正を試すのに便利
マージ 他のブランチの変更を取り込む操作
クローン リモートリポジトリの完全コピーをローカルに作成すること
プル リモートから最新の変更を取得すること
プッシュ ローカルの変更をリモートに反映すること

GitHubやAzure DevOpsについて
GitHub や Azure DevOps は、Git をベースとしたホスティングサービスです。学習中に気づいたのは、Git(ツール)と GitHub(サービス)は別物だということです。

GitHub = Gitの操作を Web UI やAPIを通して管理できるサービス

Azure DevOps = Git だけでなく CI/CD、Issue 管理なども統合された開発プラットフォーム

どちらも共通して、リモートリポジトリのホスティングとコラボレーション機能(プルリクエスト、レビュー、Issue など)を提供しています。

よく出てくる操作の理解メモ
git init: ローカルに新しいリポジトリを作成
git clone: 既存のリポジトリを複製
git add: ファイルを「次のコミット対象」に追加
git commit: スナップショットを記録
git push: リモートに変更を送信
git pull: リモートから変更を取得+統合
git checkout: 過去の履歴や他のブランチに移動
git merge: 変更を統合(衝突が起きることも)

学習してみて感じたこと
「履歴を扱う」という考え方が新鮮だった。
普段無意識に保存していた変更を、意識的に記録・共有・管理することの重要性を理解した。
ブランチやマージの仕組みは、はじめは難しいが、慣れると実験的な開発がすごくしやすくなる。
Git の中で「状態(ステージ)」の概念があるのが少し混乱しやすいが、変更前・ステージング・コミット後の三段階と考えると納得できた。

おわりに

バージョン管理は、単なるツールというより、開発プロセスの中核にある考え方だと感じました。今後は、Git のコマンドだけでなく、**チームで使うための運用ルールやブランチ戦略(例: Git Flow)**なども学んでいきたいです。

※ 本記事は個人の学習記録であり、運用方針やベストプラクティスを示すものではありません。より詳しい内容は公式ドキュメントや書籍を参照してください。

Discussion