第2回
CVSとEclipseで「コードの共同所有」


縣俊貴
橋本正徳
Project Mobster/メディアファイブ株式会社

2003/1/22
今回からいよいよ実地講習に入ります。三人寄れば文殊の知恵と昔の人はうまいことをいいます。XPでは1人の天才ではなく、3人の普通の人が互いに協力して、プロジェクトを成功へと導いていきます。そこで、今回から2回にわたり、XPの重要プラクティスである「コードの共同所有」を成功させるためのノウハウを解説していきます。前編として今回は、バージョン管理ツール「CVS」、次回でCVSのクライアントとしてのEclipseを、XPでいかに活用するかに焦点をあてていきます

コードの共同所有とは

 今回はXPプラクティスの1つである「コードの共同所有」がテーマです。「コードの共同所有」とは「すべてのソースコードは、だれでもいつでも修正を行える」ということです。これはXPの根幹を支える考え方です。

個別所有と共同所有

 一般的な開発プロセスでは、コードは個別所有が普通です。個別所有では、コードはモジュール単位で担当者に割り振られ、コードの所有者が明確になります。ただし、個別所有の欠点として「所有権が明確になると、誰かが書いた出来の悪いコードを修正できる機会が減ってしまう」ということが挙げられます。例えば、

先輩「クールでエレガントなコードを置きましたっ……と」
後輩「(あれ……これってなんで例外処理がないんだろう?) あの……」
先輩「クールでエレガントであこがれちゃうような設計見た? 見習えよ(笑)」
後輩「……(まぁいいか)」

 冗談のようですが、こういうことよくあります。

 XP開発ではすべてのコードは共同所有です。つまり所有者は開発者全員なのです。よりよいコードにすることができるなら、ほかの人が書いたコードも全面的に変更することが可能です。この場合、コードに聖域はありません。結果的にリスクが大幅に減少し、仕事が楽になるのです。

個別所有 共同所有
コードを独り占め コードを独り占めできない
(管理者から見て)管理が楽 (管理者から見て)管理が大変
あるコード(の作業)が遅れていた場合、ほかの人の作業に支障が出やすい ほかのモジュールの更新待ちがなくなる
責任の所在が明確 責任は開発者全員に
他人の書いたコードにはよほどのことがない限り触れない。コードの品質は“玉石混交”で、担当者のスキルに一任される 他人の書いたコードも修正可能。コードの品質が均一に上昇する
他人の書いたコードには興味を持たない 他人の書いたコードを見る機会が増えるのでスキルアップにもつながる

コードの共同所有にはバージョン管理システムが不可欠だ

 「コードの共同所有」を実現するためにはバージョン管理システムの利用が不可欠です。この連載ではバージョン管理システムとしてCVSを利用しています。CVSならインストールも簡単ですし、開発環境EclipseはCVSによるバージョン管理をデフォルトでサポートしています。

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

 皆さんはバージョン管理システム、利用していますか? 案外、共有フォルダにソースを突っ込んで、ファイルをガンガン上書きしながら開発しているプロジェクトも多いようですね? 筆者はバージョン管理なしのプロジェクトにも携わったことがありますが、あれは精神衛生上よくありません。XP開発じゃなくても、2人以上で開発を行うならバージョン管理システムを導入しましょう。筆者の携わるプロジェクトではソースコードに限らず、Webのリソース(HTML、jsp、イメージファイル)や各種定義ファイルなど、プロジェクトに必要なもののほとんどをバージョン管理しています。バージョン管理システムにもいろいろありますが、CVSを特にお薦めします。CVSの特徴は次に列記します。

  • フリーである
  • 設定が容易で情報も充実している
  • さまざまなクライアントが存在する
  • 基本的にファイルにロックをかけないモデルなので開発効率が良い

 CVSに関してはWebや書籍で多くの情報がありますのでそちらを参考にしてください。以下の書籍が特にお薦めです。

『CVSによるオープンソース開発』(Karl Fogel、Moshe Bar共著 オーム社)
http://www.amazon.co.jp/exec/obidos/ASIN/4274064735/ref=pd_sim_dp_3/

 手動で行うバージョン管理とCVSを活用したバージョン管理には根本的に違いがあります。これまで手動でバージョン管理を行ってきた先輩に、CVSを教えてみました。その感想が下記です。

CVS使用前の先輩 CVS使用後の先輩
 私のいるプロジェクトチームは、Windowsをコード管理サーバ(ファイルサーバ)にしてファイルのバージョンを管理しています。仕組みは至って簡単です。

 エクスプローラの「詳細モード」でわかるファイルの最新更新時間を頼りに、ファイルを上書きしています。上書きする前に、自分のマシンとの更新時間を見比べます。

 ところがある時、サーバの時間が9時間も遅れていることがありました。その結果、新しいファイルの上に古いファイルを上書きする事故が起きてしまったのです。

 バージョン管理? CVS? 何ですか、それは。
 常に、最終更新時間見なくていいのは、画期的ですね。差分があることを教えてくれるし、上書きの失敗はあり得ない。

 これまでは「old」「old1」「old2」「old3」「old重要」と書いたディレクトリを用意していましたが、そんな必要もありません。

 どうやら先輩はCVSを大変気にいったようです。初めは操作・仕組みなどを覚えることに苦痛や戸惑いを感じるかもしれません。しかし、それを乗り越えなければ、正しいバージョン管理の在り方を習得することはできません。現在の方法を維持するのは楽かもしれませんが、もっと良いバージョン管理の方法があるなら、ぜひそれに乗り換えてみましょう!

