Perforceの環境構築をしてみる クライアント編

# 前回
https://qiita.com/toki_games/items/b712e9cb70f2fac32ca5

# 今回のゴール
Perforceによるバージョン管理環境をセットアップし、UE上でPerforceと連携するところまで

# UEのプロジェクトを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/f2c0f280-f633-e1e7-467f-d221fdcfdac0.png)
今回は「Hoge」というUEプロジェクトを作成しました

::: note
当記事ではUnrealEngine5.3.2を使用しています
UnrealEngineのインストール方法に関しては、ここでは解説しません。
:::

# インストール
https://www.perforce.com/downloads/helix-visual-client-p4v

上記サイトからWindows用のexeファイルをダウンロードし、実行します。
インストーラーの手順に沿って進め、インストールします。

インストールが完了すると下記3つのソフトウェアがインストールされます

- P4V
- P4Admin
- P4Merge

P4Vは「__PerforceクライアントのGUI__」
サブミット（コミット）やブランチの作成など、普段GitやSVNで目にする部分

P4Adminは「__PerforceサーバーのGUI__」
depotの設定やユーザーの追加、パーミッションの変更など、サーバー側で設定している内容をGUIで操作することができる

P4Mergeは一旦使わないので割愛

# P4Adminのセットアップ
## ログイン
P4Adminを起動すると、接続ポートとユーザー名を入力する欄が表示されます。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3433343537382f32643165663065632d323039322d323430662d653863652d6535373064353437616231652e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/7e25427f-bb2c-d84e-1209-9bc7426abd37.png)
接続ポートには先ほど設定したP4PORTの情報を基に入力します。
今回の場合は以下になります。
```
ssl:[IPアドレス]: 1666
```
ユーザー名は先ほど設定したスーパーユーザーのユーザー名を入力します。
OKを押すとパスワードが聞かれるので、先程スーパーユーザーを作成した際に設定したパスワードを入力しましょう。

## ユーザーの追加
PerforceのHome画面が表示されるので、真ん中のタブからUsers&Groupsをクリックします。
以下のような画面が表示されます。
![5459345384583485394859384953895809183549817984571.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/97f3d810-15b5-e137-7457-05ca635b135c.png)

ここから、スーパーユーザーではない一般ユーザーを追加します。
![newuser.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/52d7a84a-af56-f437-024b-f7b1a6d675d0.png)
赤枠を入力してください。
今回はユーザー「Huga」さんを追加します。
Typeは一般ユーザーなので「Standard」。
その他は空欄でOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/492b8702-bacd-12e2-ac7b-c71c8d348d5c.png)
これでユーザーが追加されました。

これがP4Vで作業を行うユーザーになります。

# typemapの設定
Perforceがアンリアルのファイルタイプをどのように扱うかを設定していきます。

コマンドプロンプトを開きます
p4コマンドを実行する際の、操作ユーザーと操作するポートの設定を行います。

```
p4 set P4USER=Hoge
p4 set P4PORT=IPアドレス:1666
```
typemapファイルを開きます
```
p4 typemap
```
開いたら、以下の内容に編集します
```
# Perforce File Type Mapping Specifications.
#
#  TypeMap:             a list of filetype mappings; one per line.
#                       Each line has two elements:
#
#                       Filetype:The filetype to use on 'p4 add'.
#
#                       Path:     File pattern which will use this filetype.
#
# See 'p4 help typemap' for more information.

TypeMap:
                binary+w //depot/....exe
                binary+w //depot/....dll
                binary+w //depot/....lib
                binary+w //depot/....app
                binary+w //depot/....dylib
                binary+w //depot/....stub
                binary+w //depot/....ipa
                binary //depot/....bmp
                text //depot/....ini
                text //depot/....config
                text //depot/....cpp
                text //depot/....h
                text //depot/....c
                text //depot/....cs
                text //depot/....m
                text //depot/....mm
                text //depot/....py
                binary+l //depot/....uasset
                binary+l //depot/....umap
                binary+l //depot/....upk
                binary+l //depot/....udk
                binary+l //depot/....ubulk
```
ファイルを保存すると「Typemap saved」と表示されます。

:::note info
開くための権限がないなどのエラーが発生した場合は、開くエディタを変更しましょう
```
p4 set P4EDITOR=path --wait
```
:::

