UE5 の BP Project を Plastic SCM で管理して開発してみた

本文の前に

ここで書く内容は、ほぼ GitHub - SRombauts/UEPlasticPlugin: Plastic SCM Plugin for Unreal Engine に書かれている内容です。なので、使い方を知りたい方は公式ドキュメントを一読される方が分かりやすいです。

PlasticSCM のリポジトリとして folk されたものがありますが、上記の元の作者のリポジトリと同一の内容のようです。
issue を立てられないので公式のミラーだと思いますが、いずれこちらに移すのかもしれません。GitHub - PlasticSCM/UEPlasticPlugin: Plastic SCM plugin for Unreal Engine

この記事は、あくまで私達のチームがどう使ったかぐらいの話と思ってください 😇

導入の経緯

今回参加した UE5 ぷちコンは 2 人で開発していました。大きく担当を分け (キャラクターやそれに付随するもの or UI・ネットワーク・Level やそれに付随するもの) ていましたが、それでも同じファイルを触る時もでてくるため、それを相手が触っているかという情報は重要でした。(もちろん2人なので、都度聞けばというのもありますが、さすがに面倒。。)

なので、まあ普通に SCM を導入しようかということになりました。

Github

日常的にはスクリプト言語C# で書くことが多いので Github (というか Git) が一番使い慣れたコードの管理先でした。

当初はそれでやってみたのですが、Git LFS を利用したとしても、バイナリをちょっとアップロードするだけで無料版の制限に引っかかってしまい、さすがにそのためにリポジトリを色々分けたりというのも運用が面倒になりそうだったのでやめました。(もちろんお金を払うべきというのもあるのですが、今回はぷちコンでしたので。。)

また、UE5 の Source Control 機能としても、ほとんどの機能が利用できずあまりメリットが享受できないなぁというのもありました。

Perforce

たぶんこれが一番いいんだろうなと思いつつ、無料で運用しようと思うと自分でサーバー立ててどうこうという感じになりそうだったので今回は断念。。

Plastic SCM

Unity が買収というニュースを見てから気になっていたので、以前からインストールはしていたのですがきちんと使うこともありませんでした。

ただ、とりあえず利用ストレージが 5G を超えるまでは無料で使えるようだったので今回はこれを利用することにしました。

Plastic SCM - Licensing and pricing options

また、UE5 の Source Control 機能も十分な機能が利用できることも決め手になりました。

以降は Plastic SCM (Cloud Edition) の利用について書いていきます。

UE5 でのプロジェクトの作成

まずは UE5 のプロジェクトを作成しておきます。先にローカルにリポジトリフォルダを作ってしまうと、UE5 が「すでにフォルダがあるから無理」と警告してくるためです。(おそらく大抵は多少コードを書いてから管理しようかなとなると思うので、この流れの方が自然かなと)

リポジトリの作成

ここは Plastic SCM の GUI ツールで行います。

上記のようにリポジトリを作成します。リポジトリ名はなんでもいいですが、先に作成した UE5 のプロジェクトフォルダを指定する必要があります。

こうすることで root に .plastic フォルダが作成されます。Git と同じですね。

ちなみに、この .plastic フォルダを削除するだけでさくっと管理を外すこともできます。(もちろん UI からもできます)

リポジトリのコードのローカルへの複製

自分でコミットしたコードが、クリーンな状態にチェックアウトした場合にちゃんと動くかというのは気になるケースがあると思います。その場合は、以下のように別のローカルフォルダにダウンロードすることで簡単に確認できます。

確認が終わればさくっと消してもいいですし(その場合はローカルフォルダも消しましょう)、継続的に動作確認のためのフォルダにしてもいいと思います。

余談ですが、動作確認をする必要があるのなら、main にコミットする前に別の branch に一度 push してからの方がチームメンバーに迷惑をかけなくていいですね。(と書きつつ、自分でお試しでいれたエンジンプラグインなんかが残っていると、同じマシンだと有効になってしまうので正確な確認にはならないですが 😅)

設定

差分検出設定

Plastic SCMではまったもの

上記記事の「ファイルの内容で差分検出」の部分を参照してください。

記事はレガシーUI ですが、現行の UI もほとんど変わりません。

UEPlasticPlugin の導入

デフォルトで UE5 には入っているのですがバージョンが古い上に、その状態だと Source Control の機能が全く利用できません。なので最新版を利用します。

Manual installation from the latest version here - SRombauts/UEPlasticPlugin: Plastic SCM Plugin for Unreal Engine

上記の公式の通りです。UE5 用の zip をダウンロードしてきたら、Engine のプラグインフォルダに入れます。

上記のようになっていれば大丈夫です。UE4PlasticPlugin となっていますが、そこも問題ありません。(今後変わるかもしれませんが)

Unreal Editor で初期設定

Source Control settings - SRombauts/UEPlasticPlugin: Plastic SCM Plugin for Unreal Engine

こちらも公式の通りです。今回はすでにリポジトリも作成済なのでもろもろ勝手に認識されると思います。

加えて Project Settings, Editor Preferences も済ませておきます。と書きつつですが、私はデフォルトから変えていません。

