Plastic SCMを使ってみようと思った⑦

# はじめに
お正月休みが終わってしまい打ちひしがれながら過ごしていた今日このごろですが、Plastic SCMについてはまだまだ試してみたいことがたくさん残っています。今後も思い立ったら色々試して記事を書ければいいなと思います、不定期になると思いますが。

というわけで、[前回の記事ではなんとかコードレビュー機能をお試し](https://qiita.com/Accky/items/2a8d49cb074fdb843974)してみましたが、次はもう少し実践的な実験として、Unityのプラグインを導入してエディタ上でPlastic SCMを操作してみようと思います。

# Plastic SCM Plugin for Unity
UnityのエディタにPlastic SCMを統合するにはアセットストアでプラグインをゲットする必要があるようです。[こちらのサイト](https://assetstore.unity.com/packages/tools/utilities/plastic-scm-plugin-for-unity-beta-169442)を見た感じではまだベータ版みたいですね。でもまあ、これを使うしかないのでこれで試すしかないですよね。

また、[Plastic SCMのサイトでもプラグインに関する説明](https://www.plasticscm.com/unity-plugin)がありました。
ざっと流し読みした感じでは、開発者モードとGluonモードをエディタ上で切り替えて使用できるようです。これはちょっと面白そうですね。

というわけで今回は折角なので、完全プレーンな出来たてのUnityプロジェクトにPlastic SCMを入れて、リポジトリを作るところから全部プラグインでできるかを試してみたいと思います。

# まっさらなプロジェクトにPluginを導入する
ひとまず現時点で最新バージョンであるUnity2020.2.1f1でプロジェクトを作り、そこにPlastic SCMを導入してみます。2018.4.25 or higherらしいので大丈夫でしょう多分。

早速エディタ上のAsset StoreからPlastic SCMを探せば……ってあれ？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/e934efba-523a-d315-8d80-08afed24cf8b.png)

アセットストアは移動しました、と。ウェブ上のアセットストアで購入したあとにパッケージマネージャからアセットをインポートしてくださいとのことです。
そうか、2020からはエディタ上のAsset Storeからアセットをインポートできないんだっけ。すっかりUnityから遠ざかっていたのですっかり浦島太郎状態。

仕方ないのでウェブサイトに移動してPlastic SCMを購入しました。無料で。（正確にはAdd to My Assetsしただけですが）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/087702fd-2396-4c0b-567b-53e9c16b4209.png)

で、パッケージマネージャのMy Assetsを表示して、購入日順にソートしなおししてみたら表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/0592c7b8-0066-46e2-1d1e-1b29bb2b2f2c.png)
右下のダウンロードボタンを押して、ダウンロードが終わったらインポートボタンになるのでポチッと。特に設定を変更せずにそのままインポートを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/c5e709d3-2738-1f8c-99d1-6d35324e03bb.png)
無事プロジェクト内にPluginフォルダが作られ中にPlastic SCMが追加されました。
なるほど2020はプロジェクト内のアセットもパッケージマネージャで管理できるってのはこういうことだったのか！（遅い）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/d432b2f5-281e-4073-3297-17538168f0e7.png)

# UnityエディタからPlastic SCMを使ってみる
## まずはReadMe
パッケージ内にドキュメントが含まれていたのでまずそれを読んでみました。が、どうやらこれは普通にPlastic SCMをセットアップする手順のようです。最終的にはオンラインのステップ・バイ・ステップガイドを読みなさいということでした。

幸いこのあたりはこれまでの記事で済ませていたのでパス！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/7979950a-bdac-31a0-302c-eb56bc326dc5.png)

## エディタ上でPlastic SCMを起動する
ReadMeにはエディタ上でPlastic SCMを起動させる方法などが書いてありませんが、どうせどっかにメニューが追加されているに違いないと思い、メニューを探していると見つかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/8cee94bf-cc8d-a40b-b8a0-86079566f760.png)

