UE4でのPerforce運用・第一回

# はじめに
　UE4でのPerforce運用について経験から軽くまとめてみたいと思います。
　そもそもUE4というかUE3の頃からEpic Gamesの開発でもバージョンコントロールはPerforceを使用していたと思います。
　EULAライセンスのユーザーはGitHubからソースコードを落として来ますが、カスタムライセンスのUE4はPerforceで提供されます。
　そういった意味でもUE4とPerforceは相性が良く、ファイルサイズの大きなバイナリアセットの同期が高速です。Perforceはなかなか高価（特に日本で買うと）ですが、5アカウントまでは無料で使用できるので、個人や小規模な開発現場でも検討してみると良いと思います。

# サーバー、Helix Core編
　PerforceのサーバーはHelix Coreという名前です。以前はPerforce社の製品でしたが、現在はHelix社のブランドになっているので、サーバーだけ名前が変わったのでしょうか。クライアントは変わらずPerforceと呼ばれています。
　ここではLinuxでの運用としてお話します。
　ポイントだけで、セットアップの仕方とか細かい話はしません。[Helixのウェブサイト](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwj_gv2M4bXrAhVMppYKHexqAV0YABAAGgJ0bA&ohost=www.google.com&cid=CAESQOD2rIicAFGrvfEFOiyc17npR8eqyjgK5aQ31o8UHATrziHC7hdqFz8V90st4ebQdEWMb5exFWNIZ1oxmQgp_SQ&sig=AOD64_2riK40DlUmZIVkGZ2QG4J2a0kL8Q&q&adurl&ved=2ahUKEwjQr_aM4bXrAhUEZt4KHUNOA6UQ0Qx6BAgcEAE)
に行けば情報が得られるのでそちらを見てください。

## ポイント

### Case sensitivity

 ファイルの大文字と小文字を区別するかどうかを選択できますが、UE4では**区別しない**を推奨します。
 なぜかというと、UE4ではアセット名をFName型で管理しますが、こちらは大文字小文字を区別しませんしがクライアントがWindowsの場合、大文字と小文字が違うファイルやフォルダを作成できてしまいます。これがなかなか混乱の元になります。
　UE4のエディタ上だけで作業が完結すれば良いのですが、エクスプローラーなどで直接ファイルを操作して、大文字小文字の構成が違う同じ名前のフォルダを作ってしまったりしたら修復が大変面倒です。実際にどちらのフォルダからファイルが読まれているかがわからなくなったりします。
　「大文字小文字区別しないなんて美しくない！」なんて意見もあるかと思いますが、その場合は混在しないように注意して運用しましょう。

### 文字コード
　文字コードはUnicodeにしましょう。Shift-JISは修羅の道です。敢えて修羅道を逝くなら止めはしませんが、日本語コメントなどで深い穴に落ちやすいです。「日本語なんか使わねえよ」というならShift-JISでも良いかもしれませんが、それならそもそもUTFで良いですよね。しかし、デフォルトがShift-JISになってたりするので注意してください。
　UE4は複数のソースをひとつのファイルにincludeしてまとめてコンパイルするUnityビルド（ライバルエンジンとは関係無い）でビルドが高速化されますが、この際に日本語コメントが入ったソースが混じったりするとなかなか解決できないビルドエラーになったりします。ビルドエラーならまだしも、コメントの次の行が消えて、取れないバグの原因になったりもします。
　具体例を挙げると文字コードによっては行の最後の文字がズレて、改行コードが無かったことになり、//コメントが次の行までコメントアウトしてしまい、一行無くなり、コンパイルは通るけど思った動作をしないなんて事が起きたりします。

# クライアント編

クライアントはp4コマンドを直接使うなり、p4vを使うなり、UE4エディタから使うなり好きな方法を使用します。
とは言え、ほぼp4vを使うことになるかと思います。
p4vに関しては一冊本が書けるレベルで情報満載ですが、書いていられないのでこちらもポイントだけです。

## ポイント

Perforceのことを略してp4と呼ぶことが多いです。forceは4じゃないけど、短いので以後p4で。

### 文字コード
クライアントの文字コードも当然Unicodeにしましょう。Unicode(UTF-8)かUnicode(UTF-8 no BOM)がおすすめです。

### p4ignore
p4にはサーバーにサブミットしたくないファイルを除外する機能があります。これがとても便利なのでぜひ設定しましょう。
デフォルトでは有効にならないので、コマンドプロンプトから

> p4 set p4ignore=.p4ignore.txt

などと指定することで有効にできます。
.p4ignore.txtの中身はこんな感じです。Epicの設定にちょっと追加してます。

```.p4ignore.txt
# Ignore all Visual Studio temp files.
*.suo
*.opensdf
*.sdf
Engine\DerivedDataCache\*
# Ignore all Intermediate and Saved directories
*\Intermediate\*
*\Saved\*
*\obj\*
# Ignore UBT's configuration.xml
Engine\Programs\UnrealBuildTool\*
```

特定の拡張子のファイルや特定の名前のフォルダ名を無視します。
Intermediateフォルダやobjフォルダを無視するのでビルド後のPluginsフォルダなどをaddしても中間ファイルがサーバーにサブミットされません。これが無いとPluginsフォルダの追加でいちいち手動でIntermediateフォルダを除外したりする必要があり、とても手間がかかります。

### typemap

これは管理者権限のユーザーにしか設定できないのですが、UE4をPerforceで扱うにはとても重要です。
拡張子ごとのp4上のファイルタイプを自動で設定できます。

p4vなどで接続した状態で、コマンドプロンプトで

> p4 typemap

と入力するとp4vインストール時に指定したテキストエディタが開きます。編集してエディタを終了すると反映されます。

```typemap
TypeMap:
	binary+w //....exe
	binary+w //....dll
	binary+w //....lib
	binary+w //....pdb
	text+w //....target
	text+w //....modules
	text+w //....version
	text+w //....config
```

例えばこんな感じです。
この場合、ビルドで書き込まれる可能性のあるファイルに+w属性を付けて書き込みエラーが出ないようにしています。
これが無いとビルドする前に該当するファイルをいちいちチェックアウトする必要があります。面倒くさいですよね。
//....は//がリポジトリのルート、....が全てのフォルダ内のファイルを示します。

# まとめ

Perforceは機能も多く高速で便利です。もっと広まれば良いと思うのですが、高価なせいかなかなか広まりませんね。
それでも大手ゲーム会社には随分普及してきましたが。

とりあえず第一回で書きたい事を書いてみました。第二回があるかどうかは気分次第です。気が向いたら次はStream構成とか書こうかな。