第3回の連載では、TFS(Team Foundation Server)/VSO(Visual Studio Online)を利用したチーム開発におけるプロジェクト管理方法をご紹介しました。今回はチーム開発におけるリポジトリ管理のポイントをご紹介します。なお、本稿でのリポジトリはソースコードのバージョン管理システムに対象を絞ります。

リポジトリ管理で情報管理の作業削減

リポジトリはチーム開発の成果物の保存場所です。リポジトリの管理をおこなうことで、ファイルやアクセス権限の管理はもちろん、同一ファイルに対する変更者・変更時刻・変更内容などの履歴管理や、過去に保存したファイルの復元などをおこなうことができます。

チーム開発を円滑に進めるためには、リポジトリの管理対象や管理方法を含む運用ルールを定めてチームメンバーに周知し、適切に運用され続けることが必要になります。リポジトリ管理がされていないと、必要になったタイミングで必要な情報が取得できない、必要な情報や環境を作ることができないなど、チーム開発に大きな支障が出ることになります。

リポジトリ管理をおこなう際、管理対象と管理方式を決めます。

リポジトリの管理対象にふさわしいものとは…?

リポジトリの管理対象にふさわしいものとして挙げられるのは、ある時点のソフトウェア・環境を構築するために必要なものすべてです。ソフトウェアのソースコード、ビルドスクリプト、データベースのスキーマ定義、マイグレーションのSQL、初期データ環境構築用の設定ファイルやスクリプトなどが該当します。

逆に、リポジトリの管理対象にふさわしくないものとして挙げられるのは、ソースコードをコンパイルしてできたバイナリファイルや秘密鍵ファイルなどの他人に見せてはいけないものなどが該当します。

表:リポジトリの管理対象

対象
リポジトリの管理対象にふさわしいもの ある時点のソフトウェア・環境を構築するために必要なものすべて
・ソフトウェアのソースコード・ビルドスクリプト
・データベースのスキーマ定義
・マイグレーションのSQL
・初期データ環境構築用の設定ファイルやスクリプト
リポジトリの管理対象にふさわしくないもの ・ソースコードをコンパイルしてできたバイナリファイル
・秘密鍵ファイルなどの他人に見せてはいけないもの

TFS/VSOでは、リポジトリの管理対象から除外するファイルの指定をおこなうことができます。

主なリポジトリの管理方式:集中管理方式と分散管理方式の特徴

リポジトリの管理方式として主なものは、集中管理方式を採用した集中型バージョン管理システム(CVCS:Centralized Version Control Systems)を活用する方法と、分散管理方式を採用した分散型バージョン管理システム(DVCS:Distributed Version Control Systems)を活用する方法が挙げられます。

集中管理方式を採用した集中型バージョン管理システムは、すべての人が使うリポジトリが中央に1つのみあって、常にそのリポジトリに変更を記録する仕組みになっています。そのため、以前の状態に戻す、履歴の調査をおこなう、などの作業をおこなう場合、必ずその中央にあるリポジトリを参照します。代表的な集中型バージョン管理システムとしては、TFVC(Team Foundation Version Control)、CVS(Concurrent Versions System)、SVN(Subversion)、などがあります。

分散管理方式を採用した分散型バージョン管理システムは、サーバ上のリモートリポジトリのほかに、各チームメンバーがローカルにリポジトリを持って作業をおこないます。これらローカルのリポジトリの内容を、リモートリポジトリに反映するという形で作業がおこなわれます。代表的な分散型バージョン管理システムとしては、Git、Mercurialなどがあります。

集中管理方式と分散管理方式のどちらにも、ブランチと呼ばれる履歴の流れを分岐して記録していくための仕組みが用意されています。分岐したブランチは他のブランチの影響を受けないため、同じリポジトリ中で複数の変更を同時に進めていくことができます。

TFS/VSOは、集中型バージョン管理システムであるTFVCと、分散型バージョン管理システムであるGitをサポートしています。

イマドキのチーム開発におけるリポジトリ管理

イマドキのチーム開発では、リポジトリの管理方式として分散管理方式を採用した分散型バージョン管理システム(Git)を採用してチーム開発効率を上げ、リポジトリ管理対象の品質をプロセスで作り込んでいます。Gitなどの分散型バージョン管理システムを採用するのは、チーム開発におけるチームメンバー間での共同作業がより柔軟におこなえるからです。

チーム開発において、各種成果物をリポジトリに反映する際、無差別に反映するとチームに大きな影響を与えることがあります。そのため、セルフチェックをしてからリポジトリに反映するか、他者のレビューが済んでからリポジトリに反映するかのどちらかを選択することになります。分散型バージョン管理システムであるGitを提供する多くのサービスでは、前者をプッシュ、後者プルリクエスト時にレビュアーを指名し、レビュー完了後にマージという操作で実施するケースが多いですが、レビュアーのレビューを通さずに自身でマージをする、継続的インテグレーション(以下、CI)の結果が失敗しているのにマージをしてしまう人も中には存在します。TFS/VSOではプルリクエストをサポートしており、かつbranch policiesと呼ばれる、指定した人数以上のレビュアーのチェックがなければマージをブロックする、最後のCIの結果が成功でなければマージをブロックする機能が実装されているため、品質をプロセスで作り込むことが可能です。

分散型バージョン管理システム採用+VSO/TFS利用で円滑なチーム開発を

チーム開発におけるリポジトリ管理のポイントは、リポジトリ管理対象や管理方式について把握した上で、継続的デリバリーの実践を通してチーム開発効率を上げ、リポジトリ管理対象の品質をプロセスで作り込むことです。分散型バージョン管理システム(Git)を採用し、TFS/VSOを利用することで、容易に導入できるため、チーム開発を円滑に始めることができます。

次回は、iOS や Android から Java までビルドできる開発ツールについてご紹介します。

編集協力:ユニゾン

執筆者紹介

グロースエクスパートナーズ株式会社 ITコンサルタント/ファシリテーター

関 満徳(せき みつのり)

エンタープライズ向けのIT業界にて、企画から開発運用および新規事業立ち上げに関与。現職は、エンタープライズ向けの新規ITサービス立ち上げおよび改善を支援。「顧客価値の創造」と「持続可能な仕組み創り」をテーマに、顧客に価値をもたらすITサービスを提供し続けられる人材育成のためのワークショップを数多くデザインし、ファシリテーターとして活躍。Microsoft MVP for Visual Studio and Development Technologies。POStudy ~プロダクトオーナーシップ勉強会~ 主宰。