Monday, October 3, 2016 5:00AM to 11:00AM (UTC) Schedouled down time to change site domain

CVS/Subversionを使ったバージョン管理(後編:SVNを使ったバージョン管理)

 本特集ではバージョン管理システムの基本的な考え方や用語を解説するとともに、SubversionやCVSを使ったバージョン管理方法について説明していく。前編中編ではバージョン管理の基本事項やCVSについて解説してきたが、後編となる本記事では、Subversionの利用について解説する。

 Subversionは、CVSの後継として開発されたバージョン管理システムだ。CVSでは対応していない、ファイルのリネームや移動、「アトミックなコミット」といった機能が実装されており、リポジトリ管理がより柔軟に行えるため、近年ではバージョン管理にSubversionを利用する例も多い。

Subversionの導入

 SubversionはUNIX/Linuxのほか、WindowsやMac OS Xといったさまざまなプラットフォームで利用できる。Subversionのソースコードやバイナリは、Subversionダウンロードページから入手できる。このページには、AIXやHP-UX、Solarisといった商用UNIXやWindows、Mac OS X、各種LinuxやBSD向けバイナリの配布先へのリンクも掲載されている。また、多くのLinuxディストリビューションやFreeBSD、OpenBSD、Cygwinなどでは、標準のパッケージマネージャからのインストールが可能だ。

 WindowsでSubversionを利用する場合は、Subversionの開発を主導しているCollabNetが提供する公式バイナリインストーラを利用するとよいだろう(ダウンロードページ)。SubversionのCUIクライアントであるsvnコマンドだけを使いたい場合は、「CollabNet Subversion Command Line Client」のみをダウンロードすればよい。

 また、Mac OS X向けには「openCollabNet」プロジェクトにより、バイナリインストーラが提供されている(ダウンロードページ)。そのほか、FinkMacPortsといったパッケージ管理システムからもバイナリが入手可能だ。

 なお、Windows向けのTortoiseSVNなど、GUIでSubversionリポジトリにアクセスできるツールも存在する。これらについては別途解説記事を設けてあるので、そちらを参照してほしい。

Subversionリポジトリの作成

 Subversionでは、リポジトリへのアクセス方法として複数のプロトコルが利用できる。Subversionで利用できるプロトコルは下記の表1のとおりだ。

プロトコル 説明
file ローカルのファイルシステムにアクセスする場合に使用する
http、https サーバーとしてApache httpdを使用する
svn サーバーとしてSubversion付属のsvnserveを使用する
svn+ssh サーバーとしてSubversion付属のsvnserveを使用し、さらにSSHを利用して暗号化された通信経路を使用する
表1 Subversionで利用できるプロトコル

 もし既存のSubversionリポジトリに接続する場合は、リポジトリ側が推奨するプロトコルを使用すればよい。たとえばSourceForge.JPのSubversionリポジトリでは、httpおよびsvn+sshが利用できる(httpによるアクセスはチェックアウトのみ可能)。

 一方、自分でSubversionサーバーを用意する場合は、どのプロトコルを利用するか事前に検討しておく必要がある。使用するプロトコルによってサーバーの設定方法などは異なるので、注意が必要だ。

 サーバーの設定が完了したら、サーバーのファイルシステム内にリポジトリを作成する。リポジトリの作成には、Subversionに付属するsvnadminコマンドを使用する。まず、リポジトリのルートディレクトリとして使用するディレクトリを作成し、続いて「svnadmin create」コマンドを実行する。

$ svnadmin create <リポジトリのルートディレクトリ>

 これにより、リポジトリのルートディレクトリにデータベースや設定ファイル一式が作成され、リポジトリが利用できるようになる。

Subversionサーバーの設定

 Subversionでは、利用するプロトコルにより、利用するサーバーが異なる。最もセットアップが手軽なのが、svn+sshプロトコルを利用する場合だ。この場合、SSH経由で自動的にsvnserverが起動されるため、svnserveプロセスを常時立ち上げておく必要はない。また、認証はSSHによって行われるため、「SSHでアクセス可能なユーザー」=「リポジトリにアクセス可能なユーザー」となり、ユーザー管理が行いやすい。

 一方、WindowsをSubversionサーバーとして利用する場合や、SSHを使用したくない、といった場合はsvnプロトコル、もしくはhttp/httpsを利用することになる。svnプロトコルはセットアップが容易で、設定ファイルを用意してサーバーとなるsvnserveプロセスを動かしておくだけで利用可能になる。ただし、通信内容の暗号化や、通信ログの保存などには対応していない。それに対し、httpやhttpsは別途Apacheおよびmod_dav_svnモジュールのセットアップが必要となる。これらについては本記事内では触れないので、別途Subversion付属のマニュアルなどを参照してほしい。