members

members

【今さら聞けない】バージョン管理システムの基礎知識

Tweet

中堅と呼ばれるあなたのための【今さら聞けない】バージョン管理システムの基礎知識

皆さん聞きなじみがあるかと思いますが、「Subversion(サブバージョン)」や「Git」などの「バージョン管理システム」についてご存じでしょうか?
「今さら人に聞けない…」「分からなかったら後で調べればいい…」と後回しにしている方向けにまとめてみました。

目次
1.そもそもバージョン管理システムって何?
2.「集中管理方式」って何?
3.「分散管理方式」って何?
4.実際使ってみての感想
5.まとめ

そもそもバージョン管理システムって何?

バージョン管理システムは以下の内容を管理するシステムのことを指します。

  • ファイルの作成日時、変更日時、変更点などの履歴を保管
    ファイルの作成者、作成日付、更新日付、更新者、変更履歴、コメントを記録できます。
    これにより、何度も変更を加えたファイルであっても、過去の状態や変更内容を確認したり、変更前の状態を復元することが出来ます。
  • 複数人でのファイル編集の管理
    ファイルの最新状態の確認や同じファイルの同じ行を変更があるかどうかの確認を実行、あった場合は自動で解消が可能です。また、ファイルへのアクセス制限の機能による同じ部分へ変更を回避することもできます。

まとめると…

バージョン管理システムとは、ファイルに対して「誰が」「いつ」「何を変更したか」というような情報を記録することで、過去のある時点の状態へ復元をおこなったり、変更内容の差分を表示できるようにするシステムのことです。

そんなバージョン管理システムは大きく2つの管理方式に分けることができます。
ひとつは「集中管理方式」、もうひとつは「分散管理方式」があります。

「集中管理方式」って何?

「集中管理方式」とは、ファイルのバージョン管理を専用のサーバ(リポジトリ)で一元管理する方式です。サーバ上にリポジトリと呼ばれるバージョン管理専用のフォルダを作成し、ユーザーのPCにクライアントソフトウェアを導入します。クライアントPCからユーザーそれぞれがサーバに接続するとファイルを利用できます。

集中管理方式では、コミット(チェックイン)するごとにバージョンが加算され、リポジトリ内のバージョンが自動的にひとつずつ増えていきます。
ここでいう「コミット」(バージョン管理ソフトによっては「チェックイン」ともいう)とは、ファイルをアップロードすることです。逆に、サーバからファイルをダウンロードすることを「チェックアウト」と呼びます。

集中管理方式ではサーバ上でファイル情報を一括管理するため、サーバにつながっていない状態ではファイルの変更情報を記録できません。
以前は、集中管理方式の「CVS」や「Apache Subversion(SVN)」が多く利用されていました。

「分散管理方式」って何?

「分散管理方式」とは、サーバ上に置いたリポジトリでファイル情報を一括管理する集中管理方式に対し、ユーザーがそれぞれPC内にリポジトリのコピーを持つ方式を分散管理方式と呼びます。
ファイルが更新されると、まずそれぞれのPC内にあるローカルリポジトリでファイルの変更を記録します。ある程度作業が進んだら、サーバ上のリモートリポジトリにPushします。
ここでいう「Push」とはローカルリポジトリからリモートリポジトリに変更内容を反映させることです。逆に、リモートリポジトリから変更履歴を取得することを「Pull」と呼びます。

ユーザーがそれぞれ自分のPC内にリポジトリを保持しているため、ネットワークにつながらずサーバにアクセスできなくても作業ができるのが特徴です。
システム開発においては、複数人が分散して開発するという近年のニーズとマッチした、分散管理方式の「Git」や「Mercurial」などが主流になってきています。

2つの管理方式についてまとめると…

「集中管理方式」は

  • ファイルのバージョン管理を専用のサーバ(リポジトリ)で一元管理する方式のこと。
  • コミット(チェックイン)するごとにバージョンが加算され、リポジトリ内のバージョンが自動的にひとつずつ増える。
  • サーバ上でファイル情報を一括管理するため、サーバにつながっていない状態ではファイルの変更情報を記録できない。

「分散管理方式」は

  • ユーザーがそれぞれPC内にリポジトリのコピーを持つ方式のこと。
  • ファイルが更新されると、まずそれぞれのPC内にあるローカルリポジトリでファイルの変更を記録し、随時サーバ上のリモートリポジトリに変更内容を反映させる。
  • ユーザーがそれぞれ自分のPC内にリポジトリを保持しているため、ネットワークにつながらずサーバにアクセスできなくても作業ができる。

実際使ってみての感想

ここで今まで私が利用したことのあるバージョン管理ツールの所感も併せてご紹介させてください。

「集中管理方式」…SVN(サブバージョン)

SVN(サブバージョン)ではコミットをおこなうとすぐにSVNのサーバに送られ、メンバー全員に共有されてしまう為、チームで共有しているファイルの場合では、2人で同時に編集してしまったために、先に編集した人の変更内容が消えてしまうという事象が起こりがちでした。
図に表すと以下のような形です。

① Aさんが「index.html」に修正を加えて、コミットしました。
② Bさんも同時刻に同じ「index.html」に修正を加えており、Aさんよりも後にコミットをしました。
③ Aさんが修正内容を確認しようとすると、上書きしたBさんのファイルの内容が反映されており先に対応したAさんの対応内容が消えてしまうという事態が発生した。

「分散管理方式」…Git(SouseTree)

古いファイルを元に編集したファイルで、他人の編集した最新ファイルを上書きしようとすると、サーバにアップロードした時に警告が出ます。
そのため、知らず知らずのうちに他人の編集内容を上書きしてしまうといった失敗は起こりませんでした。
図に表すと以下のような形です。

① Aさんがローカルリポジトリで「index.html」に修正を加えて、リモートリポジトリにPushしました。
② Bさんも同時刻に同じ「index.html」に修正を加えており、Aさんよりも後にリモートリポジトリにPushをしました。
③ BさんがPushした際に警告がでてきて、事前に編集していたAさんの内容と修正範囲が同じだと知り、Aさんの修正内容も反映した上でBさんの修正も無事に反映することができた。

今は「分散管理方式」が主流になっているので、私の経験した「集中管理方式」のようなことが起こるリスクは減ったのではないかと思います。

このように手作業でバージョン管理だと起こりそうなミス等を事前に防げるツールなので、サイト運用をされている方でまだ導入されていない方は検討されてみるのも良いかと思います。

まとめ

皆さんいかがでしたでしょうか?
なんとなく知っていたようで知らなかったことも知れるきっかけになれていると幸いです。
バージョン管理システムは、ファイルのバージョン管理をただ記録するだけでなく、開発の効率アップや安全なスケジュール進行をサポートしてくれます。
大規模な構成のファイルになるほどバージョン管理は複雑になりますが、そうしたときにバージョン管理システムを上手に活用すれば、より効率的に開発・運用が進められると思います。

参照サイト

参照:知らないと現場で困るバージョン管理システムの基礎知識

https://atmarkit.itmedia.co.jp/ait/articles/1305/20/news015.html

参照:バージョン管理システムとは?管理方式の違いと履歴を管理する利点

https://hnavi.co.jp/knowledge/blog/version_control_system/

コラム執筆者

大場 春菜(おおば はるな)

2013年メンバーズ入社。
入社時は制作業務(デザイン、コーディング)を担当し、現在はWebサイト運用・構築のディレクションを担当。
趣味は美味しいものを探して食べ歩くこと。