📖 読了目安 約6分
この記事の目次

バージョン管理の基礎

ソフトウェア開発で必須の「バージョン管理」の基本的な考え方と目的を理解しましょう。

バージョン管理とは

バージョン管理とは、ファイルの変更履歴を記録し、管理する仕組みです。

バージョン管理がない場合の問題

バージョン管理がない状態で複数人が開発すると、こんな問題が起きます。

プロジェクト/
├── main_最新.java
├── main_最新_修正版.java
├── main_最新_修正版_田中確認済.java
├── main_最新_修正版_田中確認済_佐藤修正.java
├── main_バックアップ_0515.java
└── main_本番用_最終版_本当の最終版.java

よくある問題

  • どれが最新か分からない
  • 誰が何を変更したか分からない
  • 過去の状態に戻せない
  • 複数人の変更が上書きされる
  • 「動いていたのに動かなくなった」原因が分からない

バージョン管理があると

バージョン管理システムを使うと、これらの問題が解決します。

main.java(常に1つ)
    ↓
履歴が自動で記録される
    ├── 変更1: 「ログイン機能追加」田中 2024/01/15
    ├── 変更2: 「バグ修正」佐藤 2024/01/16
    ├── 変更3: 「パスワード検証追加」田中 2024/01/17
    └── ...

バージョン管理の目的

1. 変更履歴の記録

いつ、誰が、何を変更したかが記録されます。

記録される情報
いつ 2024/01/15 10:30
誰が 田中太郎
何を ログイン機能を追加
どこを LoginController.java、User.java
なぜ (コミットメッセージに記載)

2. 過去の状態に戻せる

問題が起きたとき、動いていた時点の状態に戻せます

今日のバージョン → 動かない
    ↓ 戻す
昨日のバージョン → 動く!
  • 「昨日は動いていた」→ 昨日の状態に戻せる
  • 「この変更が原因だ」→ その変更前に戻せる
  • 「やっぱり前のほうがよかった」→ 元に戻せる

3. 複数人での同時作業

バージョン管理がないと、同じファイルを複数人が編集すると上書きされてしまいます。

バージョン管理なし:
田中: ファイルAを編集 → 保存
佐藤: 同じファイルAを編集 → 保存(田中の変更が消える)

バージョン管理があると、**変更を統合(マージ)**できます。

バージョン管理あり:
田中: ファイルAを編集 → 記録
佐藤: 同じファイルAを編集 → 記録
      ↓
システムが両方の変更を統合

4. ブランチによる並行開発

ブランチを使うと、メインの開発と別に作業できます。

メインの開発(本番用)─────────────────→
        │
        └── 新機能の開発(別ブランチ)──→ 完成したらメインに統合
        │
        └── バグ修正(別ブランチ)────→ 完成したらメインに統合
  • 新機能を開発中でも、本番用のバグ修正ができる
  • 試験的な変更を、本番に影響なく試せる
  • 完成したらメインに統合(マージ)

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

集中型と分散型

種類 特徴 代表例
集中型 サーバーで履歴を一元管理 SVN(Subversion)
分散型 各自のPCにも履歴がある Git

現在の主流:Git

Gitが現在のデファクトスタンダードです。

  • ほとんどの現場で使われている
  • GitHub、GitLabなどのサービスと連携
  • オープンソースプロジェクトの標準

ただし、古いプロジェクトや大企業ではSVNが使われていることもあります。


バージョン管理の基本用語

リポジトリ(Repository)

変更履歴を保存する場所です。「履歴の倉庫」と考えてください。

  • リモートリポジトリ:サーバー上のリポジトリ(チームで共有)
  • ローカルリポジトリ:自分のPC上のリポジトリ(Gitの場合)

コミット(Commit)

変更を記録することです。「セーブポイント」のようなものです。

コミット1: 「ログイン機能追加」
    ↓
コミット2: 「バグ修正」
    ↓
コミット3: 「パスワード検証追加」

コミットごとに、その時点のファイル状態が記録されます。

ブランチ(Branch)

開発の分岐です。メインとは別に作業できます。

main ──────────────────────────→
       │                    ↑
       └── feature-login ───┘(完成したら統合)

マージ(Merge)

分岐したブランチを統合することです。

プル/プッシュ(Pull/Push)

  • プル:リモートの変更を取得する(ダウンロード)
  • プッシュ:ローカルの変更を送信する(アップロード)

バージョン管理を使うメリット

開発者にとって

メリット 説明
安心して変更できる 失敗しても戻せる
変更理由が分かる なぜこう書いたか履歴を見れば分かる
複数人で作業できる 同じファイルを同時に編集しても大丈夫
問題の原因を特定できる いつの変更で壊れたか分かる

チームにとって

メリット 説明
コードレビューができる 変更内容を確認してからマージ
責任の明確化 誰が何を変更したか記録される
並行開発ができる 複数の機能を同時に開発
リリース管理ができる バージョンごとにタグをつけて管理

1年目エンジニアが意識すること

基本的な操作を覚える

  1. プル:作業前に最新を取得
  2. 変更:コードを編集
  3. コミット:変更を記録(意味のあるメッセージをつける)
  4. プッシュ:リモートに送信

コミットメッセージを丁寧に書く

悪い例:
「修正」
「fix」
「更新」

良い例:
「ログイン時のパスワード検証を追加」
「NullPointerExceptionを修正(ユーザーが未登録の場合)」
「商品一覧の表示速度を改善」

後から履歴を見たときに何をしたか分かるようにします。

こまめにコミットする

  • 1つの作業単位でコミット
  • 「動く状態」でコミット
  • 長時間コミットしないと、問題の特定が難しくなる

困ったら先輩に聞く

  • コンフリクト(競合)が起きたら
  • プッシュできないとき
  • 履歴がおかしくなったとき

バージョン管理の操作を間違えると影響が大きいので、分からないときは必ず確認しましょう。


まとめ

概念 説明
バージョン管理 ファイルの変更履歴を記録・管理する仕組み
リポジトリ 履歴を保存する場所
コミット 変更を記録すること
ブランチ 開発の分岐、並行作業ができる
マージ ブランチを統合すること
プル/プッシュ リモートとの同期

バージョン管理で得られること

  • 変更履歴の記録(いつ、誰が、何を)
  • 過去の状態に戻せる
  • 複数人での同時作業
  • ブランチによる並行開発

具体的なツールの使い方は以下を参照してください: