バージョン管理システム

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動

バージョン管理システム: version control system、VCS)とは、コンピュータ上で作成および編集されるファイルの変更履歴を管理するためのシステム。特にソフトウェア開発においてソースコードの管理に用いられることが多い。

画像などバイナリファイルの管理にも用いられるが、行単位・文字単位で比較がしやすいプレーンテキスト形式と比べて、差分の管理などの面でバージョン管理システムの機能を十分に活かしきれないことが多い。

概要[編集]

バージョン管理システムの基本的な機能は、ファイルの変更内容・作成変更日時の履歴保管である。この機能により、何度も変更を加えたファイルであっても、過去の状態や変更内容を確認したり、変更前の状態を復元したりできる。更に、多くのバージョン管理システムでは、個人1人のみならず複数の人間がファイルの編集に関わる状況(例: 商業的なソフトウェア開発、オープンソースプロジェクト)を想定している。複数の人間が複数のファイルを各々編集すると、それぞれのファイルの最新の状態がどれであるか分からなくなったり、同一ファイルに対する変更が競合(コンフリクト)したりするなどの問題が生じやすい。バージョン管理システムはこのような問題を解決する仕組みを提供する。VCSは設定ファイルや原稿の管理にも利用可能である。

機能[編集]

バージョン管理システムはその要件に合わせ以下の機能のいずれかを提供する。

  • コンテンツ履歴
    • 変更記録(create & update = commit, revert)
    • コンテンツ取り出し・復元(read = checkout)
    • 履歴削除(delete = reset)
  • メタデータ履歴
    • 記録日時
    • commitメッセージ
    • タグ
  • 並行開発
    • ファイルロック
    • ブランチ&マージ

管理方式[編集]

バージョン管理システムでは、ファイルの各バージョンをデータベースに保持しており、このデータベースを一般にリポジトリと呼ぶ。

バージョン管理システムの基本的な利用方法は以下の流れになる。

  1. ファイルをリポジトリに登録する。
  2. ファイルをリポジトリからローカル環境に取り出す(チェックアウト)。
  3. ローカル環境で、ファイルに対し変更を行う。
  4. 変更したファイルをリポジトリに書き戻す(チェックイン)。

ファイルがチェックインされると、システムによって「いつ」「誰が」「どんな変更を行った」等が記録され、後から参照できる。また必要に応じて古い版を取り出すこともできる。

これらを行うユーザインタフェースは、CUIGUIなど様々である。また、統合開発環境を組み合わせて使用できるものもある。TortoiseSVNTortoiseGitなどのように、オペレーティングシステムのシェル環境と統合されて直感的に利用できるGUIフロントエンドも存在する。

リポジトリ[編集]

個人向けのRCSなどは作成したファイルを即座にリリースできるが、CVSSubversionGitなどの共同利用向けのシステムの場合、最初に「リポジトリ」と呼ばれるファイル管理向けのディレクトリを用意する。リポジトリの作成作業は基本的にシステム、またはプロジェクトの管理者が行い、作業者はそれに対してファイルをコミット(チェックイン)、チェックアウトする。

リポジトリが一カ所に集中しているシステムを単一リポジトリ、複数あるものを分散リポジトリという。

バージョン管理システム側の不具合などにより、リポジトリが破損してファイルが復旧できなくなることがあり、リポジトリの定期的なバックアップは必須とされている。

チェックアウト[編集]

リポジトリからデータを取り出すことをチェックアウトと呼ぶ。

CVSやSubversionではリポジトリから初めてデータを取り出しローカルに保存することをチェックアウトと呼ぶ。それ以降に再度、他の誰かによって更新されたリポジトリからデータを取り出してデータを最新版に保つことはチェックアウトとは呼ばず、アップデートと呼ぶ。

Visual SourceSafe (VSS) では、リポジトリからファイルを取り出すだけでなく、さらにそのファイルにロックをかけてチェックアウトした人がそのファイルをチェックインするまで他の人が編集できないようになることをチェックアウトと呼び、CVSやSubversionとはチェックアウトの定義が若干異なる。ただし、VSSはソフトウェアのバージョンや設定次第でロックをかけないようにすることもできる。

リポジトリからチェックアウトした後は、しばらくの間にだれかがリポジトリに最新版のデータをコミット(チェックイン)している可能性があるので、コンフリクト、衝突を避けるためにチェックアウトしたデータでの作業を始める前やコミット(チェックイン)する前に、必ずローカルをアップデート(VSSではリフレッシュと呼ぶ)して常に最新版の状態に保つことが推奨されている。

チェックイン[編集]

リポジトリにファイルを書き込むことを、チェックインやコミットと呼ぶ。VSSでは、リポジトリからファイルを取り出すだけでなく、さらにそのファイルにロックをかけてチェックアウトした人がそのファイルをチェックインするまで他の人が編集できないようにする。

ロック方式とコピー・マージ方式[編集]

ひとつのファイルへ異なる変更が同時に行われる(並行処理)と一貫性が保てない。この問題を防ぎ並行開発を可能にするために「ロック」あるいは「コピー・マージ」が用いられる。バージョン管理システムはこれらの技法を用い並行開発を可能にする。

