SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

翔泳社の本(AD)

バージョン管理ってなに? 新刊『つくって、壊して、直して学ぶ Git&GitHub 入門』から解説

 今やほとんどのエンジニアが利用しているバージョン管理ツールのGit。開発にはなくてはならないものですが、なぜバージョン管理にツールが必要なのでしょうか。その歴史とともに書籍『つくって、壊して、直して学ぶ Git&GitHub 入門』(翔泳社)から解説します。

 本記事は『つくって、壊して、直して学ぶ Git&GitHub 入門』(著者:高橋あおい)の「Chapter 1 バージョン管理って何?」から抜粋したものです。掲載にあたって編集しています。

バージョン管理って何?

どうしてバージョン管理が必要なの?

どうしてバージョン管理が必要なの?

 Gitとは「バージョン管理ツール」の一種です。ではそもそも「バージョン管理」とは何でしょうか?

 バージョン管理とは、作成したファイルやフォルダなどの成果物に対して変更を加えたときに、変更を加える前と加えた後のバージョン(版)が異なることを正しく管理する仕組みのことです。

 たとえば、こんな経験はありませんか? あなたは、テキストファイルhello_v1.txtに「おはよう」と書きました。別の人が先ほどのファイルに「今日はいい天気ですね」と付け加えました。内容が新しくなったので、先ほどのファイルにhello_v2.txtという名前をつけて保存しました。これも一種のバージョン管理と言えるでしょう。

 バージョンを管理することで次のうれしさがあります。

  • 変更前と変更後の差分が確認できる
  • 必要なときに特定のバージョンに戻せる

 1人で同じファイルを変更する場合であれば今だとGoogle DocsなどのWebサービスを使えば良いでしょう。これらのサービスは勝手にバージョン管理をしてくれます。しかし開発の現場では「2人以上で」「同じファイルを編集したい」「複数のファイルを編集したい」といった要件が出てくるでしょう。

 また、1人しかファイルを変更しないとしても、コードを書くケースを考えてみましょう。コードをローカルで書き、ローカル環境で動作確認しつつクラウド上にファイルを保存/バージョン管理したい、という要件も出てくるでしょう。

 これらの要件を満たしながら利便性を向上させるためにバージョン管理ツールは進化をとげてきました。

バージョン管理ツールの歴史

 Gitが今の仕組みに至るまで、さまざまなバージョン管理ツールが活躍してきました。筆者自身使ったことあるのはSubversion(以下、SVN)とGitのみですが、せっかくなのでバージョン管理ツールの歴史を少し振り返ってみましょう。

バージョン管理ツールの歴史

ローカルバージョン管理システムの時代

 1972年に開発されたSource Code Control System(SCCS)が初の本格的なバージョン管理システムのようです。コンピュータプログラミングの歴史からすると1972年はかなり新しく感じられるかもしれませんが、それまではパンチカードなど物理的なファイルを用いていたため、バージョン管理システムが必要なかったのではないでしょうか。

ローカルバージョン管理システムの時代

 SCSSはローカル(単一マシン)内で利用するシステムでした。今では考えられませんが、当時は計算機(ここではPersonal Computer=PC以外も含むためこのように表記します)が非常に高価だったため、大型計算機を複数人でシェアしていました。そのため、このような仕組みで問題なかったのでしょう。今だと考えられないですね。

 SCSSが単一ファイルしか対応していないこと、複数人での利用に対応していないことなどから1982年にRevision Control System(RCS)が台頭します。RCSは広く使われ、いまだにRCSを利用しているウィキエンジンもあるようです。しかし、プロジェクト全体でバージョン管理できないという課題がありました。

集中型バージョン管理システム時代

 複数開発者がLANを経由してそれぞれが所有する計算機で開発できるようになると、必然的に各個人の計算機を利用してバージョン管理したくなります。そこで登場したのが集中型のバージョン管理システムです。

集中型バージョン管理システム時代

 RCSの後、1986年にConcurrent Versions System(CVS)が登場しましたが、その後2000年ごろに登場したSVNがより広く使われました。中央サーバーにリポジトリを置き、各計算機(クライアント)がそれぞれリポジトリを操作します。筆者は新人時代にSVNを使っていましたが、リポジトリが中央に1つだけ存在するという構成は非常にわかりやすく初心者にもとっつきやすかった記憶があります。また、今でもSVNを利用している現場はあるのではないかと推測します。

 SVNは集中型であるため、すべてが中央サーバーに依存してしまうという課題がありました。インターネットがつながらなくなるとリポジトリの履歴の保存ができなくなる、同時に複数の大規模な変更を行おうとすると変更内容同士のコンフリクト(衝突)が起きてしまいコンフリクトの解消に非常に時間がかかってしまう……などは筆者自身が体験したことです。

分散管理型バージョン管理システム時代

分散管理型バージョン管理システム時代

 集中型バージョン管理システムの課題を解決するために出てきたのが分散管理型バージョン管理システムです。分散管理型バージョン管理システムは中央にマスターとなるリポジトリ(リモートリポジトリ)を置きつつ、個々のローカルにリポジトリ(ローカルリポジトリ)を分散して管理するシステムです。

 分散管理型バージョン管理システムとして最初に有名になったのは2000年に登場したBitKeeperです。Linuxカーネルプロジェクトに利用されていたBitKeeperですが、オープンソースソフトウェアではありませんでした。LinuxカーネルプロジェクトではBitKeeperの利用をつづけられなかったため、2005年にLinuxカーネルの創始者Linus TorvaldsがGitをつくりました。これがGitの誕生です。

 当時、私がいた開発現場ではSVNからGitへの移行に手こずりました。ベテランのエンジニアもGitへの移行は苦戦していたことを記憶しています。私自身もGitのリポジトリが分散している仕組みになじむのに時間がかかりました。

 このようにこれまでSVNを利用したことがあり、今からGitをはじめようとしている方はSVNとの違いに戸惑うかもしれません。使い続けるうちに手になじんでくるので安心してください。逆に、はじめてのバージョン管理システムがGitという方は比較対象がなく、すんなり受け入れられるかもしれません。

 あらためてコンピュータ技術の進歩とともにバージョン管理システムが改善されていき、今のGitが誕生したことがよくわかりますね。10年後、20年後にはまた別のバージョン管理システムが普及しているかもしれません。

つくって、壊して、直して学ぶ Git&GitHub 入門
 

Amazon  SEshop  その他

 
つくって、壊して、直して学ぶ Git&GitHub 入門
 

著者:高橋あおい
発売日:2025年11月28日(金)
定価:3,300円(本体3,000円+税10%

本書について

本書は、Gitで挫折しがちな「エラー」や「コンフリクト」をあえて引き起こして、その直し方を解説します。 手を動かしながら体験することで今度こそGitがわかる、そんな1冊です。

この記事は参考になりましたか?

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22611 2025/12/05 07:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング