この記事について

バージョン管理システムについて、

どういったものかを理解し、人に説明出来るようになるための資料として作成しました。

 

 

事の発端

職場でSVNを導入したいって人がいました。

それは別に良い事だと思ったんですが、理由を聞いたら

SVNしか使ったことがないからとりあえずコレ!」っていう理由でした。

 

色んなメリットデメリットがあって選択肢の中から選んだのなら分かります。

ただ、何も知らずにそれを選んでしまったら

後になって「あっちの方がアノ機能があったじゃん」ってなったり

間違いなく後悔すると思いました。

 

そこでバージョン管理システムについて色々と調べたいと思いました。

また、自分も十分に理解出来ていないと思ったので、学習がてら資料を纏めたいと思いました。

 

   

流れ

全体的には以下の流れで記事を作っておこうと思います。

ツールの種類については今後増やしたり減らしたりしていきます。

興味がわくものがあれば調査して載せていきたいと思います : )

  • バージョン管理システムについて ⇦ココ 

 

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

ファイルの変更履歴を管理するためのシステムです。

英語ではVCS(Version Control System)と呼ばれ、

ソフトウェア開発において、

ソースコードを、5W1H形式で(誰が、いつ、どこで、何を、なぜ、どのように

変更内容を管理しておく事が重要になる場面が多く、

それを実現するのがバージョン管理システムになります。

 

 

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

現在大きく分けて3つあります。

  1. ローカル管理型
  2. 集中管理型
  3. 分散管理型

 

ローカル管理型

バージョン管理の原点的なタイプです。

ファイルやフォルダをコピーして名前の後ろに日付やコメントを書きます。

ローカル管理型

前職ではSEとして色んな現場を渡り歩いてきました。

そしてこのローカル管理型をいくつか見てきましたが、

このやり方で上手くいっている所を見た事がないです。

そしてこのやり方をしていて保存しているドライブが壊れた時は目も当てられませんでした。

 

また、システムを作る時に複数人で作業する場合、

一人のパソコンでプログラムを管理するというのは非効率的なやり方でしょう。

何十人と人がいたらたぶん管理する人は過労死しちゃいますね。。

 

集中管理型

ローカル管理型の問題を解決するために生まれたのが集中管理型です。

全てのバージョンを管理するサーバが存在します。

そしてサーバを中心に多くのクライアント端末が存在し、

サーバからファイルをダウンロードして作業する仕組みとなっています。

集中管理型

 

この集中管理型を使う利点として、

プロジェクトに参加した人(サーバに繋がったクライアント)なら

誰でもファイルをダウンロード(チェックアウト)して編集することができます。

そしてサーバでは保存(コミット)されるたびに

誰がどのファイルを更新したのか共有される仕組みになっております。

 

また、サーバには排他機能があるため、誰かが編集している時に

別の人が編集できないようロックをかける機能があります。

これによって他の人の編集内容が上書きされるような心配はありません。

この集中管理型は長らく主流になっていました。

 

しかし、この集中管理型には欠点もあります。

一つはサーバが壊れた場合は全ての変更履歴やデータが失われます。

失いたくない場合はサーバのバックアップを取らないといけません。

 

もう一つはこのサーバは常に起動していないといけないことです。

そうしないと誰もチェックアウト出来ませんし、コミットもできません。

ローカル管理型と対して変わらない状態になってしまいます。

 

分散管理型

そこで新たに出てきたのが分散管理型という概念です。

分散管理型

分散管理型では、サーバーで管理しているプログラムをローカルに丸々コピーします。

丸々というのは全てのファイルや更新履歴も含めてそっくりミラーリングします。

 

そのため、たとえサーバー側で問題があったとしても

ローカルのどれかを持って来れば復元する事が可能です。

さらに複数人で作業できるようにワークフローを構築することができます。

現在ではこの分散管理型が主流になっており、様々な現場で導入されております。

 

 

結局のところ

分散型が主流になってはいますけど、

別に個人だったり少人数でやってるようなところは集中管理型でもいいですし

集中型から分散型にかならず以降しなければいけないわけではないです。

 

前職ではSVNだとサーバが不安定で危なかったこともありGitに変えましたが

アレはアレで正解だったと思います。

今でも(Gitのことを分かっていないけどマニュアル通りやれる)後任の叔父さんが

頑張って保守してくれているそうです(笑

 

今の会社では正直なところGitを使って承認ワークフローを用意して

きちんと上司がレビューしてくれそうな雰囲気なのでGitを導入したいなと思ってます。

管理のしやすさからSVNになる可能性はありますが…

 

 

参考

バージョン管理に関して