ロック方式では、ユーザーは編集するファイルにロックをかけ、他のユーザーが編集できないようにしておき、編集が完了したらロックを解除する。単純で確実な仕組みではあるが、他のユーザーはファイルの編集完了まで待たなければならず効率が悪い。また、無責任なユーザーがファイルにロックをかけたまま放置してしまうなどの危険性もある。ロック方式の考え方は「競合を起こしうる変更は事前に許可しない」である。

コピー・マージ方式では、編集するファイルをシステムからユーザーの元にコピーし、このコピーを編集する。編集完了後に変更した部分をシステム側に反映させるが、この作業をマージと呼ぶ。他のユーザーの編集中でもシステムからのコピーは自由に行えるようにすることで、複数のユーザーが同時に編集作業を進められるため、グループでの利用に向いている。ただし、それぞれのユーザーによる変更が競合する場合には、マージする時点で解決する必要がある。一般的には、変更内容が競合する旨をユーザーに知らせ、内容を確認、修正させる方法がとられることが多い。コピー・マージ方式の考え方は「実際に競合したらその時に解決する」である。

プレーンテキスト形式のファイルは差分管理がしやすいため、マージや競合状態の解消をすることは比較的容易だが、バイナリ形式のファイルは一般的にマージや競合状態の解消が難しい。そのため、既定ではコピー・マージ方式であっても、特定のファイルは常にロック方式とすることのできる機能を持っているバージョン管理システムもある[1]

バージョン番号、タグ、ブランチ[編集]

バージョン管理システムを利用する場合、ファイルに対してバージョン(リビジョン)番号が付加される。RCSやCVSの場合、通常は1.1から始まり、ファイルの編集が行われる毎に最後の数値がインクリメントされる。その後は、何も指定せずにファイルをチェックアウトした場合、最新のファイルを取り出すことになるが、このバージョン番号を利用することによって、以前に編集したファイルを取り出すこともできるようになる。システムによっては、バージョン番号だけでなく、日付、時刻によってファイルをチェックアウトすることも可能になる。

タグとは、バージョン管理番号とは別に、ファイルに対して特定の名前を付与することである。特に、リポジトリ内のファイルに対して一括したタグをつける[2]ことによって、特定のリポジトリの状態を簡単に取り出すことができるようになる。 ベータ版・リリース版・移植版など、プロジェクトの区切りがついた時点でタグをつけることがよく行われている。

ブランチは、リポジトリを分岐させることで、プロジェクトを分岐させ、複数の方向に開発を並行して進めることができる。大規模な開発プロジェクトで、「開発版」「安定版」とプロジェクトの方向性をわけたいときには有効である。バージョン管理システムの中には、複数の方向にわかれたブランチをまとめる機能をもつものもある。

ネットワークの利用[編集]

グループでバージョン管理システムを利用する場合、ネットワークの利用が必須となる。システムにより固有の方法があるが、大抵は、他の認証システムを利用してユーザーの認証を行ったり、通信経路を暗号化することで通信の安全性をはかることになる。通信は、sshを利用して安全性を確保するのが一般的である。

他に、匿名のシステムを用意しているものもある。インターネット上でプロジェクトを公開している場合に良く用いられ、これにより、開発途中のソースコードをプロジェクトに参加していない人たちに対しても公開している。

主なバージョン管理システム[編集]

フリーソフトウェア(オープンソース)[編集]

プロプライエタリ[編集]

  • AccuRev - ストリームという概念を使用した、プロセス指向の構成管理ツール。バグトラッキングシステムを内蔵する。分散開発、並列開発など様々な開発プロセスをストリームで表現できる。
  • Alienbrain - デジタルアセットマネージメントシステム。バージョン管理機能に加え、構成管理、ステータス管理などの機能がある。任天堂にて使用され、有名になった。バイナリデータ、CGデータを問わず履歴を自動で保存できる。
  • Rational ClearCase
  • Code Co-op
  • Perforce Helix - 集中型。2015.1で分散型に対応。ロック方式。Perforce Softwareが開発した。マージ機能もあり。
  • Plastic SCM - 分散型。ロックにも対応。セマンティックマージなどの特徴を持つ。
  • SCCS (Source Code Control System) - ソースコード管理システム。AT&Tが開発した、RCS登場以前唯一のバージョン管理システム。
  • SourceHaven
  • StarTeam
  • Visual SourceSafe - Microsoft Visual Studioとセットで使われることの多いバージョン管理システム。
  • Team Foundation Server - バージョン管理機能に加え、作業管理機能、タスク管理機能、自動ビルド、レポート生成の機能もある、Microsoftのソフトウェア開発プロジェクト管理サーバー製品。
  • Qangaroo - Web上でExcelライクなインターフェースを有するシンプルで直感的な作業を可能とするクラウド型テスト管理ツール
  • SOS - Cliosoft 社が開発する、半導体設計をターゲットにした集中型バージョン管理システム。

脚注[編集]

  1. ^ ロック | TortoiseSVN
  2. ^ しばしば「タグを打つ」ともいう。

関連項目[編集]