ユーザープロフィール

ゲストさん

主なバージョン管理システムとその特性。主なクライアントソフトウェア

主なバージョン管理システムとその特性。主なクライアントソフトウェア

システム開発においてバージョン管理は当たり前なものになっています。一つのバージョン管理システムを導入していれば、常にそれを使い続けることでしょう。しかしバージョン管理システムはそれぞれ特徴があり、特徴に応じて使い分けたり、現状の開発スタイルに合わせて変化させていくべきです。

今回は主なバージョン管理システムに関する説明と、それぞれのシステムに合ったクライアントソフトウェアについて取り上げます。

CVS

複数人でソースコードを管理する際に最初に触ったのがCVSでした。CVSはファイル単位でバージョンを管理しています。それが利点になる場合もあるのですが、まとめてコミットした場合にそれを追いかけるのがログメッセージしかないというのが難点です。WinCVSというクライアントソフトウェアが有名です。

サーバ/クライアントの形をとっており、サーバ側でソースコードのリポジトリを統合的に管理しています。

SmartCVS

SmartCVSはWindows、Mac OSX、Linuxのいずれでも提供されています。皆が同じクライアントソフトウェアを使えば余計な混乱が抑えられます。Diffやリビジョンログ、タグの追加や削除、ブランチの作成などもSmartCVSから一括して操作可能です。多機能と言う訳ではありませんが、通常の運用では問題ないでしょう。Mac OSXでCVSを使われる方はSmartCVSを使ってみてください。

CrossVC

CrossVCはCVSクライアントソフトウェアです。CVSクライアントとして有名なのはWinCVSでしょう。ですが、これはWindows専用です。CrossVCはマルチプラットフォームに対応します。むしろWindows以外(Linux、Unix、Mac OSX)向けとも言える。Windows版は非商用に限ったフリー版か、シェアウェア版しかありません。基本的な操作は一通りできます。Linuxで使うと日本語化されているので操作も楽です。ローカルリポジトリの作成や、Diffを内蔵、グラフィカルなリビジョン表示等、多機能です。

Subversion

CVSの次につかいはじめたのがSubversionでした。有名なTortiseSVNというクライアントソフトウェアがあり、今でも高い人気があります。CVSと同じようにサーバ/クライアントで管理されます。コミット単位で管理されるので、複数のファイルをまとめてコミットしても追跡できます。またリネームや移動もコマンドが用意されており、ログが継続管理されます。

CVSでは独自のプロトコルを使ってアクセスしますが、Subversionではデフォルトのsvnの他に、Apache/WebDAVと組み合わせてHTTPでもSubversionにアクセスできました。そのため外部にリポジトリを設置して、複数人でアクセスするといった使い方が広がりました。

サーバが集約してリポジトリを管理するため、オフライン時にはコミットできないという難点がありました。現在ではsvkを使って擬似的にコミットしたりロールバックすることができるようになっています。

Submin - お勧め!使い勝手の良いSubversion管理フロントエンド

Subminのお勧めできる点として、格好のいいインタフェースがあります。ユーザの作成、グループの作成そしてリポジトリの作成と全てWebベースで行えます。インストールさえしてしまえば、ターミナルを使ってメンテナンスすることはまずなさそうです。色合いなども何となくApple純正のソフトウェアのようなイメージでいいです。ユーザやリポジトリを作成したら、HTTPベースでチェックアウトできます。TracのURLを記載するようになっており、Subminではリポジトリのブラウズ機能は提供されていません。ディレクトリごとにアクセス権限を設定することも可能です。

SVN Access Manager - Subversionの管理用インタフェース

SVN Access ManagerはPHP+MySQLで作られたWebベースのSubversion管理インタフェースです。ユーザやグループを作成し、プロジェクトとリポジトリとを組み合わせてアクセス権限を管理できます。リポジトリのアクセス権限を管理する設定ファイルを出力することができたり、ファイルへのアクセス権限を設定したりすることもできます。また、リポジトリへのアクセスやログをレポートとして表示する機能もあります。

StatSVN - Subversionのステータスを見える化

StatSVNはSubversionから出力されるログ情報を解析してHTMLやグラフに変換するソフトウェアです。解析元になるデータは、XML形式でsvnコマンドで出力する必要があります。そして、そのXMLデータを解析すると、一気にファイルが出力されます。開発者ごとに開発行数、Subversion全体における行数の変化、平均ファイルサイズ、ログメッセージを月ごとで出力と言った機能があります。日本語のコミットログは文字化けするが、HTMLの文字コードをShift-JISにすれば解消します。ユーザごとのステータスも各種とれるので、プロジェクトにおける貢献度や活発度も分かりやすいです。ファイルサイズがあまり上がりすぎるようであればリファクタリングを検討するなどというきっかけにもなります。Subvesionをお使いの方は一度お試しを。