メニューを選ぶとPlastic SCMのタブが開き、しばらく何かを読み込んでいるような挙動の後、操作可能な状態になりました。
なんとなくですが、裏でPlastic SCMのログイン処理をしていたのかなという気がします。「…」などでリポジトリを選択する際などに、私のアカウントのクラウドにアクセスできるようになっているようなので。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/dc1d52e0-6cb8-975e-d3d8-2ffc40df0088.png)

# Unity用のリポジトリを作る
このプロジェクトを管理するためのリポジトリを、プラグイン上から新たに作ろうと思います。Repository nameの横にあるNewボタンを押したら新しくリポジトリが作れるようです。
リポジトリ名にTestPlasticSCM、サーバーに私のアカウントのクラウドを指定し、OKを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/3c93f8ee-1129-ab24-6acc-1941ba004b20.png)

しばらく処理待ちになり、それが終わるとリモートのリポジトリが作成されました。そのリポジトリが選択された状態になっています。先ほど作成したクラウド上のリポジトリを「…」から選ぶこともできるようになっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/5286197d-6997-5e67-3f46-3c0ebb0ccf49.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/05fbc96c-c964-8a9e-66d0-465e4b30260b.png)

DeveloperかArtistかを選ぶ必要があるのですが、ひとまずDeveloperを選び、あとはCreate workspaceボタンを押したらワークスペースが作ら、タブの見た目が大きく変化しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/043a01ae-eba4-d982-b270-d587548fbea1.png)


# ワークスペースを操作する
さてやっとワークスペースを操作できるようになりました。まずは現在のプロジェクトをチェックインしてみることにします。
ワークスペースのファイルを確認してみたところ、自動でignore.confが追加されており、Unityに最適化されたフィルタリングがなされているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/19ecd95b-7d9f-6533-e9bb-9e233ce9d35a.png)
なので安心してエディタ上からチェックインしてみることにします。
すべてのファイルにチェックを入れ、チェックインコメントを入力して「Checkin changes」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/4780cf65-1f53-331f-f5b9-f701167199e3.png)
……なんだか妙にそっけないエラーが出ました。うーんなんでしょう？？
何かしらのソフトがインストールされていないとこのプラグインは動かないのでしょうか。ReadMeにも特にそんな記述はなかったですが……。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/c5cde341-5e35-8ff6-730b-6124f005719f.png)
軽くググってみたところ、[同様の症状の人を発見](https://forum.plasticscm.com/topic/22600-error-zlib64/)しました。
解決方法として提示されていたのは、マシンの再起動 or Unityの再起動。ひとまずマシンの再起動を試してみます。
そして早速チェックインを行ったところ無事チェックインされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/839e0fcf-3caf-8751-6c29-a0bb8d0d4520.png)
チェンジセットもしっかり追加されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/64cc56f6-0b8a-99a9-a21f-867dd933bc54.png)

# これはどういう状態だろうか？
エディタ上からチェックインを行うことができました、が、ワークスペースはどういう状態でしょう？

1. ローカルリポジトリにチェックインが終わってPushされていない。
1. 直接サーバのリポジトリにチェックインされている。

というわけで、タブの右上にあるLaunch PlasticボタンをしてクラシックGUIを起動し、Sync repositoriesのタブで状況を確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/12229d99-5e44-eb32-4321-e21dd3ce7562.png)
どうやらローカルとサーバの間に差がない、ということはすでにサーバにPushされた状態になっているようです。すなはち正解は②。

これはUnityのエディタ上からチェックインすると必ずこうなってしまうのだろうか？？

# クラシックGUIを使ってみる
では次はUnityプラグインではなく、Plastic SCMのクラシックGUIからチェックインを試してみます。
以下のようにUnityのProjectにCSファイルを追加してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/5d5f0d9f-11bf-b967-2c81-4a3a74e8025d.png)
そして、Plastic SCMタブからではなく、Launch Plasticボタンを押してクラシックGUIを起動し、Pending changesタブを開いてチェックインを試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/cb1cddac-5c39-9bd5-a758-4c6ff4bd3084.png)
ありゃ、さっきと同じ結果だ。ということはなにか最初に設定を間違えてしまったかも。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/648d4012-5637-de51-a910-9812159d8ce3.png)