CVSサーバを導入してみよう

 CVSはCVSサーバとCVSクライアントで構成されています。CVSサーバにはWindows NT/2000/XPで使用できる「CVS for NT」を利用します。CVSクライアントはEclipseを使います。CVS for NTはサーバ用のマシン1台のみインストールします。

CVS for NTを5分間でセットアップ

 まずはCVS for NTをインストールします。

(1)ダウンロード

 http://www.cvsnt.org/の「Windows install (.exe)」というリンクよりインストーラをダウンロードします。2002年12月現在の最新バージョンはcvsnt_1.11.1.3.exeです。

(2)インストール

 a.ダウンロードしたインストーラをダブルクリック

 b.基本的にデフォルトでインストール

 [Select Components]の画面のみ[Server Components]にチェックを入れます。それ以外はすべてデフォルトでインストールします。

[Select Components]の画面のみ[Server Components]にチェックを入れる

 c.環境変数「Path」にCVS for NT のインストールディレクトリが追加されていることを確認
 
 追加されていない場合、手動で追加します。デフォルトのインストールディレクトリは「c:\Program Files\cvsnt」です。環境変数Pathを設定する目的はCVS for NTのcvs.exeにパスを通すことです。以前にCVSクライアントなどをインストールしたことがある場合、ほかのcvs.exeにパスが通っている場合があります。ほかのcvs.exeにパスが通っていると、この後のリポジトリの登録でエラーが発生することがあります。以前のパスは取り除いてから作業を行ってください。

(3)リポジトリの登録

 a.CVSリポジトリ用のディレクトリを作成

 ここではc:\cvsrepを用意します。

 b.コントロールパネルの[CVS for NT]を開く

CVS for NTのアイコン

 c.[Repositories]タブをクリック

 d.[Add]でリポジトリ(アーカイブ)の保管場所を追加

 ここではc:\cvsrepを指定します。

リポジトリ(アーカイブ)の保管場所を追加する

 e.[OK]

 f.「Do you want to initialise it?」と聞いてくるので[はい]を選択

「Do you want to initialise it?」に「はい」とこたえる

 g.[適用]をクリック

(4)CVSサーバの起動

 [Service Status]タブで[Start]をクリック

 CVS Serviceの状態が「Running」になっていれば起動しています。

CVS Serviceの状態が「Running」になっていれば起動している

(5)ユーザー作成

 a.passwdファイルの作成

 [c:\cvsrep\CVSROOT]にファイル名「passwd」というテキストファイルを作成します。拡張子は付けません。

 b.「passwd」ファイルにユーザーを登録

 passwdファイルは次の形式になります。

【passwdファイルの形式
[ユーザーアカウント]:[パスワード]:[Windowsでの実行ユーザー]

【passwdファイルの例】
agata::Administrator
hashimoto::Administrator
atmark::Administrator
guest::Administrator

 例えば「atmark::Administrator」は、ユーザーatmark、パスワードなし、実行ユーザーAdministratorとなります。実行ユーザーはCVSサーバのリポジトリディレクトリ、テンポラリディレクトリに書き込み権限のあるユーザーを指定します。通常は管理者権限を持ったAdministratorユーザーなどにしておけばいいでしょう。新しく開発者が増えた場合はpasswdファイルに1行付け足していく形になります。

コラム:CVSのパスワードについて

 パスワードは標準UNIXの関数crypt()で暗号化して登録します。ただし、ここでは、パスワードは設定しません。社内LAN上にCVSサーバを立てることを前提としていますのでパスワードは必要ないでしょう。また、パスワードを設定しないことで、ペアプログラミング時のユーザーアカウントの切り替えを素早く行えるというメリットもあります。ただし、ユーザーアカウントは全員分設定することをお勧めします。CVSのログを見ればコミットしたユーザーが分かりやすくなります。

 さて、いよいよ次回はクライアントにEclipseを採用し、「コードの共同所有」の真髄に迫ります。


プロフィール
縣俊貴(あがた としたか)
 メディアファイブ株式会社所属。XML,フレームワークを中心に開発業務に携わる。Javaのコミュニティー団体であるMobsterを主催。現在MonsterにてJavaベースのWikiシステム「MobWiki」を開発している。

橋本正徳(はしもと まさのり)
 メディアファイブ株式会社所属。XML、フレームワーク等の開発業務に携わる。Javaのコミュニティー団体である「Mobster」を縣と共に発起、運営。現在mobsterにてバグトラッキングシステム「mobbug」等を開発している。「日本XPユーザーグループ関西支部 九州分科会」にも参加。ちなみにこの記事自身もCVSでバージョン管理し、縣と橋本とで共同所有されて書かれている。

Project Mobster(ぷろじぇくと もぶすたー)
福岡県福岡市を中心にJava言語を研究追求し、その成果物をWeb上に公開していく団体です。年齢・スキル・会社などを超えてボーダーレスに活動しております。

IT Architect 連載記事一覧

この記事に対するご意見をお寄せください managemail@atmarkit.co.jp

「ITmedia マーケティング」新着記事

イーロン・マスク氏がユーザーに問いかけた「Vine復活」は良いアイデアか?
イーロン・マスク氏は自身のXアカウントで、ショート動画サービス「Vine」を復活させるべ...

ドコモとサイバーエージェントの共同出資会社がCookie非依存のターゲティング広告配信手法を開発
Prism Partnerは、NTTドコモが提供するファーストパーティデータの活用により、ドコモオ...

「インクルーシブマーケティング」実践のポイントは? ネオマーケティングが支援サービスを提供
ネオマーケティングは、インクルーシブマーケティングの実践に向けたサービスを開始した...