Asset Serverの使い方


##はじめに
多くの大手企業や海外に強いベンチャー系企業のお仕事のお手伝いをしていた関係で、導入の黎明紀からいろいろなプロジェクトのソースコード管理方法を見ていますが、この管理方法が一番良いと言う方法は無いと思っています、選択肢のひとつと思って頂ければ幸いです。なぜなら、いまのグループ開発環境は少し前とは、比べられないくらい便利になっているからです。そしてこれからもより良く進化すると思います。

現在はゲームジャムなどの数時間程度のグループ開発でも、BitbucketとSourceTree(GitなどをGUIで扱う事ができるツール)を使いグループ開発を行うのが普通になっています。わたしは今年、武蔵野美術大学ゲームジャムに参加したのですが、そこでAsset Serverを使える機会があり、その便利さを再認識しました。ジャム初参加の学生さん達と一緒にレトロ風ゲームを作成したのですが、初めて使う学生さんには、**UpdateとCommitを繰り返すだけ**の説明だけで良く、純正ツールなので不要なファイルは意識しなくて良い、競合の回避方法も標準的な回避方法を用意ているなど、あまりの使い勝手の良さに先日行われたOculus Game Jamで使用出来なかった（実は対応していたが、これから説明する設定をしていなかったので出来ないと思っていた）のが残念なくらいでした。

また、Jam会場では、一度に同じ場所で多くの人が初めてインターネットを使おうとするので、回線が込み合いリソースの奪い合いに発展しがちです。Unityの開発プロジェクトは、リッチなリソースをリポジトリへアップロード・ダウンロードの繰り返しが多いため、その作業が開発時間の圧迫にもつながり、終盤になればなる程、つらい状態に陥ります。

Game Jam以外の普段使いでも、有料で決して安くは無いお買い物ですが、現在は１ヶ月契約もできますのでUnityでグループ開発の開発効率をあげたいなら考えても良い純正ツールだと思います。
しかし、Asset Serverを使うにはチームライセンスを取得していないと使用できない為、金銭的なハードルが高いのは否めません。

##Asset Serverの仕組み
Asset Server専用機を用意し、ネットワーク経由でプロジェクトのリポジトリ管理を行う仕組みが基本らしいです。私は予算の関係上、開発機と同じ端末にAsset Serverをインストールしています。
Asset Serverをインストールしたい端末にUnityが入っている必要は無く、Asset Serverへ管理者がログインし新規リポジトリの作成やユーザー登録を行う形式です。
Asset Serverは、別の端末から操作するとことを前提に設計されています。

