Subversion+svkでらくらく分散リポジトリ

第1回 Subversionを使おう

この記事を読むのに必要な時間:およそ 6 分

Subversionのセットアップから,基本的な操作方法を説明します。

Subversion概要

ソースコードのバージョン管理システムは,ソフトウェアの開発の中でもっとも重要なツールです。チームで開発を行なうときにソースコード管理システムは必須のツールの一つですが,ソースコードだけでなく様々なフィアルも管理できます。単にチームとしての利用だけでなく,個人のツールとしても威力を発揮します。筆者も,個人でバージョン管理システムを導入して,原稿やサーバの設定ファイルなどのドキュメントの管理をしています。

バージョン管理システムとして,以前はCVSが多くのプロジェクトで利用されていました。しかし,CVSは履歴を保持したままでのファイルの移動ができないなどの問題もありました。SubversionはCVSが抱えていた問題を解決するために開発されました。現在では,多くのプロジェクトでSubversionが利用され,CVSからSubversionに移行したプロジェクトも多々あります。SourceForgeでも,CVSと同様にSubversionも利用することができます。

Subversionの利点の一つに,履歴を保持したままファイルやディレクトリの移動や削除が行えることがあります。プロジェクトの初期段階では,ファイルやディレクトリ構成が定まらないまま開始することが多いです。CVSでは,ディレクトリやファイル名を変更(削除と追加)すると履歴が失われてしまいます。Subversionではディレクトリやファイル名を変更しても履歴が保持されるので,プロジェクトの成長にあわせてディレクトリ構成を柔軟に変更できます。

利点の2つ目として,複数のファイルをまとめてコミットすることで,ファイルのセット(複数のファイル)に対して一つのリビジョンが割り振られることが挙げられます。コミットとは,ローカルで編集した内容をサーバのリポジトリに反映することです。リポジトリとは,バージョン管理システムのサーバ上にデータ(ファイル)をためておく場所のことです。バージョン管理用のデータベースと考えてください。ソースコードをコミットするときに,複数のファイルのセットで初めて意味を持つ変更があります。そのような場合,古いリビジョンに戻すときに複数のファイルを同時に戻さないとソフトウェアが正しく動作せず,コンパイルできないケースもあります。CVSではリビジョンを個々のファイルに対して割り当てるため,古いリビジョンに戻す作業は煩雑になります。Subversionでは,リポジトリ全体に対して指定したリビジョンを指定するだけです。また,リビジョン間の差分を確認する場合も,CVSでは個々のファイルに対して差分を確認する必要がありますが,Subversionではリポジトリ全体に対して確認するだけで,リビジョン間で変更があったファイルの差分を全て表示できます。

利点の3つ目として,ネットワーク負荷の軽減があげられます。現在のリビジョンとローカルでの変更分の差分を表示する場合,CVSでは差分を表示するたびにネットワーク経由でローカルでの変更の差分を確認します。Subversionでは,作業用のファイルとは別に,リポジトリの最新バージョンのファイルをローカルに保持(キャッシュ)して,差分の表示はキャッシュに対して行うため,ネットワークやSubversionの負荷が軽減され,高速に表示できます。ただし,古いリビジョンとの差分比較をネットワーク経由で行うのはCVSと同様です。また,ローカルにキャッシュを持つため,単純に実ファイル容量の2倍の容量が必要になります。

また,CVSでは独自のプロトコルか,SSH経由でしかCVSサーバにアクセスできませんが,SubversionはHTTPやHTTPSでのアクセスが可能です。ファイアウォールなど企業内のネットワークからセキュリティポリシを変更することなく外部のSubversionのリポジトリにアクセスできます。

Subversionの動作概念図

画像

Subversionの開発当初は,コマンドラインツールしかなく,CVSに見劣りするところがありました。Subversionが普及するにつれて,TortoiseSVN(Windowsのエクスプローラを拡張したSubversionクライアント)や,Subclipse(EclipseのSubversionクライアント)など,グラフィカルなSubversionクライアントが開発され,周辺環境もCVSと同じかそれ以上に充実しています。

また,Subversionサーバも以前は,LinuxなどのUNIXやUNIXライクなOS上でしか動作しませんでしたが,現在ではWindowsへのインストーラが提供されるなど,サーバ運用の敷居も下がってきています。

Subversionインストールとサーバセットアップ

Subversionのインストールは,Subversionの配布サイトから,使用するサーバのOSに対応したバイナリパッケージを入手してインストールします。Windowsであれば,インストーラを使ってインストールします。Unix系のOSであれば,RPMなどシステムのパッケージ管理を利用して簡単にインストールできます。以下ではUbuntu Linuxを例に説明します。

コンソールから次のコマンドを実行します。

$ sudo aptitude install subversion

これでSubversionサーバを専用サーバで動かすためのソフトウェアとクライアント一式がインストールされます。インストールには,コマンドラインからではなく,Synapticを使用することもできます。ソースコードからビルド,インストールもきますが,ここでは割愛します。

インストールが終了すると,Subversionの管理コマンドが使用できる状態になっています。次にSubversionのリポジトリを作成します。リポジトリを作成するときは,Subversionの管理ツールのsvnadminコマンドを使います。リポジトリを/tmp/myrepositoryに作成する場合は,次のコマンドを実行します。

$ svnadmin create /tmp/myrepository

Subversionのユーザ管理は,リポジトリのディレクトリの設定ファイルで設定します。/tmp/myrepository/conf/svnserve.confを開いて,次の行を変更します。各行の#以降はコメントとみなされます。ここでは,ユーザ認証にpasswdファイルを使用する,という意味になります。

変更前:

# password-db = passwd

変更後:

password-db = passwd

次に同じディレクトリにあるpasswdファイルを編集します。[users]の行の下に次の形式でユーザとパスワードを指定します。

ユーザ名 = パスワード

一行に一人のユーザを指定します。スペースは無視されます。テスト用のユーザ「test」をパスワード「testpasswd」で指定する場合は,次のようになります。

test = testpasswd

これで,サーバを動かすための設定が終わりました。次に実際にサーバを動作させます。コマンドラインから次のコマンドを実行します。

$ svnserve -d --foreground -r /tmp/myrepository

Subversionの専用サーバはsvnserveで起動します。ここでは,-dでデーモンとして起動するように指定しています。デーモン以外にもinetd経由で起動する場合の-iというオプションもあります。オプションで--foregroundを指定しない場合は,バックグラウンドプロセスになります。-rで先ほど作成したリポジトリへのパスを指定します。--pid-fileでpidファイルを作成できます。

サーバが起動したので,サーバにアクセスしてテストしてみます。svnserveが動作しているコンソールとは別のコンソールを立ち上げて,myrepositoryをチェックアウトします。

$ svn checkout svn://localhost/ test

コンソールに「Checked out revision 0.」と表示されて,カレントディレクトリにtestというディレクトリができていれば成功です。

Subversionのサーバは専用サーバとしても動作できますが,sshのトンネリングと組み合わせることで,ネットワーク上をセキュアに通信できます。また,次回紹介するApacheなどのHTTPサーバと組み合わせることで,柔軟なユーザ認証のシステムの構築やファイアウォールへの対応ができるようになります。筆者の社内でもApacheをフロントエンドにして,HTTP/HTTPSで運用しています。

著者プロフィール

大谷弘喜(おおたにひろき)

アリエルネットワーク株式会社所属。P2PアプリケーションやWebアプリケーションの設計,開発。Python大好き。

コメント

  • Re:

    × フィアル
    ○ ファイル

    Commented : #1  誤字 (2007/12/07, 14:19)

コメントの記入