VPSでPerforceサーバーを立てて、UE4と連携

**使用環境**
ConoHa VPSサービス
月額：900円プラン
メモリ：1GB
CPU：2Core
SSD：50GB
OS：CentOS Linux release 8.0(Core)

**経緯**
大学の授業でチームを組み(チームといっても二人だが)、ゲーム開発をすることになった。相方はデザイナで、自分がプログラマ、レベルデザイナ的な役割を考えている。UnrealEngine4(UE4)を利用して開発を進めることになったが、プロジェクトの共有ができないことに気づき、共同開発のためと、バージョン管理のためにもPerforceサーバーを準備しようと考えた。

Perforceを選んだ理由としては、ライセンス料が5名以下のユーザーの場合無料というのと、なんだか評判が良さげだったから。Twitterでゲーム開発者の方から、PerforceとPlasticを進められたのもある。(正直Subversionと悩んだ。Gitは好きだが、~~UE4との連携は容量制限もあり厳しいらしい。~~  <---**追記** 容量制限があるのはGithubでした。自分でサーバー立てるなら大丈夫。しかし、現在はUE4とGitの連携機能はベータ版らしい。)

ConoHaを選んだ理由としては、月額制であることと、一か月に満たない利用の場合は、利用した時間分のみで、安く済むことが大きい。
また、さくらインターネットは、利用したことがあったので、大変悩んだが、利用したことがないConoHaも利用してみたいと思った。

VPSを初めての利用者向けの漫画版のチュートリアルが両サービスともにあるが、さくらインターネットはステップアップがしやすいような内容となっており、少し難しくもあるが、充実していた。ConoHaは完全に初心者向けで、メジャーなコマンドの説明も記載されていた。また、その他の学習用記事については、さくらインターネットは数が膨大で、かつ、イベント情報も載っている。ただし、特定の目的がなければ、自分に合ったレベルの記事を見つけるのは難しそうであった。ConoHaは、さくらインターネットほどは多くないが、整然としていて、初心者にとっては順番に沿って記事を読んでいけば、簡単にステップアップできるようになっていた。

**記事の方針**
作業をすべて書く

##CentOSのセットアップ

```
login:root
Password:(サーバー追加時に設定したパスワード)

// バージョン確認
# cat /etc/redhat-release

//アップデート
# yum update

//一般ユーザー作成とパスワード設定
# adduser (username)
# passwd (username)

// Ctrl+Dでログアウトし、作成したユーザーでログインする
//その後、rootに切り替え
$ su -
Password:(rootのパスワード)

// エディタをインストール(vimが使えるならそれでいい)
# yum install emacs -y

// sudoができるようにする。
# env EDITOR=emacs visudo
/*
(username)  ALL=(ALL)を追加する。
作業が終わったらCtrl+x-Ctrl+sで保存し、Ctrl+x-Ctrl+cでemacsから抜ける。
*/

// rootでログインできないようにする
# emacs /etc/ssh/sshd_config
/*
PermitRootLogin yesをPermitRootLoginに変更する。
Port 22 は、ssh接続で利用するポート番号の設定。好みによってウェルノウンポート以外に変更してもよい。仕方は22の部分を変更。
作業が終わったらCtrl+x-Ctrl+sで保存し、Ctrl+x-Ctrl+cでemacsから抜ける。
*/

//もしsshdのポート番号を変更したなら、firewallのsshの設定も変更しなければならない
// デフォルトのファイルをコピー。/usr/lib/firewalldの中身はデフォルトの設定なので変更はしない。
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
// コピー先を開き、ポート番号を22から変更先のポート番号に変更
# emacs /etc/firewalld/services/ssh.xml
// ファイアウォールの変更を適用
# firewall-cmd --reload

// sshdを再起動
# systemctl restart sshd.service

// IPアドレスを確認しておく
// ログアウトし、公開鍵認証のための設定を行う。
# ifconfig
```

---
**ここからは、クライアント側の作業**

```
// sshクライアントソフトを利用。pederosaやteraterm。WindowsならWSL、macならiTermなどでもいい。

$ cd
$ mkdir .ssh
$ cd .ssh
// sshに用いるカギを生成(2048bitがデフォだと思うから-bいらないかも)
$ ssh-keygen -f (ファイル名) -t rsa -b 2048
// サーバーに公開鍵を転送(ファイル名の後ろにpubがついているもの)
// もし、sshのポート番号を変更したなら、-pオプションを利用する。
$ ssh-copy-id -p (ポート番号) -i (ファイル名).pub　(username)@(IPアドレス)
// configファイルを作成
$ emacs config
/*
Host (好きなサーバーの名前)
HostName (IPアドレス)
User (username)
IdentityFile ~/.ssh/(秘密鍵ファイル名->pubが付いてないほう)
Port (ポート番号を変更した人は、ポート番号を記載)
*/
(ssh接続を試す)
$ ssh (好きなサーバーの名前)

// 無事ログイン出来たら
// sshでパスワード認証をできなくする
$ sudo emacs /etc/ssh/sshd_config
/*
該当箇所を以下のように変更
PasswordAuthentication  no
ChallengeResponseAuthentication  no
UsePAM  yes
*/
```

##Perforceのセットアップ
####サーバーのセットアップ