OOoSVN - OpenOfficeと連携するバージョン管理

OOoSVNはその名の通り、バージョン管理にSubversionを利用しています。OpenOffice機能拡張としてインストールすると、ホーム以下に.ooosvnというフォルダ(リポジトリ)を作成し、その中でバージョン管理を行います。後は修正しつつ、適時コミットを行っていけばいいでしょう。いざとなったらバージョンを戻したり、どこが修正されているのかといった情報を引き出せます。Windowsでもインストールはできますが、フォルダ作成でエラーが出てしまいました。LinuxまたはMac OSX(NeoOffice)では問題なさそうです。

DotSVN - .NET向けSubversionライブラリ

DotSVNは.NETで開発されたSubversionクライアントライブラリです。サンプルとしてGUIアプリケーションも付属しますが、基本的にライブラリを利用して自分のアプリケーションにバージョン管理機能を組み込むためのものです。サンプルアプリケーションは、ローカルのリポジトリしか扱えないので注意してください。また、コミットメッセージに日本語は利用できないようです。ライブラリはClient.dllとServer.dllの二つがあるので、サーバとして利用することもできるかも知れません。バージョン管理を組み込んだアプリケーションを開発してみたい人は注目のソフトウェアです。

Git

ここ数年で有名になったのがGitです。Gitはトップディレクトリにリポジトリを配置し、リポジトリとワーキングコピーを同一に扱うのが特徴です。そのため最初のコピー(クローン)時にこれまでの履歴を全てとってきます。ローカルにリポジトリが配置されますので、自由にコミットしたり過去のログを参照できます。

GitもSubversionと同じくHTTPベースで利用することが可能です。ただし認証パターンは多くないため、HTTPで利用する際にはSubversionの方が利便性が高いです。参照はHTTP経由、Push/Pullなどの操作はSSH経由で行うというのがお勧めです。

Gitはリポジトリが分散するため、分散型バージョン管理と呼ばれます。Pushしてはじめてメインのリポジトリに反映される形式になっていますので、更新が重なる(コンフリクト)することが多々あります。Gitはそのため、マージ作業がスムーズに行われる仕組みになっています。

Gity - Mac OSX用Gitクライアント

GityはGit操作に関して一通りの作業ができるクライアントソフトウェアです。リポジトリの閲覧に加えてブランチを一覧したり、追加することもできます。タグやサブモジュールの追加も可能です。差分の閲覧やコミット、Push、Pullなどの操作もできるので、ターミナルでの作業に不慣れな方でも使いこなせるようになるはずです。Git Configの修正機能があり、これを使えば見やすくGitの設定が編集できるようになります。Git自体オプションが多く、機能全体の把握が難しいがGityを使えば可能な操作が分かるようになるはずです。そうした学習もかねて使ってみるのも良さそうです。

Fatty - CakePHPによるGitリポジトリブラウザ

FattyはCakePHP製のソフトウェアであり、app/pluginsディレクトリ以下に配置して実行します。リポジトリのパスを設定すれば、後はブラウザからコミット履歴の一覧が見られます。もちろんその内容や変更点を閲覧することも可能です。さらにコミット一覧をドラッグして別なコミットにドロップすると、指定したコミット同士の差分を見ることもできます。これはなかなか面白い機能です。CakePHPの開発プロジェクトで予め設定しておいたりしても良さそうです。

Git# - C#によるGit実装

Git#はC#.NETで実装されたGitで、通常のGitコマンドと変わらない操作ができます。そのような使い方はもちろん、ライブラリとしてソフトウェア内部に組み込むことも考慮しています。デモとして簡易的なリポジトリブラウザが付属しています。また.NETで作られているとあってmonoでも動作するのが利点です。これによりWindowsはもとよりLinuxやMac OSXでもGit#が動作させられるようになります。APIが公開されているので、自作のソフトウェアでGitを使いことが容易にできそうです。

Git Extensions - 開発者必見!WindowsでGitを便利に

