アプリボットにおけるPerforceの導入事例の紹介

こんにちは。新規ゲーム開発のプロジェクトでクライアントエンジニアをしている久保です。

今年からアプリボットではバージョン管理システムとして「Perforce」を導入しましたので、利点やTipsを紹介したいと思います。

Perforceとは

商用のバージョン管理システムです。
製品開発自体は海外の会社で行われており、日本では東陽テクニカ様が代理店として販売管理されています。
他のバージョン管理システムと比べて高速であることが長所で、特に巨大なバイナリファイルを扱うことが得意なのでリソース量が大きくなりがちなゲーム開発に向いています。

実績

コンシューマーゲーム業界で採用されているケースが多いです。
CEDECの発表資料を検索すると、カプコン様のMONSTER HUNTER WORLDなど有名タイトルの開発でも採用されていることが分かります。
http://cedil.cesa.or.jp/cedil_sessions/view/1686
http://cedil.cesa.or.jp/cedil_sessions/view/1365
http://cedil.cesa.or.jp/cedil_sessions/view/365

他のバージョン管理システムとの比較

ざっと比較表を作ってみました。
(私の主観も多少入ってるので、「gitでもこれできる」とかあったら教えてください)

Git (LFS) Perforce Subversion 共有フォルダ管理
バージョン管理ができる ✖️
ライセンス料金 不要 年間ライセンス 不要 不要
巨大バイナリファイル性能 △(バイナリファイルの扱いが苦手)
ファイルロック機能
部分チェックアウト △(git submoduleを使う)
マージ機能 ✖️
外部ツールとのAPI連携(slack連携など) ✖️
ユーザアクセスコントロール
今でも新バージョンの開発がされているか ◯(活発) ?
GUI SourceTree など P4V(公式) tortoiseSvn など ファイルエクスプローラー
CUI(コマンドによる操作) ✖️

Perforceと他のバージョン管理システムを比較すると、ライセンス料金が必要かどうかが大きな違いになります。
アプリボットでは、Perforceを導入することによってかかる費用よりも、期待される開発効率の向上のほうが利点として上回ると考え導入を進めました。

初期導入でハマった点とTips

Unicodeモードで起動

ここが一番のハマりポイントです 。このUnicode モードが有効になっていないと、Mac/Windowsユーザ間での日本語を含むファイル名が文字化けします。
このUnicode モードはデフォルトでは無効 なので、Perforceサーバを構築する際に明示的に有効にする必要があります。
詳しいやり方はこちらのページを参照してください。
https://www.toyo.co.jp/ss/contents/detail/technical_note066.html
(色々試した結果、結局最初からUnicodeモードONで構築し直しになりました・・・)

ファイル名に使えない記号

Perforceではファイル名に使える記号に制限があります。
https://www.perforce.com/perforce/r17.1/manuals/cmdref/Content/CmdRef/filespecs.synopsis.limitations.html

ここで導入時にハマったのが、ファイル名に “@” が含まれるケースです。
FBXのファイル名に@を使うことで、アニメーションクリップの名前を変換できる小技があるのですが、これを使っていると Perforce が怒ってきます。

force add することで “@” をPerforce内部に “%40” に 変換して扱うことが可能ですが、 force add のオペレーションが必要になるので運用利便性とのトレードオフになるので注意です。

クラシックdepotじゃなくてストリームdepotがおすすめ

Perforceで 最初にdepot(リポジトリ)を作成する時に、「クラシック」か「ストリーム」かを選択できますが、「ストリーム」にすることをオススメします。
クラシックdepotはその名の通り、昔ながらのシンプルな構成で Subversion などと同じ使い方が想定になります。
ストリームdepotは後から追加された構成で、クラシックdepotよりも色々機能が追加されて柔軟な使い方ができるようになっています。
クラシックでできることはストリームでもできて、逆にストリームでできることがクラシックではできないので、最初からストリームで作っておいた方が後になって色々やりたい時に便利かなと思います。

ストリームを使った例

ストリームについては公式マニュアルに詳しく書いていますが、今回は「バーチャルストリーム」を用いた利用例を紹介します。
バーチャルストリームはフィルター機能のようなものです。
例えば以下のようなフォルダ構成のプロジェクトがあった時、

人によっては、
「/UIと/Soundフォルダ は扱うけど、/Chara, /BG フォルダは触らない」
「/BGフォルダだけを扱う」
「/Chara フォルダ配下を扱うけど、拡張子が .ma のファイルはいらない」
などの様々な要望が出てくると思います。
バーチャルストリームを作成し下記のようなフィルタルールを適用すると、 /UI と /Sound フォルダだけを扱う人向けのストリームが作成できます。

また、現在どんなストリームが存在しているのかを公式のGUIツールでグラフィカルに表示できます。

引用: https://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r14.3/manuals/p4v/streams.virtual.html

さいごに

他のバージョン管理システムに比べて費用はかかりますが、それに見合う費用対効果はあると感じます。
まだまだ導入して半年程度ですのでノウハウは溜まっていませんが、便利な使い方や周辺の開発ツールなどを作成できましたらまた紹介したいと思います。