ゲーム開発においてバージョン管理システムは開発の中核を担う重要なものです。
Subversion、Git、Perforceをそれぞれ3年以上使った経験から、各バージョン管理システムのメリットとデメリットをまとめていきたいと思います。
Subversion
○ 導入コストが安い
○ 仕組みがシンプルで分かりやすい
○ TortoiseSVNが使いやすく、とっつきやすい
○ ファイルの排他ロックがある
× コードレビューの仕組みがない
× 巨大なファイルを扱うと重くなりやすい
× ブランチを作ると丸ごとコピーになるため、プロジェクトが肥大化するとブランチコストが高くなる
古さゆえにシンプルで、色々な職域の人が作業するゲーム開発において「分かりやすさ」の一点において優れています。
ただしプロジェクトが肥大化すると巨大ファイルを扱うと重い・ブランチ作成のコストが高いといった理由で運用コストが跳ね上がります。またコードレビューの仕組みがないため、コードの品質担保が難しい側面があります。
Git
○ 導入コストが安い
○ GitHubを使うことでコードレビューが容易
○ ブランチがローコストで作成できる
× 競合の解決方法が分かりづらく、事故が起きやすい
× 100MBを超えるファイルをコミットするにはGitLFSなどのサポートが必要
× ファイルの排他ロックがない(拡張すれば使えるようになるらしい)
GitHubの存在のおかげで導入コストが安く、またPullRequestによる仕組みがあるのでコードの品質担保が容易です。
ブランチ間を移動するのも早く、プロジェクトが肥大化してもブランチ運用のコストが上がりにくいです。
しかし元々ソースコードのためのバージョン管理システムだったこともあり、リソースを扱うことが苦手です。
GitLFSがないと100MBを超えるファイルはコミットできませんし、バイナリファイルを扱う際に便利な排他ロック機能もありません。
またコミット・プッシュ・プルの仕組みを理解していないと競合の解決で事故が起きやすく、色々な職域の人が作業するゲーム開発においてはデメリットです。特にチームの人数が増えるとトラブル解決のコストも大きくなります。
Perforce
○ コードレビューの仕組みがある(ただしGitHubほど洗練されていない)
○ 巨大なファイルを扱っても重くなりにくい
○ ファイルの排他ロックがある
× 導入コストが高い
× ブランチを作ると丸ごとコピーになるため、プロジェクトが肥大化するとブランチコストが高くなる
× 日本語の資料がほとんどない
基本的な使い方はSubversionに似ていますが、巨大なファイルを扱うのに長けています。
ゲーム開発は巨大なファイルを扱うことが多いので、この一点だけでも非常にメリットがあります。
Gitのようなコミット・プッシュ・プルの仕組みがなく、分かりやすさも強みです。
コードレビューの仕組みはHelix Swarmというものがあり、GitHubほどではないですが可能です。
ですが商用なので個人が扱うには敷居が高く、日本語の資料もほとんどないため非常に玄人向けです。
GitHubのように気軽にブランチを行き来する機能がないのも残念な点です。
所感
大規模なコンソールゲームならPerforce一択、個人開発や小~中規模のカジュアルゲームならGitHubというところでしょうか。
Subversionは分かりやすくはあるのですが、さすがに昨今の開発事情を考えると選ぶケースはあまりないのではと思います。
将来的にPerforce導入予定で、その繋ぎとしてならありかもしれません。
ちなみに筆者はCVS→VSS→SVN→Git→Perforceと使ってきました。