# 最初のリポジトリの設定を間違えたかもしれない
なので .plasticフォルダを削除して改めてUnityプロジェクトを起動してみます。
すると最初からもう一度設定が行えるようになるので、こんどは@localでリポジトリを作成してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/75f2dac8-4168-e9f7-1bd1-70b45f29ece0.png)

## Sync repositoriesの設定を足す
そしてもう一つ間違いを犯しておりました。
Sync repositoriesの設定がこれまでの記事で使用していたTestDistributedリポジトリとローカルを同期させる設定を表示するようになっていました。気づけよ私。

そこで、ローカルリポジトリ(TestPlasticSCM@local)とリモートリポジトリ(TestPlasticSCM@XXXX@cloud)を同期させるためのsync viewをAdd sync viewから追加します。とりあえず自動で作られた名前に習い、「Sync TestPlasticSCM from local to cloud」という名前にします。

次に「Sync TestPlasticSCM from local to cloud」を選び、画面下のSync view detailsを設定します。
Add src repoでローカルリポジトリ（TestPlasticSCM@local）を設定、そのリポジトリを選択してAdd dst repoでリモートリポジトリ（TestPlasticSCM@XXXX@cloud）を設定します。
そうすると以下のような見た目になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/1df285c0-c4c1-6df2-cb24-4cb93c5830ac.png)

これでチェックイン対象がローカルリポジトリになり、Push/Pullで更新ができるようになりました。

# プロジェクトに変更を加える
SampleScript.csをProjectに追加し、エディタ上からチェックインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/ca36696e-96b6-880a-5f8c-c5f59f0ce318.png)
SampleScript2.csをProjectに追加し、クラシックGUIでチェックインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/4eb23ec5-3189-681f-6caa-b0008c51283f.png)
そしてSync repositoriesタブを開き、先程追加したSync view detailsを確認すると以下のようになっています。
エディタ上でのチェックインもクラシックGUI上でのチェックインも同様に扱われています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294857/f7e81473-3818-522c-95ec-8e5b34cbde04.png)

あとはこの変更をPushすることでローカルリポジトリの変更をリモートリポジトリに通知できました。
というわけで無事、分散型でプロジェクト操作ができるようになりました。めでたしめでたし。

# おわりに
意図せずSVN的な使い方とGit的な使い方を確認できてしまいました。（正しいのかは不明）

エディタ上の初期設定のときに、リモートリポジトリを指定するとSVNのように直接リモートリポジトリへチェックインを行え、ローカルリポジトリを指定するとGit的な使い方ができるのかなと。

ただ、デフォルトではSVN的な使い方を想定しているのかなという気はしました。
Sync repositoriesの設定は適当に操作しながらなんとなく把握しましたが、こうしなさい的なチュートリアルも特になかったので、もしかしたら想定外の使い方だったりするのかな？と。

クラシックGUIが必須になるというのもプラグインの思想的に微妙だし、ローカルリポジトリを使用するとファイルのロックなどもできないなどを考えると、アーティスト的には微妙なのかなという気はします。

当然プログラマはGit的に使いたくなるので、その場合にはSync repositoriesの設定をしなければいけないだろうと思います。
というかプログラマはこのプラグインを使わず、普通にクラシックGUIを使えばいいかな……

というわけで切りが良いところで区切りましたが、このへんはもう少し触りながら理解を深めないといけないなと思いました。

# 見直してみたら
一通り記事を書き終えてから、最初に少し触れた[Plastic SCMのUnity Plugin](https://www.plasticscm.com/unity-plugin)のサイトに有る動画を見ていなかったのできちんと見直してみたところ、やはりサーバに直接チェックインする方法を想定しているっぽいですね。

そして、開発者モードとアーティストモードの違いは、Plastic SCMタブの右上のボタンで開くのがクラシックGUIかGluonかが違うみたいですね。なるほど。