今日から始めるUnreal Engine 4のSource Control SVN編

# おやくそくとか

## この記事でわかること
* ざっくりとしたUnreal Engine 4のSource Controlについて
* Subversion(svn)のローカル環境構築(Windows, Linux)
* 
Perforceのローカル環境構築(Windows, Linux)

* svn
とPerforce
のちょっとした使い方

## この記事じゃわからないこと
* gitのコマンド
* svnのコマンド
* CentOS等Linuxの基礎知識

## 環境
サーバ: CentOS 7.2
クライアント: Windows 10

## いつもの
Unreal Engine 4の更新によって情報は古くなっていく可能性があります。
また、作業によって環境が壊れたりセキュリティ上のリスクを背負うことになる可能性があります。
いかなる責任も取れませんのでよろしくお願いします。


# そもそもSource Controlとはなんぞや
ざっくり言うと作業にセーブポイントが作れます。
そしてそのセーブポイントに戻ったりファイルの編集履歴が見られたり、いろいろ捗ります。
本題ではないので[Google先生](https://www.google.co.jp/search?q=バージョンコントロール)にでも聞いてください。

## Unreal Engine 4でサポートしているSource Controlは…

### git
>git（ギット）は、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。 Linuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発され、それ以降ほかの多くのプロジェクトで採用されている。

[git - Wikipedia](https://ja.wikipedia.org/wiki/Git) より

### Subversion
>Subversion（Apache Subversion）は、さまざまなソフトウェアの開発現場において広く使われているソースコード管理システムです。 標準のコマンドラインクライアント/プロトコルの名称から「svn」と呼ばれることもあります。

[Subversion（svn）によるソフトウェア開発を始めよう - OSDN](https://ja.osdn.net/svn/) より

### Perforce
>Perforce Helixは企業の重要なデジタル資産を管理するソフトウェア構成管理ツールをコアにした統合プラットフォームです。
ソースコード等のテキストデータからドキュメントやグラフィック等のバイナリまでのあらゆるファイルをバージョン化します。
テラバイト単位の大容量なデジタル資産でも高速に処理します。

[高速ソフトウェア構成管理ツール Perforce Helix | 東陽テクニカ](http://www.toyo.co.jp/ss/products/detail/perforce) より

## で、どれがいいの?
各々に長所があり、短所があります。
決して詳しいワケではない上に書いていくとキリがないので詳細はググっていただくとして、UE4で使う上での話ぐらいにとどめておきます。

### git
#### メリット
* 行単位で追跡できるのでテキストベースの物を管理しやすい
* 困った時のドキュメントが豊富
* エンジニアはGitHub等に慣れている場合が多いので学習コストが低い

#### デメリット
* Commit(コミット,作業状態の保存)時にファイル全体を記録するので最終的に大きな容量を取られやすい
    * Unreal Engineで使う.uassetはモデルとか大きいものもあるわけで…
* UEから直接pushできない(最新でできるようになってたりしたらゆるして)

参考: [バージョン管理システム比較資料](http://www.slideshare.net/suzzsegv/vcs-29607961)

### Subversion(svn)
#### メリット
* バイナリファイルは差分で記録する
    * gitのデメリットと反対の性質
* 仕組みがありえんぐらいわかりやすい(gitに慣れてるとわかりにくいかも?)
* UE4が推奨している

#### デメリット
* ローカルでのCommitができない
    * 作業は必ずサーバに流れていく
        * 「ちょっとテストして問題なかったらアップロードしよう、だけど今セーブポイントが欲しい」の時ちょっと悩む
    * サーバもマシンも一緒なら正直どうでも良い感はある

参考:
[Subversion 対 Git：どちらを使うべきなのか？いろいろな観点から比較してみた | tracpath:Works](https://tracpath.com/works/development/subversion_vs_git/)
[バージョン管理システム比較資料](http://www.slideshare.net/suzzsegv/vcs-29607961)

### Perforce
#### メリット
* UE4が推奨してる
    *    みんな大好きヒストリアさんも使ってるらしいよ!
    *    2015年のUnreal Festに東陽テクニカさん来てたよ!
* 管理用の専用UIが用意されてる
* なんかすごい強いらしい

#### デメリット
* 情報が少ない
* ライセンスを購入しないと制限がある
    *    ライセンスが(個人で使うには)高い

---

# なんとなくわかったので環境構築
gitに関しては手前味噌ですがLinuxに限り昔書いた[Windows AzureにGitLabを構築してみる](http://qiita.com/kurotoribb/items/1daf78d163d731bf6b65)あたりが参考になるかもしれません。
ただ情報が古いのでググると幸せになれると思います。
各々長い上に合計4項目あるので自分の使いたいものを右側から選ぶといいと思います。

# SVN編

## SVN + Windows
使ってるPCでデータ管理もUE4も使うという極めて一般的な環境は方はこちら
書いてる途中で気づいたけど[ソース コントロールとして SVN を使用する | Unreal Engine](https://docs.unrealengine.com/latest/JPN/Engine/Basics/SourceControl/SVN/index.html)なるモノが既に存在していて同じことをやっていたけれどもうちょっと噛み砕いている、ということで許していただきたい。

### 必要なもの
* Windowsが入ったPC

### セットアップ
まずは今回使うVisualSVN Serverを落としてきます
[VisualSVN Server | Download](https://www.visualsvn.com/server/download/)
基本的には読みながら進めて行けば大丈夫ですが、Webサーバを立ち上げている方は開いているPortを選んでください。
一応以下選んだもの
Select Components: VisualSVN Server and Administration Tools
Edition: Standard
Configuration: Use secure connectionのチェックを外してそれ以外はデフォルト


### 使ってみる
![image](https://qiita-image-store.s3.amazonaws.com/0/78832/31983d58-13ba-3acc-a7af-43d5c76a70c0.png)
こんな画面が出てくるのでまずはアカウント作成のために左側から**Users**を選んで右クリック→**Create Users...**
![image](https://qiita-image-store.s3.amazonaws.com/0/78832/bce43d17-228f-b93f-4af8-c4ec39ceb545.png)
適当なアカウントを作ってOK
![image](https://qiita-image-store.s3.amazonaws.com/0/78832/3f25b4b4-8683-ae95-9575-a788d38f9f0e.png)

次は**Repositories**に飛んで同じように**Create New Repository...**
![image](https://qiita-image-store.s3.amazonaws.com/0/78832/b711a455-997c-becf-ad5e-00c73d339d39.png)
**Regular FSFS repository**と**Distributed VDFS repository**がありますが、[VisualSVN Server | Multisite Repository Replication](https://www.visualsvn.com/server/features/multisite-replication/)を読む限り後者のほうが強そうなのですが、Master/Slave構成は今回必要ないので前者を選びました。
![image](https://qiita-image-store.s3.amazonaws.com/0/78832/23075833-d5ab-d1f9-6812-ad0bb24b4800.png)
適当な名前をつけて…
![image](https://qiita-image-store.s3.amazonaws.com/0/78832/a62cf6e3-8852-1c66-3839-4bbf8191965b.png)
よくわからないけどrecommendedというなら選んでおきましょう。
![image](https://qiita-image-store.s3.amazonaws.com/0/78832/4622fa56-437a-da46-8227-c54872b0b450.png)
アクセス制御についてですが、上から
1. 誰もアクセスできない
2. Usersで作られたアカウントは読み書きできる
3. 特定のユーザのみなどに制限

という感じです、今回は2番でいいでしょう。
![image](https://qiita-image-store.s3.amazonaws.com/0/78832/ed07f4a4-5101-99a7-91e6-c544877e9a26.png)
さて、これでRepositoryができました。簡単ですね。
Repository URLをクリックすればブラウザから開くこともできますし、そのままUE4に登録しても問題ありません。
ただし、サーバとして使うPCとは別のPCからアクセスする場合は当然ながら事故るのでIPアドレスでアクセスしてください。

### UE4で使う
その前に一度svnをcheckoutしてこなければなりません。適当なクライアントで適当な場所にcheckoutし、[ソース コントロールとして SVN を使用する | Unreal Engine](https://docs.unrealengine.com/latest/JPN/Engine/Basics/SourceControl/SVN/index.html#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AE%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%B3%E3%83%94%E3%83%BC%E3%82%92%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%A2%E3%82%A6%E3%83%88%E3%81%99%E3%82%8B)を参考に必要なファイルを追加してください。
クライアントに迷ったらとりあえず[TortoiseSVN](https://ja.osdn.net/projects/tortoisesvn/)を使うといいと思います。

![image](https://qiita-image-store.s3.amazonaws.com/0/78832/e9d3ca64-f958-faac-c9de-0cb6b7c8719c.png)
checkoutしてきた空っぽのフォルダにファイルを追加(ファイル的にも、svn的にも)してcommitします。作ったばかりのプロジェクトだとこんな感じ。

![image](https://qiita-image-store.s3.amazonaws.com/0/78832/52089627-fd97-d351-1d03-8b8b5973b71b.png)
無事commitされるとVisualSVNにも反映されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/78832/e2d7c74f-2336-dfe5-d340-e2a5d224339a.png)
あとはcheckoutしてきたフォルダをUEで開き、Source Controlから繋いであげればOK


## SVN + Linux
サーバが大好きな方はこちら
注意: めんどくさいのでrootで作業していますがオススメしません、多分

SVNのWeb管理といえばSubminこと[SVN/git web administration](https://supermind.nl/submin/)やUSVNこと[User-friendly SVN](http://www.usvn.info/)がありますけど、今回は[SCM-Manager](https://www.scm-manager.org/)を使います。
理由は最近の投稿がないから、そして「Very easy installation」の言葉を信じたからです。
wikiは[こちら](https://bitbucket.org/sdorra/scm-manager/wiki/Home)
何気にGit,Mercuiak,Subversionに対応しているようです。
ちなみにWindowsでもいけるようですが知ったのは後からなのでとりあえずそっちは保留で…

### 必要なもの
* CentOS 7.2がセットアップされた環境
    *    今回はESXi 6.0でMinimalな環境を用意しました
    *    CUIなのでDesktop環境だとちょっと変わるかもしれません。
* sshが叩ける環境

### 作業
まずは必須のjreを入れておきましょう。

```bash
yum install jre -y
```

SCMはyumで導入できます。
[sdorra / scm-manager / wiki / RPM and DEB packages — Bitbucket](https://bitbucket.org/sdorra/scm-manager/wiki/RPM%20and%20DEB%20packages)
を参考にRepositoryを追加しましょう。

```bash
 vi /etc/yum.repos.d/SCM-Manager.repo
```

以下貼り付け

```text
[scm-releases]
name=SCM-Manager Releases
baseurl=http://maven.scm-manager.org/nexus/content/repositories/releases
enabled=1
protect=0
gpgcheck=0
metadata_expire=30s
autorefresh=1
type=rpm-md
```

あとはもう簡単に入れられて

```bash
yum install scm-server
```

起動するだけ

```bash
/opt/scm-server/bin/scm-server start
```

http://[IP]:8080/
 にアクセスするだけで接続できます。
 ![image](https://qiita-image-store.s3.amazonaws.com/0/78832/cec1fc5a-b324-9c8d-fc2a-fda7c5922456.png)
 ID,PWは**scmadmin**で通ります。
 ね?簡単でしょう?
 
![image](https://qiita-image-store.s3.amazonaws.com/0/78832/a68d83bb-37d1-9857-35dd-63fd82059fba.png)
 まずはセキュリティ的に、というよりも扱いにくいので左側の**Security → Users** の上の方にある**Add**から自分のアカウントを作ってしまいましょう。
 その後Log out→自分のアカウントでログインをしたら不要なscmadminは削除してしまっても構いません。
 匿名のアクセスは許可したくなかったためanonymousも削除しました。
 
 次に、**Config → Repository Types**からGitとMercurialのDisabledにチェックを入れておきましょう、別にしなくてもいいですが不要なので一応入れています。saveを忘れずに。
 ![image](https://qiita-image-store.s3.amazonaws.com/0/78832/7b9572d9-7302-70c1-7023-a058313d60c6.png)
 

![image](https://qiita-image-store.s3.amazonaws.com/0/78832/77cdab98-3692-3ff5-12e3-3c80a7baca82.png)
 Subversionの設定は初期値のまま変更していませんが、パーティションを切っている等で必要があれば変更してください。
また、互換性やGZipに関しても自由にしてかまわないと思います。(検証はしていません)

![image](https://qiita-image-store.s3.amazonaws.com/0/78832/eb66e64b-ccc3-94aa-d281-97050b0d56ad.png)
次に**Repositories**のAddから適当なRepositoryを作ります。
PublicにチェックをつけるとUsersの全てから見えてしまうので非推奨です。

![image](https://qiita-image-store.s3.amazonaws.com/0/78832/4aa6c75f-9c9a-893b-2adc-59bc717f7524.png)
次に**Permissions**の設定を済ませます。Nameがサジェストされないのがイケてません。
一人なのでとりあえずOwnerでいいでしょう。

このあとの手段はWindowsと同じなため割愛します。
アプリケーションを止める時は

```bash
/opt/scm-server/bin/scm-server stop
```

これも [sdorra / scm-manager / wiki / daemons — Bitbucket](https://bitbucket.org/sdorra/scm-manager/wiki/daemons) にかかれています。


# Perforce編
別記事予定[いつ?]