各種バージョン管理ツール | IT SKILL MAP

各種バージョン管理ツール

 バージョン管理ツールとは、プログラムソースの履歴を管理するとともに、1つのソースを複数ユーザーで共有して開発する機能を提供します。
 ここでは、このバージョン管理ツールの中で多くの現場で利用されている、メジャーな製品をまとめます。

1.はじめに

バージョン管理ツールの用語

リポジトリ

 バージョン管理ツールにおいて、管理するプログラムソースを登録する中核となる場所のことを言います。通常、データベースを利用します。
 このリポジトリを1つだけ作成して運用する集中型と、リポジトリのコピーを複数作成し、分散して管理する分散型に分かれます。


チェックアウト

 リポジトリから、編集するプログラムソースを取り出すことを言います。

チェックイン

 リポジトリへ、編集したプログラムソースを書き戻すことを言います。

チェックアウト時のロック / チェックイン時のマージ・競合

 チェックアウト時には、対象のプログラムソースを「ロックする」/「ロックしない」を選択します。

 ロックすると、チェックインするまで、他のメンバーはプログラムソースの編集はできませんので安全ですが、チェックインが完了するまで、他のメンバーは編集を待たなければなりません。

 一方、ロックしない場合は、複数メンバーが同時に同一プログラムをチェックアウトして編集できます。互いの編集者が同一ソースの編集をしたとしても、編集箇所が違う場合は、バージョン管理ツールの機能により、チェックイン時にソースコードのマージが自動で行われますが、仮に同一箇所の修正が行われた場合はチェックイン時に競合となり、どのソースを残すのか、手動で選択しなければなりません。

 どちらの方法にも一長一短があるため、現場によって、どちらかに決められていると思いますが、「ロックしない」場合には、マージは行うものの、競合は発生させないよう、メンバー同士で修正箇所を事前に調整するケースが多いです。

ブランチによるプログラムソースの分岐

 バージョン管理ツールでは、単一プログラムソースごと編集前、編集後の履歴を管理すると同時に、プロジェクト全体の履歴を管理します。例えば、リリース時点のプログラムソースの一式を履歴として保存し、以後、各単一プログラムの編集を行ったとしても、もしリリースしたソースで障害が発生した際は、すぐにもとのリリース時点のプログラムソース一式に戻すことが出来ます。これはバージョン管理システムにおける非常に重要な機能の一つです。

 このプロジェクト全体の履歴管理において、新たな機能を追加する際、元の履歴から分岐したい場合があります。この場合、ブランチという機能を利用して、プロジェクト全体の履歴を2つに分け、各々、別のプロジェクトとして管理して行くことも可能です。手間がかかりますが、再度一本化したい場合、マージも可能です。

2.Git

 Gitは、軽量タイプの分散型のバージョン管理ツールです。リポジトリにはOracleやMySQLといったDBMSを利用せず、Git独自のファイル形式で保存されます。Gitのインストールに合せてDBMSのインストールの必要がない、軽量な仕様とも言えますが、ソースデータ量が増えると、DBMS利用タイプに比べ速度的には劣ります。
 分散型の為、各自ローカルにリポジトリを保有しつつ、共有サーバーに共有リポジトリを配置する形式で運用します。ローカルリポジトリに対しては、Checkout、Commit、共有リポジトリに対してはPull、Pushのコマンドを用いて各リポジトリを操作します。

 Windows、Linux、macOSのマルチプラットフォームで動作します。
 無償、商用可、OSSのGNU Licenseで運用されます。


Git(https://git-scm.com/)


GitHubはGitとは全く違う別物です

 名前が似ているGitHubですが、これは全く別物です。GitHubとは、Gitと関係のない企業、GitHub,Incが運営する、Gitのリポジトリを不特定多数のGitHubユーザーと共有する、営利目的のWebネットワークサービスです。正しい使い処は、OSSとして公開できるソフトウェアがある場合に、共同開発、セキュリティの脆弱性チェック等を目的として、外部の優秀な技術者の助力を求める場合です。
 不特定多数が参加できるため、当然、悪意ある参加者がいる可能性も認識しておく必要があります。
 クローズドな企業システムを開発する環境で、安易にGitHubに登録してしまうと、絶対公開してはいけないリポジトリを意図せず公開するリスクがあり、そのような場合、大問題となりますので十分注意して下さい。GitHubの有償のサービスでは非公開リポジトリの利用も可能ですが、IT企業の一番の資産であるプログラムソースをGitHub,Incという一企業に預けて良いのか、会社としての判断が必要だと思います。

3.Apache Subversion

 軽量タイプの集中型のバージョン管理ツールです。省略してSVNとも呼ばれます。
 共有サーバーに共有リポジトリを配置する形式で運用します。ローカルリポジトリは保有しません。共有リポジトリに対しCheckout、Commitのコマンドを用いて、各ユーザー共有してリポジトリを利用します。

 Windows、Linux、macOSのマルチプラットフォームで動作します。
 無償、商用可、OSSのApache License で運用されます。


Apache Subversion(http://subversion.apache.org/)

4.TFS(:Team Foundation Server)

 マイクロソフトが提供する、本格的な集中型のバージョン管理ツールです。リポジトリにはMicrosoft SQL Serverを利用します。又、リポジトリを配置する共有サーバーは、Windows Serverでなければなりません。チェックイン、チェックアウト等の操作はMicrosoft Visual Studio上で行います。
 非常に使いやすく高性能で、このTFSを利用したいがために、Visual Studioで開発するという会社もあるほどです。過去VSS(:Visual Source Safe)という製品がありましたがその後継です。


TFS(:Team Foundation Server)(https://www.microsoft.com/ja-jp/dev/products/team-foundation-server.aspx)


Visual Studio Team Services

 TFSのように環境構築の手間が必要ない、マイクロソフトのクラウドサービス上で提供される集中型バージョン管理システムです。
 Visual Studioだけでなく、EclipseやXcodeでも利用することができます。
 一見、GitHubに似ているようにも見えますが、このサービスは第三者に公開する前提の無い、クラウドサービスの中の一サービスであり、全くの別物です。


Visual Studio Team Services(https://www.microsoft.com/ja-jp/dev/products/visual-studio-online.aspx)



おすすめの関連記事

各種プロジェクト管理ツール
各種プロジェクト管理ツールについてまとめました。