p4merge が未インストールであればインストール

Editor Preferences や、Plastic SCM の GUI ツールの差分ツール等を見てもらうと分かる通り、差分ツールは p4merge が指定されています。お好みがなければこれをインストールしておけば設定変更せず使えます。

私は scoop で管理しているのでそちらからインストール。

> scoop bucket add extras
> scoop install p4v

Plastic SCM の GUI ツールでの差分ツールの追加

Plastic SCM は UE に最適化されているという訳ではないので、 GUI ツールで .uasset の差分ツールが未設定です。なので、それを設定しておきます。

Configure Visual Diff of Blueprints from Plastic SCM GUI - SRombauts/UEPlasticPlugin: Plastic SCM Plugin for Unreal Engine

これもプラグイン側の公式に書かれています。

GUI ツールでの差分ツールの注意点

[SOLUTION] There aren't any diff tools defined in the client configuration file - Unreal Engine - Plastic SCM Community

せっかく設定した差分ツールですが、現行の UI では動作しません。レガシーUI に変更することで問題なく利用できるのでレガシーUI が利用できるうちはそちらを使った方がストレスが無いかもしれません。

ロックルールの設定

これはお好みになりますが、特定のファイル等で自動で checkout 時にロックをかけることができます。

Plastic SCMのリポジトリでファイルをロックさせる方法を知りたい – ユニティ・テクノロジーズ・ジャパン株式会社

例えば雑に .uasset 単位でロックをかけるなら以下のようになります。

これは、GUI ツールで初めてロックをかける時にルールを作るか質問されるので、そこで作ることもできます。もちろんファイル名を直接指定できるので、「PlayerController だけは競合しやすいのでロックして作業したい」等もありだと思います。

その他

ignore.conf がルートに配置されていると思いますが、これは Git の .gitignore です。Unreal Editor が作成するもので十分ではありますが、追加で除外するものがあれば登録しておくといいと思います。

設定完了

ここまでで初期設定が完了です。

以降はざっと開発時のポイントとなる操作を見ていきます。

いくつかの開発時の操作

ただ、これも公式ドキュメントに非常に詳細に載っていますのでそちらを見るほうが確実です。

Working in Editor - SRombauts/UEPlasticPlugin: Plastic SCM Plugin for Unreal Engine

submit する前に変更を確認する

割りとお試しで変更した部分が残ったりするので重要です。

GUI で何が変更されたか確認
Unreal Editor の View Changelist でも確認
Unreal Editor で Diff の確認
GUI でも Diff の確認は可能 (レガシーUI)
マテリアルの場合はテキストなので、、私ではまだわかりにくい

branch で開発する

checkout の状態は branch が異なっていても通知されるので、正直少人数だとそこまで branch を使った開発に恩恵は感じ無いのですが、Plastic SCM はレビュー機能もあるのでチームの運用次第では使うのではないかと思います。(今回は 2 人での開発だった上に担当分けを大きくしたのでレビューまでの運用は無し。。)

以下ではロックの運用も兼ねて書いていきます。

GUI で新規ブランチ作成 (現行UI でもできます)
GUI から lock と checkout をする (Unreal Editor からはロックはできない。ルールを設定すれば可能)
checkout したよアイコンがつく
異なるフォルダに clone する (自分以外の開発者想定)
main の branch
誰かが lock で checkout してるよアイコンがつく (色弱なので正直アイコンの色の表現分かりにくい。。)
色々警告でるが main ブランチと sample_branch の両方でコミットをそれぞれ作る (先に sample_brahch でコミットしてロックを外してから main でコミット作った)
sample_branchmain に merge する(スクショ取り忘れた。。)と conflict が出る
Resolve Conflict ボタンを押すと、Diff ツール (Unreal Editor) が立ち上がる。ただ、Diff だけなのでここでは解決はできない。
Unreal Editor 側の Source Control にも Merge が出現するので、そちらをクリック
Merge Tool がでる

スクショを撮り忘れたのですが、Git と同じく Resolve Conflict の後は再度コミットが必要なのでそちらもお忘れなくです。

Merge Tool

Merge conflicts on Blueprints - SRombauts/UEPlasticPlugin: Plastic SCM Plugin for Unreal Engine

上記公式の解説の方が詳細です。

Merging Uassets - Unreal Engine - Plastic SCM Community

また、上記で作者が回答しているように、この merge tool はあくまで差分を見るためだけのツールである点にも留意する必要があります。この辺は Plastic SCM というよりは Unreal Editor のこれからの進化に期待したいところです。

最後に

私もですが、日常的にチームで Git の運用を行っているともっと Plastic SCM の使いこなすべき機能は多くあります。私は現状ほとんどの機能を使いこなせていませんが、上述の内容でひとまず 2 人の運用を乗り切れました。

また、最新の Plugin を入れることで One Files Per Actor (OFPA) に対する差分の利用もできるようになるので、Perforce を利用できない少人数の開発チームは Plastic SCM を利用するメリットはいくつかありそうに思います。

参考にさせていただいた記事