CH 02 / 75第1部 導入 ── 全体像をつかむ

バージョン管理とは何か

このページで分かること

  • ファイル名で履歴を管理することの限界が分かる
  • バージョン管理システムが解決する3つの問題を説明できる
  • 「集中型」と「分散型」の違いが分かり、Git がなぜ分散型なのかを理解できる
このページの目次12 items

Git を学ぶ前に、そもそもバージョン管理(version control)とは何を解決する道具なのかを押さえます。ここが腑に落ちていないと、あとで出てくるコマンドがすべて「意味の分からない儀式」になってしまいます。

「最終版」が3つあるフォルダ#

こういうフォルダを見たことがあるはずです。

text6 lines
企画書.docx
企画書_修正.docx
企画書_修正2.docx
企画書_最終.docx
企画書_最終_田中さん指摘反映.docx
企画書_最終版_これで確定.docx

これは立派なバージョン管理です。ただし、次の3つの問題を抱えています。

問題1:何が変わったのか分からない#

企画書_修正2.docx と 企画書_最終.docx の違いを知るには、両方を開いて目で比べるしかありません。ファイルが増えるほど、この作業は不可能になります。

問題2:なぜ変えたのか残らない#

1ヶ月後に「なぜここを削ったんだっけ?」となったとき、答えはどこにもありません。判断の理由はファイル名には書けません。

問題3:複数人で同時に触れない#

2人が同時に編集すれば、片方の作業は必ず上書きされます。だからメールで送り合い、「今は私が持ってます」と宣言し合うことになります。

バージョン管理システムがやること#

バージョン管理システム(VCS: Version Control System)は、この3つを次のように解決します。

問題 バージョン管理システムの答え
何が変わったか分からない 差分(diff)を自動で計算し、変更した行だけを表示する
なぜ変えたか残らない 記録するときにメッセージを必ず添えさせる
同時に触れない それぞれが独立して作業し、あとから自動で統合する

重要なのは、ファイルを複製するのではなく、「いつ・誰が・どこを・なぜ変えたか」を記録の連なりとして持つ という発想です。ファイルそのものではなく、変更の歴史が主役になります。

手動バックアップはファイルを丸ごと複製し、バージョン管理はファイルを1つに保ったまま変更を記録として積み重ねる

手動では版ごとにファイルが増えるだけで、差分も理由も残りません。バージョン管理では、記録の1つひとつが「なぜ」(メッセージ)と「何が」(差分)を持っています。

集中型と分散型#

バージョン管理システムには、大きく2つの方式があります。

集中型(Subversion など)#

サーバーに履歴が1つだけ存在し、全員がそこに直接読み書きします。

text5 lines
                   ┌──────────┐
                   │  サーバー  │ ← 履歴はここにしかない
                   └────┬─────┘
            ┌───────────┼───────────┐
         [PC A]      [PC B]      [PC C]  ← 手元には最新の一時点だけ
  • 長所: 仕組みが単純で理解しやすい
  • 短所: サーバーが落ちる/ネットが切れると、履歴の確認すらできない

分散型(Git)#

全員が履歴の完全なコピーを手元に持ちます。

text5 lines
                   ┌──────────┐
                   │  GitHub   │ ← 共有用の置き場(ただの1コピー)
                   └────┬─────┘
            ┌───────────┼───────────┐
         [PC A]      [PC B]      [PC C]  ← それぞれが全履歴を持つ
  • 長所: オフラインでも履歴の確認・記録ができる。動作が速い。どこかが壊れても他から復元できる
  • 短所: 「手元」と「共有先」の2箇所を意識する必要があり、初学者が混乱しやすい

Git は分散型です。そして、この「2箇所ある」という性質こそが、初心者がつまずく最大の原因です。次のページで、その2箇所(Git と GitHub)の関係を整理します。

テキストファイルが得意、バイナリは苦手#

Git が差分を計算できるのは、中身がテキストのファイルです。

種類 例 Gitとの相性
テキスト .txt .md .html .css .js .py .csv ◎ 行単位で差分が取れる
バイナリ .docx .xlsx .psd .jpg .mp4 △ 差分が取れず、丸ごと保存される

Word や Excel も Git で管理できますが、「どこが変わったか」は表示できず、変更のたびにファイル全体が保存されるためリポジトリが肥大化します。設計図やソースコードのようなテキストの管理に向いた道具である、と理解しておいてください。

よくある疑問#

Q. Dropbox や Google Drive とは何が違うのですか?
A. クラウドストレージは「常に最新の状態を同期する」道具です。過去の版に戻る機能はありますが、変更の理由を記録する、複数の作業線を並行させる、変更を提案してレビューしてから取り込むといったことはできません。Git は同期の道具ではなく、履歴を設計する道具です。

Q. 一人で開発するならバージョン管理は不要では?
A. 3ヶ月前の自分は他人です。「動いていた状態に確実に戻れる」というだけでも、思い切った改造ができるようになります。共同作業は副次的な効能にすぎません。

まとめ#

  • ファイル名でのバージョン管理は「差分・理由・同時作業」の3点で破綻する
  • バージョン管理システムは、ファイルの複製ではなく変更の歴史を記録する
  • Git は分散型であり、全員が完全な履歴のコピーを手元に持つ
  • 分散型は速くて堅牢だが、「手元」と「共有先」の2箇所を意識する必要がある
  • Git はテキストファイルの管理を得意とし、バイナリファイルは差分が取れない

次のページ#

03. GitとGitHubの違い ── 初心者が最初につまずく混同を、ここで完全に解消します。