バージョン管理とは?ソースコードの変更履歴を管理するGitの基本

システム開発・テクノロジー
バージョン管理とは?ざっくりと3行で
  • ファイルの変更履歴を記録・追跡することで「いつ・誰が・何を・なぜ変えたか」を管理し、過去の状態に戻したり複数人での並行開発を可能にする仕組みのこと
  • ソフトウェア開発ではGitが事実上の世界標準で、GitHubやGitLabなどのホスティングサービスと組み合わせてチーム開発・コードレビュー・CI/CDパイプラインの基盤として使われる
  • コードだけでなく、ドキュメント・設定ファイル・インフラのコード(Infrastructure as Code)なども管理対象として、変更を追跡・レビュー・ロールバックできる状態にすることが現代のIT運用の標準だ

【深掘り】これだけ知ってればOK!

バージョン管理が必要な理由を実例で理解しよう。バージョン管理なしでファイルを編集すると、「どの変更が問題を引き起こしたか分からない」「以前の動いていた状態に戻せない」「複数人が同じファイルを編集すると上書きが起きる」という問題が発生する。バージョン管理システムを使うとコミット(変更のスナップショット)が積み重なった履歴が残り、いつでも任意の状態に戻せる。

Gitの主要な概念を整理しよう。リポジトリ(Repository):変更履歴を格納するデータベース。コミット(Commit):変更のスナップショットとメッセージの記録。ブランチ(Branch):メインの開発ラインから分岐した独立した作業環境。マージ(Merge):ブランチの変更をメインラインに統合する。プルリクエスト(PR):ブランチのマージをチームに提案してコードレビューを依頼する。

Gitと旧来のバージョン管理システムの違いを理解しよう。分散型のGitはリポジトリの完全なコピーをローカルに持つため、オフラインでも作業できる。一方、集中型のSVN(Subversion)・CVSはサーバーにのみリポジトリがあるためネットワーク接続が必要だ。Gitのブランチ作成が軽量・高速なため、ブランチを多用した並行開発(Git Flow・GitHub Flow)がしやすいという設計上の利点もある。

Gitの基本コマンドを覚えておこう。git init:リポジトリの初期化。git clone:リモートリポジトリのコピー取得。git add:変更をステージングエリアに追加。git commit:ステージングの変更をコミット。git push:ローカルのコミットをリモートに送信。git pull:リモートの変更をローカルに取得。git branch:ブランチの作成・一覧表示。git merge:ブランチの統合。git log:コミット履歴の表示。

バージョン管理はコードだけでなく幅広い用途に活用できる。ドキュメント管理:技術仕様書・手順書の変更履歴追跡。設定ファイル管理:サーバーの設定ファイル(/etc以下)をGitで管理してetckeeper等で追跡。Infrastructure as Code:TerraformやAnsibleの設定ファイルをGitで管理してインフラの変更をコードと同様にレビュー・追跡する。

よくある誤解

バージョン管理はエンジニアだけが使うものだと思っている

デザイナー(Figmaのバージョン管理・デザインファイルのGit管理)・ライター(文書のGit管理)・データサイエンティスト(Jupyterノートブックのバージョン管理)・インフラ担当者(設定ファイルの管理)など、エンジニア以外の職種でも広く活用できる。

GitとGitHubは同じものだと思っている

GitはLinus Torvalds(Linuxの作者)が開発したバージョン管理システム(ソフトウェア)だ。GitHubはGitリポジトリをホスティングするWebサービス(Microsoft傘下)で、GitLab・Bitbucketなど同様のサービスが他にもある。「Gitを使ってGitHubで管理する」という関係だ。

会話での使われ方

ITKAGYO運営者デプロイ太郎のアイコン画像

このバグいつ入ったんでしょう。git log –oneline で変更履歴を確認して、git bisect でどのコミットで問題が起きたか二分探索してみましょう。

シニアエンジニアがバグの原因調査でGitの強力な機能を活用してコミット履歴から問題箇所を特定しようとしている場面。

ITKAGYO運営者デプロイ太郎のアイコン画像

本番への変更は全てPull Requestを経由してレビューを受けてからマージしてください。直接mainブランチにpushするのは禁止です。