# P4Vのセットアップ
## ログイン
P4Vを起動します。
ServerとUserを入力します。
ServerはP4Adminと同じように作成したポートを入力し、Userは先程P4Adminで作成した一般ユーザー名を入力しましょう。OKを押すとパスワードを聞かれます。
![f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/c21fc1fd-755c-916c-fd38-e3b781585475.png)

無事アクセスできると以下のような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/15862ed5-69a8-7ccf-3cdf-52a19f2c96d2.png)

## Workspaceの作成
画面左のDepotとWorkspaceの欄から、Workspaceを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/aa09da26-3688-0203-6456-e737c94ac70a.png)
(no workspace selected)をクリックし、New Workspace...を選択します。

![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/9a305674-5b43-7e2d-40f3-a065b5e62e8c.png)
Workspace情報を入力していきます。

Workspace name:なんでも問題ないが、UEのプロジェクト名が安パイ
Workspace root:UEプロジェクトの場所
WorkspaceMapping:depot（リモート）のどこが、workspace root（ローカル）から見て、どこを指すか指定するマッピング情報

OKを押すと、ダイアログが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/8c60ad47-107f-627e-e00f-b893862f294e.png)
指定したパスのフォルダ内が空じゃないけど、別の場所をワークスペースにするかい？と聞かれています。
もちろん「No」を選択します。
すると、設定したパスをRootとしたファイル達が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/a881448b-801a-12e7-9db4-319e19b5da87.png)

## 初期ファイルの追加
バージョン管理するファイルを追加します。
UEでは以下が管理対象です。
- Config
- Content
- Source
- uproject

::: note info
Binariesフォルダはオプションです。

[公式](https://docs.unrealengine.com/5.0/ja/using-perforce-as-source-control-for-unreal-engine/)ではTP_FirstPerson_Preview.pngも管理対象にしていますが、今回そのような画像ファイルはありませんので、無視します
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/2ebeff82-7762-7b46-6a3a-8017afda63aa.png)
選択したら右クリックし、「Mark for Add」を選択します。（もしくは上のショートカット欄から、「Add」を選択）
Select Pending Changlelistというダイアログが表示されますが、changelistはdefaultのままでそのままOKを押します。

画面右側のPendingタブを選択します。（ない場合はView > Pending Changelistから追加）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/29c6c27c-7c4b-f5f0-bc34-b29704c22940.png)
defaultというchangelistが赤い三角になっています。
赤い三角は「変更あり」、青い三角は「変更なし」の状態を表しています。
今回はファイル達を追加したので、「変更あり」になっています。

defalutを選択した状態で右クリック、submitを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/8901de89-32f3-b9e9-0a50-2e94ebbfe384.png)

~~Tortoiseのような~~Submitウィンドウが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/05c44b92-c4b1-9803-95e1-e20fa709b248.png)
descriptionにsubmit内容を記載し、submitします。

submitが完了したら、depotタブに移動し、submitされているか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/ffbbd45a-25de-9151-5271-13083719eca5.png)
問題なく追加されました。
これで作業環境は整いました。

# UEと連携する
UEはPerforceをサポートしており、UEから直接Perforceと連携させることができます。
UEを開き、__ツール > リビジョンコントロールに接続__ を選択します。(画像はUE5.3.2)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/337cda3f-34ed-6027-b4f1-2b6ca2187589.png)

プロバイダからPerforceを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/8f281488-34c3-6dc7-4e56-dc579d44b31b.png)

色々設定する欄が出てくるので、記載します。
![aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434578/a99587ff-85e5-9fcb-bd64-35efd8646fa3.png)
「設定を承認」を押して、右下に完了のメッセージが表示されればOKです。


# その他
用語に関しては以下参照

https://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/p4guide/glossary.html

Workspace = ローカルリポジトリ（正確にはリモートとのマッピング情報？）
Depot = リモートリポジトリ
Submit = SVNのコミットと同じ（アップロード）
Checkout = 排他ロック

# 参考
https://docs.unrealengine.com/5.0/ja/using-perforce-as-source-control-for-unreal-engine/

https://qiita.com/witchy_bright/items/850dcd0f0cbec7992221

https://dev.classmethod.jp/articles/parforce_helixcore_server_with_aws/

https://zenn.dev/pate_techmemo/articles/81720f755dace5