Git Extensionsは管理インタフェースであるGit Extensions、msysGit、KDiffなどを一括でインストールするソフトウェアです。新しいリポジトリの作成や既存リポジトリのクローンはGit Extensionsから行う必要がありますが、その後の簡単な操作であればエクスプローラから行えます。コンテクストメニュー(右クリックメニュー)からアクションを選べば良いのはTortoiseSVNと変わりありません。とは言え現状ではアイコンの色を変える機能はないので、その点が若干難点かも知れません。さらに言えば日本語化されればベストでしょう。シェル拡張の他にもVisual Studio 2005/2008と連携するプラグインをインストールすることもできます。Web開発以外にも役立てることができます。Git ExtensionsはDiffの確認やグラフ表示機能があります。その他、Gitで行う操作はほぼGit ExtensionsからGUIで行えるようになります。

GitX - Mac OSXでGitを使った開発を行っているなら

GitXを立ち上げたら、既存のGitリポジトリを指定して開きます。コミットのログを見るヒストリーと実際のコミットを行うコミットの二つの機能があります。ヒストリーではブランチを切り替えてみることもできます。コミットでは差分を見ることもできます。色分けされているので見やすいのがいいです。さらにボタン一つで修正した内容をGithubのGistに送信してソースを閲覧することも可能です。この機能自体はGithubが提供するものですが、ソースをGithubで管理している必要はありません。検索やブランチの作成機能もあります。

ViewGit - WebベースのGitブラウザ

ViewGitはWebベースで利用できるので、開発者以外でも手軽にGitリポジトリに触れることができます。Pushごとに一覧したり、そこで変更されたファイルだけをリストアップすることができます。また、修正された内容を差分で表示したり、ファイル自体の内容をハイライトされた状態で閲覧したり、各ファイルをダウンロードすることができます。Pushされた内容をtar.gzやzipで固めた状態でダウンロードすることも可能です。他にも変更履歴をRSSフィードで配信する機能もあります。TagやHeadsも一覧され、Gitを運用する上で便利に使えるでしょう。管理ツールはまだまだこれからといった感のあるGitではありますが、日々の開発はコンソールで、履歴はWebで追うという方法は便利でお勧めです。

Git GUI - GitもGUIがあると便利に

Git GUIはTkで開発されたソフトウェアで、Windows、Mac OSX、Linuxとで動作する(試したのはMac OSX向けのみ)。標準で配布されているものではありませんが、Google Codeで配布されているバージョンであれば一部日本語化されています。可能な処理はレポジトリの作成、コミット予定ファイルの一覧、コミット、プッシュ、マージ、ブランチ、履歴表示などが可能になっています。一通りのGit操作がGUIから可能になっていますようです。インタフェースはそれほどこなれていないので、他のバージョン管理フロントエンドに比べると使い勝手が悪いかも知れません。が、基本はCUI操作であると考えると、便利に感じられるでしょう。

RabbitVCS - マルチプラットフォームで使えるバージョン管理フロントエンド

RabbitVCSはLinux、Debian、Linux用のバージョン管理フロントエンドです。開発の現場では当たり前になっていますバージョン管理システム。様々なバージョン管理がありますが、それらをまとめて扱えるクライアントソフトウェアがRabbitVCSです。Mac OSX版ではまだ思った動きをしなかったですが、LinuxやDebian版が提供されており今後に期待ができます。扱えるバージョン管理システムはSuversion/Git/Mercurialを予定していますが、現時点ではSuversionのみのようです。

msofficesvn - これは便利!ExcelやWordのツールバーからTortoiseSVNを使う

msofficesvnはMS Office 97〜2007で使えます。メニューに常駐するソフトウェアで、ExcelまたはWordで利用できます。インストールするとメニューにSubversionという項目が追加されます。これで準備は完了です。TortoiseSVNの機能を使っているので、インストールしておく必要があります。使えるのはファイルの追加と更新、ロックの取得と解放、コミット、差分、ログ表示そしてリポジトリブラウザとなっています。MS Officeには履歴管理機能がありますが、使い勝手が良いとは思えず個人的には使っていません。Subversionを既に運用の中で使っている人に導入してほしいソフトウェアです。オフィス系のツールとあって、非開発者にとって特に有益なソフトウェアになるかも知れません。問題点として、現在編集しているファイルに対してのみ操作を行うので、一括でコミットするということはできません。そのためプログラミングとは別で管理されている方が都合がいいかも知れません。

Mercurial(Hg)

Mercurialもまた分散型リポジトリです。特徴として、開発言語がPythonであるということがあります。サーバを立てることでHTTPベースでの利用も可能です。何よりスクリプト言語なので自分なりのカスタマイズがしやすいという利点があります。

コマンドはSubversionに近いと言われていますので、Subversionから乗り換える際には良い選択肢になりそうです。Googleのオープンソース・ホスティングであるGoogle CodeではSubversionとMercurialをサポートしています。