```
// 公開鍵をインポート。
$ sudo rpm --import https://package.perforce.com/perforce.pubkey
// perforceのリポジトリを設定
$ sudo emacs /etc/yum.repos.d/perforce.repo
/*
以下をファイルに記述
[perforce]
name=Perforce
baseurl=http://package.perforce.com/yum/rhel/7/x86_64
enabled=1
gpgcheck=1
*/

//インストール
$ sudo yum install helix-p4d

// インタラクティブにPerforceサーバーを設定できるシェルスクリプトを実行
$ sudo /opt/perforce/sbin/configure-helix-p4d.sh
/*
(注意) 実行すると、いくつか質問されるが、基本的にデフォルトを選んでよいが、日本語を利用できるようにしたい人はunicode-modeをy(yes)と答える。また、スーパーユーザーのパスワードももちろん考えて入力する。
*/

/*
これで、サーバーの設定はいったん終わる。
しかし、自分はこの後、クライアント側からサーバーに接続しようとしたら、エラーが出た。
原因はファイアウォールで止められていたことにあった。
もし、同様のエラーが出るようだったら、次のことを試してみるといいかも。
*/

// ポートを開く
$ sudo firewall-cmd  --zone=public --add-port=1666/tcp --permanent
// 変更を反映させる
$ sudo firewall-cmd --reload
// 確認
$ sudo firewall-cmd --list-all

```

####クライアントのセットアップ
1. [Helix Visual Client (P4V)](https://www.perforce.com/downloads/helix-visual-client-p4v)からクライアントソフトをインストールする。

2. P4Adminを開くと、Open Connectionと書かれたダイアログが出る。
Server欄に、ssl:(サーバーのIPアドレス):1666
User欄に、先ほどサーバー側で作ったユーザー名を入れる。(デフォルトで作成したなら、superというユーザーができてる)

3. もしかしたら、Unicodeの設定にしている人は、ここで、サーバー接続時のエンコーディング方法を聞かれると思うので、その際はUTF-8にする。ちなみに、次のメインウィンドウのEdit->Preferenceから後からでも変更できる。

4. ソフトのメインウィンドウが開くので、Homeタブの中のCreate new userから新しいユーザーを作成する。作成したら、今度はPermissionsタブに移動し、作成したユーザーの権限を設定する。設定するには、タブ内の表テーブルで表示されている部分から、superを参考に、作成すれば良い。Access Levelに関しては、write,admin程度のユーザーでいい。ただし、admin以上のアクセスレベルがなければ、次のタイプマップのファイルを開けないので、面倒な方は、adminでアクセスレベルを設定してしまったほうがいいかも。

5. 次に、コマンドプロンプトを開いて、以下を入力する。

```
> p4 set P4USER=(先ほど作成したクライアントユーザー名)
> p4 set P4PORT=ssl:(サーバーのIPアドレス):1666
> p4 -P (設定したクライアントユーザーのパスワード) typemap

```

タイプマップが開くので、これは、とりあえず[UE4公式ドキュメント](https://docs.unrealengine.com/ja/Engine/Basics/SourceControl/Perforce/index.html)に記載のものをコピペして、既存のものを上書きする（自分ははしたが、しなくてもいいかも？）。

```
// クライアントの情報を確認
> p4 info
// クライアントの環境変数を確認
> p4 set 
```


6.　P4Vを起動し、表示されたダイアログに先ほどと同様に、サーバーのIPアドレスと、作成したユーザー名を入れる。またこの後、エンコーディングについては先ほどのP4Adminの時と同様に入力する。

7.　viewドロップダウンから、Workspacesを開き、開いたワークスペースのタブで右クリックをし、New Workspaceオプションを選択する。ワークスペースを設定し、作成する。このとき、ワークスペースのrootは、もし、既存のプロジェクトを管理したいなら、そのフォルダを、もし、新規に始めるプロジェクトならどこでもいい。
また、下の画像のように、Workspace Mappingsを設定する。デフォルトの設定だと、//depot/...//Sample/depot/...となっていると思うが、後ろに付いているdepotを消す。spec~については、まだ未学習なので、自分は除いてしまった。とはいえ、今更ではあるが、[参考リンク](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_depot.html)によると、ユーザーの編集フォームの履歴を追跡してくれるとあるので、あったほうがいいかも。後から追加もできるらしいので、まあよしとする。最後にOKを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354859/bde7d973-f8e0-a065-37c7-ba247cc5a42a.png)

8.　デポに追加するフォルダー、ファイルを聞かれるので、[UE4公式ドキュメント](https://docs.unrealengine.com/ja/Engine/Basics/SourceControl/Perforce/index.html)のようにする。

9.　そして、一番最後の作業として、UnrealEngine4を開き、Source Controlから、Perforceを選択し、各種項目を埋めて、設定を保存すれば、完了である。なお、Server欄はssl:(サーバーのIPアドレス):1666とし、ワークスペースは、すでにワークスペースを設定していれば、候補が表示されるので、そこから選択すれば良い。


最後に、今回は簡単にUE4とPerforceの連携について、自分なりにまとめてみたが、まだまだ、不十分なところがあるので、調べ次第変更していきます。

####参考にしたサイト
- [UnrealEngine4公式サイト](https://docs.unrealengine.com/ja/Engine/Basics/SourceControl/Perforce/index.html)
- [Helix Core サーバー管理者ガイド](https://www.perforce.com/manuals/p4sag/Content/P4SAG/install.linux.packages.install.html)
- [P4Vガイド](https://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r14.3/manuals/p4v/introduction.about.html)
- [さくらVPS入門ガイド](https://vps.sakura.ad.jp/guide/)
- [ConoHa VPS ご利用ガイド](https://support.conoha.jp/vps/guide/?btn_id=documents_guide)