Gitではじめるバージョン管理 〜導入のまえに〜

なぜファイルを管理するのか?

業務上、複数人でプロジェクトを進めることが多いのですが、他人の管理するファイルを共有してもらうとたまに下記のような問題に突き当たります。

  • 「どれが最新のファイルなのか分からない」
  • 「どういうルールで作業していったらいいのか分からない」

まあ、聞いて確認すればいい話なんですが、
本来の作業に着手する前に、”ファイル管理ルールの確認”というタスクがひとつ増えることになります。

また、そのルールはいつの間にかアップデートされてされている可能性もありますので、作業に入るたびに都度関係メンバーに確認をとる必要があります。

そうなってくると割と手間に感じませんか?

そこで普通の人ならまず、

「オレオレルールでの管理をやめて、メンバー間でルールを設けよう」

となるかと思います。

ただ、一歩外に出て違うメンバー同士でプロジェクトを進めていくことになった際には、新しいメンバー間で使われているローカルルールを習得しなければならないという状況もあるかと思います。

「それくらい覚えろよ」という意見もあると思いますが、どうせ覚えるなら、ある程度共通化されたファイル管理のルールを覚えた方が便利だし、問題も少ないと思います。

ということで、他人とファイルを共有してプロジェクトを進めていくうえでのマナー的な意味合いも兼ねて、バージョン管理について触れていこうと思います。

バージョン管理とは

ところで、みなさんバージョン管理をどのようにしていますでしょうか?

それなりの失敗を乗り越えてきた方々は”学習”というコトバをしってると思うので、最低限”別名で保存”したり、”ファイルを複製”してから自分の作業を行うなど、なんらかの手段でファイルのバックアップを残していると思います。

自分だけが使うファイルであれば、それぞれ好きに管理してったらいいかもしれませんが、いろんな人と協力して作業していく場合は、絶対にNGです。

まず問題として、先に挙げたように共通認識の確認作業が発生します。参加者の数だけそれぞれが実践している管理ルールが存在し、それぞれバラバラです。互いにどんなルールで管理しているのかを共有して、理解するという手間が発生します。ひどい場合はひとりの人間が管理しててもファイルの命名規則が統一されていないなんてこともあります。
また、プロジェクトが進んでいくと物理的にファイル数が増え、管理が煩雑になってきたりします。
さらに同じタイミングで別の人が自分と同じファイルを編集してしまい、最悪にもどちらか一方の作業内容が消えてしまうなどなど。

そんなふうにアレコレしてるうちに、最終的にどれが最新ファイルか分からなくなり、先祖返ってしまうなど致命的なトラブルを引き起こします。

postimg01_20141106

上記のような問題をスムーズに解決してくれるのが、バージョン管理システムです。

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

バージョン管理システム(バージョンかんりシステム)とは、コンピュータ上で作成、編集されるファイルの変更履歴を管理するためのシステム。

by wikipedia

平たくいうと、ファイルのバックアップをとっておいて、どのタイミングの状態にでも戻せる仕組みということです。

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

バージョン管理システムは、「集中型」「分散型」と大きく2タイプに分けられ、サービスもさまざま。

主なものを下記にまとめます。

集中型 分散型
CVS Git
Subversion Mercurial
Bazaar

それぞれ何が違うのかというとファイル管理の仕方が異なります。

細かくいうと、管理するための概念は一緒だが、構成が違うということです。

どうなっているのか見ていきましょう。

バージョン管理システムを使っていくうえで、ファイルそのものや変更履歴などの情報を管理する場所を「リポジトリ」といいます。

それをサーバ上に置いたものを「リモートリポジトリ」。自分のPCローカル上のものを「ローカルリポジトリ」と呼びます。

集中型とは

集中型の場合、サーバ上のリモートリポジトリをみんなで共有し、そこでファイルを管理していきます。インターネットに接続していないと作業できません。また操作するごとにサーバへ接続するので動作が重めです。ただ、構造が割と簡単なので取っ付きやすいかと思います。

集中型の構造例

postimg02_20141106+

分散型とは

分散型は、リモートリポジトリをそれぞれのPC上に複製(クローン)し、ローカル環境でもリポジトリで管理します。それぞれがキリのいいとこまで作業した段階で、リモートリポジトリと同期させます。なので、それぞれ作業を行っている段階ではサーバにアクセスする必要がなく動作が早いです。また、それぞれがリポジトリのクローンをローカルに持っているので、サーバにトラブルがあってもかなりの確立で復元できるなど、安心度が高いです。

分散型の構造例

postimg03_20141106+

バージョン管理システムを導入しようという方は、いろいろとメリットの多い「分散型」のGitをオススメします。

次回以降は、Gitの導入方法を説明するとともに、Gitの機能や使い方などについても紹介していきます。