SHARE

2017/02/24 | テクノロジー | 555view

【Git】分散型バージョン管理システムって何がおいしいの?集中型とどう違う?

こんにちは世界。amp@技術部のヤノです。気づけばもう2月も終わりに近づいていますね。
ボクは今年も恵方巻を食べられずに2月を終えてしまいそうです...毎年「来年こそは!」と思っているのですが。

ファイルのバージョン管理、まだ「フォルダ分け」ですか?


さて、今日は【バージョン管理システム】のお話です。世代管理などとも呼ばれますね。みなさまの職場では「パソコンで作成したデータのバージョン管理」はどうされていますでしょうか...?ファイルの管理・整理って、実はとても頭を悩ませる問題ですよね。

・例えば「資料_H27.6.28」とか「20160201-営業データ」とか...
・時系列で「20160101」とかにして最新ファイルに「☆」とか「最終版」とかつけたり...
・命名規則がこんがらがって「請求書_最新」「H26請求書(最新版)」みたいなものが量産されたり...

一部のエンジニアさんが見たら発狂しそう(ボクのコトです)な例ばかり挙げてしまいましたが、上記みたいなコトってよくあります。事実、この「データ管理」というのは厄介なシロモノです。基幹系データ等はシステム導入している企業様が多いかと思いますが、末端のファイルの管理まできっちりシステム化されているトコロって、まだそこまで多くないのかなぁと感じています。

し・か・し!

私たちのようなシステム・WEB開発会社では「データ=大切な商品」なので、このような運用は命取りです。「前回バージョンとどこを修正したのか」「このファイルの更新履歴はどうなっているのか」など、明確にわからなければ困ります。複数人が関わるプロジェクトを進める場合は、厳密なファイル管理ができる/できないで、プロジェクト成否につながるといっても過言ではありません。

...そこで登場するのが【Git】をはじめとする「バージョン管理システム」です。


集中型/分散型の違いって?

【Git】は「集中型のバージョン管理システム」と呼ばれていますが、バージョン管理システムといえば、従来は SVN や CVS など「集中型」が主流でした。

集中型バージョン管理は、1プロジェクトに対して1つの「中央システム」をサーバなどに配置し、その中央に対して変更を「コミット」するという思想に基いています。コミットは単純に「中央システムの変更履歴」として他の開発者にも取り込まれます。また、ブランチ分けは中央システム内の「別ディレクトリへのコピー」にすぎません。中央システムを基準にしたバージョン管理は、その単純明快さの裏に、以下のようなデメリットを抱えていました。

・開発者が向き合うのは常に中央システム(外部サーバ)なので、操作の多くはローカルで行えない。
・コミットは常に中央システムに反映されるため、コミットの敷居が高くなる。
・ブランチ・マージは常に全体共有になるので、開発者個人が柔軟なブランチ分けをするのが難しい。

分散型バージョン管理のメリット

Gitはこれに対し「ローカルリポジトリとリモートリポジトリの分離」や「全体をプルしあうことで運用する」というアプローチをとっています。Gitのブランチは集中型と違い「ディレクトリ分け」ではなく「完全に別の並行世界」になります。また、全員で共有するリモートブランチと、個人で作成できるローカルブランチがあり、ログも別途管理されるので「問題のあるコミットも良いコミットも可能な状態」の中から【良質なコミットのみをメインブランチに取り込む】...といった自由な開発ができるようになっています。

分散型バージョン管理のデメリット

ソースコードなどのテキストデータを扱う上で「集中型でできることが分散型ではできない」ということはありません。しかし1点苦手とする分野があります。巨大なバイナリデータを大量に抱えるようなプロジェクトでは、これらのファイルの全バージョンの保管に必要な容量が瞬く間に増えていくことになり、各開発者の端末の記憶容量を大きく圧迫してしまいます。

しかし、システムやWEB開発でこのようなバイナリデータを多く扱うことはありません。開発を行う上でもしまだ「バージョン管理システム」を利用していないのなら、ぜひこの機会に導入を検討されてみてはいかがでしょうか。


