バージョン管理システムとは? ~開発資産を履歴管理するファイルシステム~|データ分析用語を解説

AUTHOR :   ギックス

本記事は、株式会社ギックスの運営していた分析情報サイト graffe/グラーフ より移設されました(2019/7/1)

バージョン管理システムを使用することで「もしも」の場合に対応する

データ分析では、データベースを操作するためSQL命令やBIツールの定義など様々な開発資産をファイルとして残します。これらの開発資産は、ファイルサーバーなどに保存していると思いますが、これで本当に完璧なのでしょうか? 間違ってファイルを削除したり修正した場合の対応は大丈夫でしょうか? 今回は一歩進んだファイル管理方法のバージョン管理システムについてご紹介したいと思います。

バージョン管理システムとは

バージョン管理システムとは、パソコン上で作成、編集されるファイルの変更履歴を管理するためのシステムです。複数人で利用する場合は、下記のようにサーバーにバージョン管理システムのサーバー機能を導入し、クライアントとなるパソコンにバージョン管理システムのクライアント機能を導入して運用します。git1
図中の「リポジトリ」とは、ファイルをバージョン管理するためのデータベースのようなものです。ファイル情報には、ファイルの実態と共にバージョン、アップロード日時、アクション(追加/変更/削除)、アップロード者などの情報が入っています。
また、バージョン管理システムでは、リポジトリにアップロードする行動を「チェックイン」、ダウンロードする行動を「チェックアウト」と呼び、チェックインする度にリポジトリ内のバージョンは自動的に1つずつ加算されていきます。

バージョン管理システムを導入するメリット

バージョン管理システムを導入することで、サーバー内のファイルを「いつ」、「誰が」、「どのような変更を加えたか」などが分かります。これによってサーバー内のファイルに対して、ファイル名以外に持ち主や目的などの付加情報を加えることができます。これは、複数人が参加しているプロジェクトのファイル管理として有効な情報です。
そして、最大のメリットは、ファイルの変更がバージョンによって管理されている事です。複数人で1つのファイルをサーバーで管理していると、デグレード障害が発生する場合があります。デグレード障害とは、例えば下記のようにAさんが作成してアップロードしたファイルを、Bさんが修正したのにも関わらず、Aさんが何も知らずにアップロードしたらどうでしょう? Bさんの修正内容を無視したAさんの修正内容だけがサーバーに残った状態になります。これだと、Bさんの修正が無駄になってしまいます。git2
上記のようなファイル管理をバージョン管理システムに置換えたらどうでしょうか? リポジトリでファイルをバージョン管理しているため、Aさんが修正内容をアップロードしようとした時、Bさんの修正が先に発生していたため、Aさんはアップロードできません。これで、Aさんが同じファイルをBさんが修正した事に気付くことができます。(Aさんが修正内容をアップロードするには、リポジトリから最新状態を取得し、自分のパソコンで再修正する必要があります)git3
また、仮にリポジトリのファイルを間違って削除、または変更した場合は、リポジトリの履歴から過去の正常な状態のファイルを取得することができます。

二大勢力:SVNとgitとは

バージョン管理システムの製品は非常に多くありますが、その中でApache SubVersion(通称、SVN)とgitの2つが多くのプロジェクトで使われています。この2つの構造上の違いは、SVNはサーバーにのみリポジトリを配置した単一リポジトリ型、gitはサーバーと各クライアントのパソコンにリポジトリを配置した分散リポジトリ型です。git4
最初にリリースされたのはSVNです。SVNは、無償である事、様々なOSで対応している事、プログラミングソフトの1つの機能として提供したことなどにより、2000年代に急速に広まりました。しかし、リポジトリがサーバーに1つだけあるため、個人が開発途中の資産を管理しにくい事や、オフライン中はバージョン管理できないという欠点があり、大規模開発プロジェクトには不向きとされてきました。
そこで大規模開発プロジェクトに対応するためにリリースされたのがgitです。最大の特徴は複数人が共有するサーバー上のリモートリポジトリの他に、リモートリポジトリの複製をクライアントのパソコンにローカルリポジトリとして持つことです。これによって、オフラインでも個人が開発途中の資産をローカルリポジトリで管理することができるようになりました。また、リモートリポジトリが破損した場合は、クライアントのパソコンのローカルリポジトリから復旧が行えるため、障害対応の面でも優れています。

重要なことはファイルをキチンと管理すること

バージョン管理システムは、複数人が参加するプロジェクトのファイル管理であった方が良い機能ではありますが、導入することで行動が制限される可能性があります。
バージョン管理システムとしてgitを選択した場合、高度なバージョン管理ができる反面、ローカルリポジトリを自分で管理する義務が発生します。そのために、gitのシステム構造を理解し、何らかのローカルリポジトリ障害が出た場合は、基本的に自分で対応するスキルを身に付ける必要があります。また、SVNも同様で、gitほど操作は難しくないためハードルは低いですが、サーバーのリポジトリ構造を管理する「ライブラリアン」と呼ばれる担当者を設ける必要があります。
バージョン管理システムを導入するにしろ、ファイルサーバーで管理するにしろ、ルールやマニュアルを作成して、健全なファイル管理体制を整えることがプロジェクトのファイル管理として必要になってきます。

データ分析用語:索引
SERVICE