Perforceを用いたUnityプロジェクト開発におけるPerforceの構成

こんにちは。アプリボットでクライアントエンジニアをやっている粟村です。

大量なアセットを用いるプロジェクトでは、アプリに使うアセットやそれに必要な素材をどのように管理するかを考える必要があります。その方法として、アプリボットではPerforceを用いた管理を行っているプロジェクトがあります。Perforceの説明や導入の経緯については以前ご紹介させていただいたこちらの記事を参照していただければと思います。

本記事では、そのPerforceを用いた管理において重要となる構成について、私の所属するプロジェクトにおける構成に至るまでの経緯を順番に説明していきたいと思います。


目次

  1. 構成を考える際に必要となるPerforceの要素
  2. Perforceの構成
  3. まとめ

1. 構成を考える際に必要となるPerforceの要素

まずはPerforceの構成を考える際に必要となるPerforceの要素について説明していきます。

図1: Perforceの要素

Perforceの主要な要素は下記のようになります。

  • Server: サーバー。Perforceにおいては複数のDepotを持つことができます。
  • Depot: ファイルを格納するリポジトリ。Steamを作成して用います。
  • Stream: 属性を持つブランチ。属性はストリームタイプと呼ばれ、MainlineやDevelopmentなどがあります。

本記事で用いるストリームタイプは下記になります。

  • Mainline: 親の存在しないストリーム。安定した基幹として使用されます。
  • Develop: 親より安定性の低いストリーム。開発用に使用されます。
  • Virtual: 特殊なストリームタイプで、フィルターの役割を果たします。実際のストリームの表示内容を制限してワークスペースに表示できます。

1ではab.co.jpのServerにstreamDepotと名付けられたDepotがあります。Depotは複数作ることができ、用途によって分けて使います。

streamDepotにはmainStreamと名付けられたMainlineのStreamと、それを親としてdevelopStreamと名付けられたDevelopのStreamがあります。DevelopのStreamは一つの親Streamから複数作ることができます。

mainStreamから作られているもう一つのStreamであるvirtualStreamはVirtualで作られたStreamです。Virtualは一部のファイルだけ扱いたいときに用います。この場合では、mainStreamでファイルのバージョン管理を行うが、その中の一部ファイルのみ扱いたい人はvirtualStreamを用います。

以降では、このような要素を用いて説明していきます。


2. Perforceの構成

私の所属するプロジェクトでは下記の方針を元に構成を考えました。

  1. “アプリで使うアセット”と”アセットに使う素材”を分けて管理したい
  2. アセットは複数バージョン並行して開発を行うことがある

1. についてのみ対応するだけであれば、下記のような構成で対応することができます。

図2: Virtual Streamによる素材管理

こちらの例では、一つのDepotに対してVirtualのStreamを2つ作り、assetStreamで”アプリで使うアセット”を、sourceStreamで”アセットに使う素材”をそれぞれ扱えるようにすることでファイルの分別を行っています。ですが、こちらは複数バージョンの並行開発には対応していません。(無理矢理対応させることもできなくはないですが、バージョンごとにディレクトリを作るなど構成が複雑になるためおすすめしません。)

下記のような構成ではどうでしょうか。

図3: 複数Depotによる素材管理

こちらの例では、Depotを複数に分けることでファイルの分別を行っています。また、Stream TypeがMainlineのStreamは、それを親としてDevelopのStreamを複数作ることができます。なので、MainlineのStreamを起点としたバージョンごとのStreamを作ることで複数バージョンの並行開発に対応することができます

また、“アセットに使う素材”は並行開発を想定する必要が無いので、sourceDepotではDevelopを用いていません。代わりに、Virtualを用いることでファイルの種類ごとにStreamを分けています。このようにしておくことで、「イラストレーターの方はimageStreamで画像ファイルのみを扱い、モデラーの方はmodelStreamでモデルのみを扱う。」のような運用ができます。全体を俯瞰する必要がある人はmainStreamを扱うと良いでしょう。


3. おわりに

このように、構成によってできることが違うのに加え、一度開発が走り出してしまうと途中で構成を変えるのは困難になることが多いため、開発初期からしっかりと考えておくことが重要です。

Perforceを用いたプロジェクトで構成を考える際に本記事が参考になれば幸いです。今後も運用しやすい手法等ありましたらご紹介させていただきたいと思います。


関連記事一覧

  1. この記事へのコメントはありません。