PERFORCE の特徴とゲーム開発で使う理由

はじめに

バージョン管理システム(VCS)、プログラマーの必需品ですね。プログラマーなら知らない人はほぼいないかと思います。
一昔前なら Subversion(SVN)、今だと git を日々活用されているのではないでしょうか。

PERFORCEもバージョン管理システムの一つです。
SVN や git に比べると認知度は低い印象ですが、海外では広く利用されているという話はよく耳にします。日本でもここ数年徐々に映像業界やゲーム業界で利用している企業が増えてきてるのでは?となんとなく感じています。

この PERFORCE ですが、私も気づけば 10 年近く触っています。
こんなに長く利用している PERFORCE なのですが、いまだに奥が深く試行錯誤することが多いです。

そんな PERFORCE についてゲーム開発に限定した部分もありますが、↓のような感じで数回に分けて記事にしていこうかと思います。 (変わる可能性があります…)

  • PERFORCE の特徴と使う理由 👈今回の記事
  • PERFORCE で気を付けること
  • サーバースペックの決め方
  • 複数サーバー構成を利用するシーン
  • クライアントの最適化

※ 数年前に Helix Core に改名されたのですが、個人的には PERFORCE のほうがなじみ深く愛着があるので、PERFORCE で書かせてもらいます。

私の PERFORCE 歴

私は 10 年近く、今も PERFORCE に携わっています。
振り返ると PERFORCE を利用するために必要なことは、ほとんどやってきたなぁと感じています。
PERFORCE の全てを熟知しているわけではないですが、ここまでやっている人もマレではないかと勝手に思っています。

  • サーバー機器の調達、設備やネットワークなど整備
  • PERFORCE ライセンスの調達・管理
  • PERFORCE サーバーの構築・運用
  • PERFORCE 高速化やディスク容量確保のための構成変更
  • PERFORCE トリガー実装
  • PERFORCE コマンドラインツール、P4V カスタムツール、SDK を利用したクライアント環境の整備
  • ユーザーサポート、トラブル対応

幸運なことに PERFORCE ユーザー数 500 人を超える開発現場で2回もこのような経験をすることができました。
この経験で学んできたことをベースに書いていきます。

あ、ちなみに私はプログラマーです。
インフラやサーバーは専門ではありません!なので間違いもあるかもしれません、悪しからず…

PERFORCE をゲーム開発で使う理由

ゲーム開発で SVN や git ではなく、何故 PERFORCE を利用していたのか?
答えはいたってシンプルで、高速だからです。Wikipedia の長所にも書いてますね。

私の経験した現場は、PS4、PS5 などのコンシューマーゲームの大型タイトルでした。
大型タイトルになるとゲームに組み込むファイルはもちろん、編集用のアセットを含めると、ファイス数は軽く数百万、ファイルサイズも合計 数 10TB を軽く超えてきます。
コンシューマー機の性能が上がれば、おのずと必要なデータもリッチになり数量・サイズも右肩上がりです。

ファイル数やサイズが大きくなると、VCS で管理するモノも増えますよね。
モノが増えるとサーバー ⇔ クライアントでのファイルのやり取りが大変になります。ダウンロードやアップロードにかかる時間が増え、ストレージへのデータの読み書きにかかる負荷も大きくなります。

バージョン管理にかかる時間が増えると、それだけ待ち時間が発生するので機会損失 になりますよね。だからより高速な VCS が必要になり、選択肢の一つとして PERFORCE を選んだわけです。

※ 待ってる時間はもったいないですよね。待ち時間を減らして、もっと面白いものを作る時間に充てることができるなら、それだけゲームのクオリティを上げることができますよね。

PERFORCE の特徴

さてここで PERFORCE の特徴について見てみましょう。
私が長年さわってきた感触に基づいて書いてますので、公式のものとは異なるかもしれません。悪しからず…

〇 高速なファイル取得

PERFOCE の最大のウリです。
PERFORCE は普通に使うだけでも他の VCS より高速なのですが、これに加えて高速化のための仕組みが充実しています。

※ 数年前に SVN と速度比較をしました。履歴数もファイル数も同じだけ格納したマシンで、ネットワークも他の通信の邪魔の入らない状況で計測したら、なんと 3 倍高速でした。

〇 柔軟で拡張性の高いサーバー構成

PERFOCE が高速である秘密のひとつです。
作業場の設備や PERFORCE を利用する人数など、さまざまな状況にあわせてサーバー構成をカスタマイズすることができます。

〇 サーバー管理型

SVN や git はローカルに落としたファイルの作業状況はクライアントが持ちますが、PERFORCE はサーバーに持ちます。
これも PERFORCE が高速である理由のひとつではあるのですが、操作方法に少々クセを生む要因かなと思っています。

※ 基本的に PERFORCE はファイルを編集する前に「ファイルを編集するよ」と宣言しなければなりません。SVN や git に慣れている人にとっては、この操作が少々クセがあるものだと思ってます。


ざっとこんな感じでどれも高速化に関係するものばかりで、PERFORCE はユーザーがとことん速度を追及できてしまう柔軟性をもった製品なのです。
この点が多量かつ大容量のファイル群を扱うゲーム開発や映像制作と相性が良く、選ばれる理由になっているのだと考えています。

※ 他にも PERFORCE を中核としたコラボレーション機能があったりするのですが、個人的には PERFORCE の最大のウリは高速であることと思ってますので、今回は外しています。

まとめ

さて今回は PERFORCE の特徴と、何故ゲーム開発で利用するのかにふれました。

繰り返しになりますが、PERFORCE は高速です。
ユーザーが高速化を追求する仕組みも充実し、多量かつ大容量のファイルを扱うゲーム開発のようなシーンとは相性が良いから利用されるのです。

ですが、PERFORCE を使う上で気をつけなければならないこともたくさんあります。
高速化を追求できる機能が充実している反面、機能が充実しているが故に使い方に工夫が必要です。
また一歩間違うと逆に遅くなったり、下手すると障害に発展するようなことにもなってきます。

次回はこのあたりを記事にできればと思います。