Gitを導入しGUIツールで動かしてみる

最後に、Gitを用いたバージョン管理がGUIツールからラクチンに出来るようになるまでの環境構築をしていきたいと思います。対象OSはWindowsを想定しています。


1.まずはGitの概要と機能を知ろう
====
Gitは正直に言って少し複雑ですので、いきなり導入してGUIで動かして...というのは困難です。まずはGitの概念・大まかな機能について、初学者向けの文献やWEB上の【Git入門者向け】のリファレンスで確認しましょう。(引用:サルでもわかるGit入門 http://www.backlog.jp/git-guide/)


2.Windows用のGit環境「Git for windows」を導入しよう
====
ここではWindows用に最適化されたGit for Windowsを使って、Windows上でgit環境を構築していきます。(引用:Git for Windows https://git-for-windows.github.io)

インストールの際に環境変数にパスを通しておきます。インストールが済んだらWindowsの「コマンドプロンプト」でGitコマンドが入力できるようになっているハズです。以下コマンドでバージョンが返ってくるか確認しましょう。

$ git --version


3.リモートリポジトリホスティングサービス「BitBucket」を利用しよう
====
リモートリポジトリのホスティングサービスでは「GitHub」なんかが有名どころですね。しかしGitHubでは無料で非公開リポジトリを作成することが出来ません。今回は非公開リポジトリを無料で作成できる「BitBucket」を利用します。(引用:BitBucket http://bitbucket.org)

リモートリポジトリをホスティングすることで、「サーバにGitで管理しているソース一式を預けてみんなで共有」できるようになります。Git専用のレンタルサーバーサービスみたいなものですね。新規アカウントを作成し、自分用のリポジトリを作成したら、次に進みましょう!


4.GUIでGitを動かせる「SourceTree」を利用しよう
====
Windows for Gitを導入した段階で、シェル(コマンドライン)からGitコマンドを叩いてGitが利用できるようになっています。しかし、慣れていないウチからコマンドラインで操作するのはかなり学習コストがかかるので、今回はサクッとGUIツールを利用してみましょう。利用するツールは「SourceTree」というAtlassian社製のツールです。(引用:SourceTree https://ja.atlassian.com/software/sourcetree)

SourceTreeを使うことで、ローカルのGitはもちろん、BitbucketのようなリモートリポジトリにもGUIでアクセスすることができるようになります。インストールが完了したらSourceTreeを起動し、左上の「新規/クローンを作成する」というボタンを押してみましょう。ここから [BitBucketで作ったリモートリポジトリ] と [ローカルリポジトリ] を設定し、リモートリポジトリの内容を取得させる(=クローンを作成)ことができます。

この他にもSourceTreeでは...

・リモートリポジトリからクローン
・リモートリポジトリの変更をフェッチ
・変更をローカルリポジトリへマージ
・ローカルのファイルを変更しローカルリポジトリへコミット
・リモートリポジトリへ変更内容をプッシュ

などなど、Gitの基本的な機能が全てGUIで行えます。 


Git利用の広がり

以前はWindowsでのGit利用は、GUIツールがなく、コマンドラインからしか使えなかったので敷居が高いと言われていました。しかし最近はSourceTreeのような素敵なGUIツールの出現で学習コストが大幅に下がり、社内のプログラマーだけでなく、デザイナーやディレクターも利用するようになってきているようです。皆さまもこれを機会に、ぜひ分散バージョン管理を初めてみませんか?

矢野 博之

投稿者:矢野 博之

矢野 博之(ヤノ ヒロユキ)
====
東京都国立市出身。ギターとコーヒーで生きてる。20代半ばに異業種から業界入りしたイロモノWEB系エンジニアで【フルスタックウェブエンジニア】を目指し、設計・デザイン・フロント・バックエンド・インフラなど幅広く担当。最近はセキュリティ・ライティング・ディレクションも勉強中。