##Asset Serverを使うには
Asset Serverを使うには、Unityのチームライセンスを購入する必要があります。チームライセンスにはCache Serverも付いているので、マルチプラットフォーム開発時のプラットフォーム切り替えで待たされる時間をCache Serverから取得し回避することができます。
https://store.unity3d.com
買い切りだと500ドル、１ヶ月契約で月20ドルになります（２年と１ヶ月で買い切り値段と同額の支払いになります）。
![スクリーンショット 2014-12-02 16.09.49.png](https://qiita-image-store.s3.amazonaws.com/0/25895/c4344869-6542-ef18-efce-d78a03a94bca.png)


##Asset Serverのインストール
まずは[Asset Serverのインストラー](http://unity3d.com/unity/collaboration/)をダウンロードしインストールします。
![スクリーンショット 2014-12-03 10.58.08.png](https://qiita-image-store.s3.amazonaws.com/0/25895/cc52df4f-aa54-5500-77b0-2a31b20655bc.png)
Asset Serverが対応しているプラットフォームもWindow,Mac,Linux（仮想イメージも含め一般的なLinuxディストリビューション用パッケージがあります）に対応しています。今回は予算の都合で開発機と同じマシン上にインストールしました。
![スクリーンショット 2014-12-03 11.05.42.png](https://qiita-image-store.s3.amazonaws.com/0/25895/5aeeb023-5d95-6e39-5238-56db3f2cf35a.png)
ダウンロードしたMac用のパッケージファイルを実行しようとすると「セキュリティとプライバシー」の設定次第でインストールできないかもしれません。Macのシステム環境設定->セキュリティとプライバシー、一般ボタンの**ダウンロードしたアプリケーションの実行許可:**を**すべてのアプリケーションを許可**にしてインストールできます。
![スクリーンショット 2014-12-03 11.06.12.png](https://qiita-image-store.s3.amazonaws.com/0/25895/803f7da0-0e0a-d1c4-6978-18246216b5b8.png)
![スクリーンショット 2014-12-03 11.06.20.png](https://qiita-image-store.s3.amazonaws.com/0/25895/cf3906f4-6973-4f5a-74fe-47efccb76a24.png)

インストールの最後にAsset Serverの管理用パスワードを何にするかがあるので、管理用のパスワードを設定します。
![スクリーンショット 2014-12-03 11.13.21.png](https://qiita-image-store.s3.amazonaws.com/0/25895/d47f3f40-6de0-bcab-82b2-d5f5b510664c.png)
インストールが終了すると再起動しログイン画面にUnity Asset Serverユーザーが追加されますが、通常のユーザーでログインします。MacのAsset Serverインストール時の変更（セキュリティとプライバシー）は、元に戻しておきましょう。

##Asset Serverの初期設定
一般的にAsset Server機は少し古くなり余っている端末へインストールし使う事が多いようです。LAN上にAsset Serverが在り特殊なフィルタリング(Asset Serverが使用するポート10733を塞いでいるなど)がされていなければ、ホスト名かIPアドレスでアクセスすることができます。

Unityをインストールした端末からAsset Serverの制御を行うのですが、**Unityの初期設定では制御画面を出せないようになっています。**
Asset Server管理画面をだすには、UnityのメニューバーのEdit->Project Settings->Editorを選択、Version Control ModeをAsset Serverへ変更します。
![スクリーンショット 2014-12-03 12.02.55.png](https://qiita-image-store.s3.amazonaws.com/0/25895/3027e377-377e-08da-f0d0-c0ad48abe530.png)

Version Control ModeがAsset ServerになっているとメニューバーのWindow->Version Controlが選択できるようになりAsset Serverの管理画面を開く事ができます。
![スクリーンショット 2014-12-03 12.05.45.png](https://qiita-image-store.s3.amazonaws.com/0/25895/fd2f08ca-3b31-26c3-4dba-ffbf918433de.png)
Asset Server AdministrationのAdministrationボタンを押してAsset Serverの管理画面を表示します。
![スクリーンショット 2014-12-03 12.09.00.png](https://qiita-image-store.s3.amazonaws.com/0/25895/56cb8515-57ef-8142-bc33-f28026d0c07e.png)
同じ端末にAsset Serverをインストールしたのであれば、Server ConnectionのServer Address:は、localhostのままで大丈夫です。他の端末がAsset Serverの場合、IPアドレスかホスト名をプルダウンか入力することで選択できます。管理者名はデフォルトのままで問題無いと思います。パスワードはインストールの最後で入力したパスワードになります。
パスワードを入力してConnectボタンを押すとAsset Serverで管理しているプロジェクトの一覧を表示することができます。
![スクリーンショット 2014-12-03 12.20.34.png](https://qiita-image-store.s3.amazonaws.com/0/25895/b341c4be-249a-fad1-0952-4f639d93c485.png)
Admin ActionsのCreateボタンでProject Name:を入力し、新規プロジェクトのリポジトリを作成します。
![スクリーンショット 2014-12-03 12.25.17.png](https://qiita-image-store.s3.amazonaws.com/0/25895/c5ea3efb-cb12-d0a6-78ec-aa8c0a635f0d.png)
プロジェクトを選択し、New Userボタンで編集できるユーザーを追加します。
![スクリーンショット 2014-12-03 12.35.05.png](https://qiita-image-store.s3.amazonaws.com/0/25895/8c092b64-98c5-78a3-f1ba-d0e7229c1bed.png)
ユーザー名横のチェックボックスをチェックしないと、そのユーザーがプロジェクトを参照することができません。

##Asset Serverにアクセスしてプロジェクトをコミットする
Asset Serverへローカルのプロジェクトを登録する場合、いま開いているローカルのプロジェクトをリポジトリに登録しようとします。事前に新規プロジェクト作成をするなどし、最適な状態にしておきましょう。
![スクリーンショット 2014-12-03 13.49.52.png](https://qiita-image-store.s3.amazonaws.com/0/25895/552861af-758e-c5a3-0bd0-07429fedf88b.png)
管理者権限でサーバープロジェクトを作っただけの状態では、リポジトリには何も登録されていません。Local ChangesのDetailsボタンをして、ローカルの変更をリポジトリへ反映する作業をしましょう。
![スクリーンショット 2014-12-03 13.53.47.png](https://qiita-image-store.s3.amazonaws.com/0/25895/d8531b3e-4f85-5e31-a3d0-a35027cc5055.png)
向かって左側のLocal ChangesからChangesetへドラッグするかAdd Allボタンで、Changeset欄へ移動させます。登録したくない不必要なファイルは<<<ボタンで選定できます。
![スクリーンショット 2014-12-03 13.59.21.png](https://qiita-image-store.s3.amazonaws.com/0/25895/6c12b111-31ba-76b4-28b2-3ce56517c379.png)
リポジトリ管理の一般的なルールでCommit Messageを入れCommitボタンでコミットします。
![スクリーンショット 2014-12-03 14.00.56.png](https://qiita-image-store.s3.amazonaws.com/0/25895/3efb8aef-3f1b-a38d-faf8-173313abd6c6.png)

##Asset Serverにアクセスしてプロジェクトをチェックアウトする
新規プロジェクトを作成します。
メニューバーのWindow->Version ControlでAsset Server画面を表示します。
Version Contorl画面が出ない人は、「Asset Serverの初期設定」のメニューバーのEdit->Project Settings->Editorを選択、Version Control ModeをAsset Serverへ変更してください。
![スクリーンショット 2014-12-03 12.09.00.png](https://qiita-image-store.s3.amazonaws.com/0/25895/0f884447-8110-c9b2-ff9c-888ae2979db0.png)
Current ProjectのコネクトボタンでServer ConnectionのUser Nameを入力するのですが、**コピーアンドペーストができないので直接入力**します。パスワードを入力しShow Projectボタンを押すとProject on Server欄にあなたが関われるプロジェクト一覧が表示されます。選択しProject Nameが現れたらConnectボタンで接続します。
![スクリーンショット 2014-12-03 13.27.47.png](https://qiita-image-store.s3.amazonaws.com/0/25895/819086ac-3ccc-ded7-9f3c-844b24fd851c.png)
Updates on Serverに更新履歴が表示されるのでUpdateボタンを押し更新します。
![スクリーンショット 2014-12-03 14.52.38.png](https://qiita-image-store.s3.amazonaws.com/0/25895/56cf3381-3e2c-7dde-6f7a-8db3ac16fffe.png)
![スクリーンショット 2014-12-03 14.53.06.png](https://qiita-image-store.s3.amazonaws.com/0/25895/9041a9b8-3a4d-67b6-39e8-c7790e9e34bf.png)
しばらくするとAsset Serverより自分のローカル環境にプロジェクトファイルがロードされます。
![スクリーンショット 2014-12-03 14.53.44.png](https://qiita-image-store.s3.amazonaws.com/0/25895/765165d3-54a1-a7c1-970f-102b2da07cf4.png)

##競合した場合
Asset Serverに限らず、グループ開発で作業してする場合、どうしても発生してしまうのが同じファイルを編集してしまうことによるマスターファイルとの競合です。
Asset ServerはリポジトリからプロジェクトをUpdateし競合があった場合、Updateのタブ画面で競合の問題をどうするのか指示を求めます。
![スクリーンショット 2014-12-05 21.26.02.png](https://qiita-image-store.s3.amazonaws.com/0/25895/b0792ade-637a-4023-5fd5-290e05b1c0c8.png)
競合問題のあるファイル単位に、**Skip Asset（サーバーからダウンロードしない）**、**Dicard My Changes（自分の変更を破棄する）**、**Ignore Server Changes（サーバーの変更を無視しする）**、**Mager（マージ）**ボタンで解決策を設定しContinueボタンを押すと処理を実行します。
![aaa.png](https://qiita-image-store.s3.amazonaws.com/0/25895/65721887-1337-f973-2a3f-da9df2ba74d3.png)

##Asset Serverの更新履歴と中身をBitbucketなどのサービスへ移行する方法

###uas2gitをインストールする
GitHubにAsset Serverから他のソースコード管理へ履歴共々移行できるツールがあります。
https://github.com/tnayuki/uas2git

基本的にgitからリポジトリをクローンしrubyのgemコマンドでインストールするだけなのですが...

git clone git://github.com/tnayuki/uas2git
gem install uas2git

依存しているパッケージをインストールしていないと途中でエラーになったりします。
わたしの場合は
```Building native extensions. This could take a while...
ERROR: Error installing uas2git:
ERROR: Failed to build gem native extension.
```で[pgパッケージをインストール](http://stackoverflow.com/questions/19625487/impossible-to-install-pg-gem-on-my-mac-with-mavericks)したら解決しました。

sudo gem install pg
sudo gem install uas2git

**2015.1.27にuas2gitが更新されたので過去バージョンをお使いの方は、アップデートするとプロジェクト名に全て小文字空白無しが解決します。**
githubからクローンしたuas2gitのインストールディレクトリにcdする。

git pullでローカルリポジトリを更新する。
![スクリーンショット 2015-02-08 9.07.07.png](https://qiita-image-store.s3.amazonaws.com/0/25895/d29e3db7-887d-0b43-2432-7d1fbee6603d.png)

sudo gem install uas2gitでインストールする。
![スクリーンショット 2015-02-07 14.54.56.png](https://qiita-image-store.s3.amazonaws.com/0/25895/f3762f53-16ee-d9cd-9e2c-478d4e723ee1.png)

わたしの環境だけかも知れませんがRuggedが古いのですこしはまりました。

上記エラーが出た場合、ruggedを"sudo gem install rugged"でインストールすると
![スクリーンショット 2015-02-07 14.48.09.png](https://qiita-image-store.s3.amazonaws.com/0/25895/2ae87ed4-b601-c47f-f8b6-661722ec4996.png)

ふぁ？よく見るとCmakeを要求していてそれが...これ前にもあったなと言う事で、portでcmakeをインストールしRuggedをインストールしてみました。
sudo port install cmake
![スクリーンショット 2015-02-07 14.34.45.png](https://qiita-image-store.s3.amazonaws.com/0/25895/87845a08-f59c-6fc4-1c71-8ccfa5f1f0e5.png)

###uas2gitを使ってAsset Serverからデータを移行する

```
Usage: uas2git PROJECT_NAME [options]

Specific options:
    -h HOSTNAME                      Unity Asset Server host (default: "localhost")
    -U NAME                          Unity Asset Server user name (default: "admin")

        --help                       Show this message
```

**プロジェクト名がHIMESUKUで、同一端末にAsset Serverをインストールしている場合の手順。**

1. uas2gitコマンドをAsset Serverがインストールされている端末で実行し、gitのローカルリポジトリを作成する。
1. git logコマンドでローカルリポジトリの履歴があるか確認する。
![スクリーンショット 2015-02-08 11.41.56.png](https://qiita-image-store.s3.amazonaws.com/0/25895/e5701564-3672-c635-f7b3-6b01a821ed59.png)

1. ローカルのリポジトリが作成されるので、Bitbucktへリポジトリを移す。

1. Bitbucketのページで移行用の新規リポジトリを作成する。

1. [Bitbuckの既存プロジェクトへインポートする]( https://confluence.atlassian.co.jp/pages/viewpage.action?pageId=35815511)を行う。
![スクリーンショット 2015-02-08 12.07.49.png](https://qiita-image-store.s3.amazonaws.com/0/25895/d0295afb-6c9d-31b9-8050-060c96ffc78e.png)

1. BitbucketにGame Jamで作成したプロジェクトが反映される。
![スクリーンショット 2015-02-08 12.07.22.png](https://qiita-image-store.s3.amazonaws.com/0/25895/b7126b3b-28ee-501b-dff6-c74c04532cb0.png)


##参考にしたところ
http://japan.unity3d.com/unity/collaboration/
http://docs-jp.unity3d.com/Documentation/Manual/AssetServer.html
http://docs-jp.unity3d.com/Documentation/Manual/SettinguptheAssetServer.html
https://github.com/tnayuki/uas2git