テックリードがチームの開発ルールとしてコードレビューの徹底を説明している場面。

ITKAGYO運営者デプロイ太郎のアイコン画像

TerraformのコードもGitで管理しましょう。インフラの変更もコードと同様にPRでレビューできれば変更の安全性が上がります。

インフラエンジニアがInfrastructure as CodeのコードをGitで管理することを提案している場面。

【まとめ】3つのポイント

  • 変更履歴を記録して過去に戻れる・複数人で並行開発できる基盤:コミットの積み重ねで「いつ・誰が・何を・なぜ変えたか」が追跡でき、問題のある変更を特定して元に戻せる能力がソフトウェア開発の安全性と品質を支える
  • GItのブランチ・PR・コードレビューがチーム開発の標準フロー:ブランチで機能を独立して開発してPullRequestでレビューを経てからマージするという開発フローが品質を保ちながら複数人が並行して開発できる現代の標準的なアプローチだ
  • コードだけでなく設定・ドキュメント・IaCも管理対象に含める:インフラのコード・サーバー設定・技術ドキュメントもGitで管理することで変更の追跡・レビュー・ロールバックという恩恵をIT全体に広げられる

よくある質問

Q
GitとSVN(Subversion)はどちらを選べばいいですか?
A

新規プロジェクトであれば迷わずGitを選んでください。Gitは分散型で高速なブランチ・大規模コミュニティ・GitHub/GitLabとのエコシステムという圧倒的なアドバンテージがあります。SVNは既存の大規模プロジェクトでまだ使われていることがありますが、新規採用は少数です。

Q
Gitの入門として最初に覚えるべきコマンドは何ですか?
A

最初の5つは「git clone・git add・git commit・git push・git pull」です。この5コマンドだけで基本的な個人開発サイクルは回せます。次に「git branch・git checkout・git merge」でブランチ作業が、「git status・git log・git diff」で状態確認ができます。

Q
コミットメッセージはどう書けばいいですか?
A

「なぜその変更をしたか」が分かるメッセージを書くことが重要です。「fix bug」ではなく「fix: 在庫が0の商品でも購入できてしまうバグを修正」のように具体的に書きます。Conventional Commits(fix:・feat:・docs:などのプレフィックス)というルールを使うとCHANGELOGの自動生成などのツールと連携できます。

Q
GitHubとGitLabはどう違いますか?
A

GitHubはMicrosoft傘下で世界最大のコード共有プラットフォームです。オープンソースのホスティングに強く、GitHub ActionsでCI/CDも使えます。GitLabはCI/CD機能が充実しており、セルフホスト(自社サーバーへのインストール)ができる点が特徴で、プライバシーを重視する企業で多く使われます。

この用語と一緒に知っておきたい用語

用語 この記事との関連
GitHub GitHubは関連分野でよく登場する重要キーワードです。Gitリポジトリをクラウドでホスティングしプルリクエスト・コードレビュー・CI/CD(GitHub Actions)・プロジェクト管理を統合した世界最大の開発コラボレーションプラットフォームだ
コミット コミットは関連分野でよく登場する重要キーワードです。コミットというのは、プログラムの変更内容をここまでの作業としてまとめて記録する、バージョン管理の基本操作のことだよ。
サーバー サーバーを押さえると本記事の理解がさらに深まります。ネットワークを通じて情報やサービスを提供する側のコンピューターのこと。レストランで料理を運んでくれる給仕係(server)をイメージするとわかりやすいよ
CI/CD CI/CDとの関係を知ると全体像がつかみやすくなります。Continuous Integration(継続的インテグレーション)と Continuous Delivery/Deployment(継続的デリバリー/デプロイメント)の略。コードのコミットをトリガーに自動でビルド・テスト・デプロイを実行するパイプラインだ
アイコン アイコンを押さえると本記事の理解がさらに深まります。アプリやファイル、操作ボタンなどをひと目でわかる小さな絵で表したもの、それがアイコンだ

【出典】参考URL

https://git-scm.com/book/ja/v2 :Pro Git(Git公式ドキュメントの日本語版)
https://docs.github.com/ja :GitHub公式ドキュメント(日本語)
https://learngitbranching.js.org/?locale=ja :インタラクティブなGit学習サイト

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!