Amp - Mercurial互換のRubyクライアント

Ampはリポジトリの作成こそできないものの、それ以外のコマンドはMercurialと同じように実行できます。Rubyを使われる人にとってはこれでMercurialが随分とっつきやすくなるのではないでしょうか。もちろんコマンド以外から、コードからアクセスすることもできます。コミットや追加はもちろんプッシュやプルもきちんと行えます。Amp自体はかなり意欲的なプロジェクトでMercurialの他、Git/Bazaar/Subversion/CVS/Darcsにも対応しようとしています。つまり各種バージョン管理システムのフロントエンドを一手に引き受けてしまおうということでしょう。

the Hg-Git mercurial plugin - MercurialでGitを扱う

the Hg-Git mercurial pluginをMercurialの設定ファイルである.hgrcで指定したら、Gitリポジトリに対して「hg clone」が実行できるようになります。Gitのインストールは不要で、Mercurialがそのままラッピングして動作してくれます。今は開発中の段階であり、clone、gremote、gpush、gfetchといったコマンドのみ動作するようだ(筆者環境ではcloneも失敗しましたが…)。Mercurialさえ入れておけばGitも扱える、そうなれば開発者の習得コストは大幅に軽減されるでしょう。少なくとも共通のインタフェースからリポジトリのクローンやプッシュ、マージといった代表的な操作ができるようになるだけでも十分に便利です。両方覚えるのが面倒、と思っていた方はMercurialからはじめてHg-Gitが実用レベルになるのを待ってみるというのが良いのではないでしょうか。

MacMercurial - Mac OSX向けのシンプルなMercurialフロントエンド

MacMercurialを立ち上げると状況を伝えるウィンドウだけが開きます。このウィンドウは特に入力はせず、ログメッセージが流れるだけです。そして新しいウィンドウを作成し、そこにMercurialリポジトリを登録します。後はファイルの追加や変更があればリポジトリを開いてファイルの追加や更新を行います。メッセージが日本語で入れられるのが便利です。リポジトリは複数登録しており、そのセットでファイルを作成できます。複数のプロジェクトにまたがっていたり、必要に応じて複数のリポジトリをまとめて管理できます。ファイルの差分表示は外部プログラム(デフォルトではFileMerge)を使って行います。リポジトリを開いた際に、ステータスのチェックやコピー元のチェックも行うように設定が可能です。

Bazaar

Bazaarはサーバ集中型または分散型の両方をサポートしています。システムはPythonで作られています。有名なところとしてはLaunchpadというホスティングサービスで使われています。bzr-svnというプラグインを使うと、Subversionの基本的なサポートが可能になります。

WindowsやMac OSX向けにコマンドベースのクライアントは存在しますが、まだGUIベースでの高機能なクライアントソフトウェアはないようです。

Perforce

商用のバージョン管理システムです。GoogleやAmazonでも使われていることで有名です。実際に使ったことはないのですが、高速であること、大規模開発における堅牢製、ユーザ単位のライセンスであるために高価であるというのが特徴になっています。

Visual SourceSafe

Microsoftが開発するバージョン管理システムです。特にVisual Studioでの開発時に利用されます。個人的には一度使いましたが、リポジトリがすぐに壊れてしまった覚えがあります(何年も前なので今は違うと思いますが)。

元々は中央管理サーバ型ではなく、ファイル共有を使ってリポジトリを共有する仕組みになっていました(このためによく壊れていたようです)。現在のバージョン2005ではHTTP経由でのアクセスがサポートされています。

Monotone

分散型のバージョン管理で、リポジトリデータをSQLiteで管理しています。Windows/Mac OSX/Linux/BSDと幅広くクライアントが提供されています。CSVやRCSから乗り換える機能も提供されています。大規模向けではありませんが、社内数人程度で使う場合や個人での利用においては便利ではないでしょうか。

まとめ

バージョン管理システムの選定基準は色々です。グラフィカルなクライアントが必要であるか、セキュリティに関してはどうか、分散型かサーバ型かなど。日本語での情報量を見る場合もあるでしょう。日本の企業においてはSubversion、個人においてはGitが人気を集めています。それ以外でも開発環境によって選ぶべきバージョン管理があるはずです(親和性など)。サーバ集中型の場合はサーバに障害があった時から使えなくなるリスクがありますし、分散型の場合は紛失した場合にリポジトリ全体が盗み見られてしまうと言ったリスクも抱えます。自社のバージョン管理体制の見直しに役立ててみてください。

PR_infeed

PR_Relative

オウンドメディア運営会社の皆様へ

s

ページトップ