Edited at
VRChatDay 17

【Git】【Unity】VRChatterのためのGit入門

この記事はVRChat Advent Calendar 2018の17日目の記事になります。

昨日の記事はじぇしか(@jscmla1118)さんによる、「VRChatと外部世界を繋ぐインターフェース」でした。


はじめに

ハァイ、ジ〇ージィ! UnityのプロジェクトGit管理してるゥ?

ということで、元々エンジニアとしてGitを使っていた私が、VRChatのアバターやワールドをGit管理するようになって便利だったので、今回はVRChat用のUnityプロジェクトをGit管理する方法や注意点について書いていきたいと思います。


そもそもGitとは?

こちらに書かれている用に、分散バージョン管理システムというものですが、簡単に書くと、作っているものの途中過程を随時記録して管理できるシステムのことです。

作っているものの状態はリポジトリというデータベースに保存されていきます。

また、ファイルをリポジトリに記録させる事をコミットすると言います。

スクリーンショット 2018-12-13 17.22.13.png


Gitでプロジェクト管理することの利点

作っているものの過程を随時記録できるので簡単にプロジェクトのバックアップをとることができます

そして、リモートリポジトリを利用すれば、インターネットのサーバー上にバックアップをアップロードして管理することも簡単にできてしまします。

また、過程が別々に保存されているので、過去のある時点で作ったものを取り出すといったこともできます。

他にも、ブランチという機能を使ってそれまでに作ったものを残したまま別バージョンのものを作ることもできます。


VRChatのプロジェクトをGit管理する時の注意点

VRChatのプロジェクトの中には購入した3Dモデルなどを含めている人が多いと思います。

こういったプロジェクトをローカルのリポジトリで管理している分には問題ないのですが、リモートリポジトリにアップロードする際の設定としてpublicなプロジェクトとして管理しないようにしてください。

publicなプロジェクトとして管理してしまうと、他の人がそのプロジェクトをコピーできてしまうため、多くの販売アバターの利用規約にある再配布禁止の規約に違反してしまう恐れがあります。

また、そうでなくとも勝手に自分の作っているものをコピーされる事がありますので、VRChatのプロジェクトはprivateで管理するようにした方がいいと思います。

しかし、リモートリポジトリのホストとして有名な GitHubprivateリポジトリは有料で提供されています。 (学生であれば2年間は無料で使えます 詳しくはこちら)

(2019年10月1日追記) 現在はGithubのプライベートリポジトリも無料で使えるようになっています。

Bitbucket というリモートリポジトリのホストサイトではprivateリポジトリが無料で使用できるので、個人的にはこちらがおすすめです。 (以下のチュートリアルでもこちらを使っています)

もう一つの注意点として、VRChatのプロジェクトにはモデル、テクスチャ等の容量の大きいファイルが多く含まれています。

容量の大きいプロジェクトは最終的に操作に数十分かかるようになったり、リモートリポジトリの容量制限に引っかかってしまうことがあります。

目安としては、プロジェクトの Assets フォルダの容量が 500~600MB ほどのプロジェクトが限界かと思います。

巨大なプロジェクトは GitLFS というサービスを利用して管理したり、完全にローカルで管理するようにした方がいいでしょう。


実際にやってみよう!

では、実際にGitを使ってプロジェクトを管理してみたいと思います。


SourceTreeのインストール

Gitを使う場合、コマンドライン(Windowsでいうコマンドプロンプトなど)上から使う方法と、GUIのソフトウェアから使う方法の2種類の使い方があります。

前者は素早く操作できるものの、コマンドラインの入力に慣れていなかったり、コマンドを覚えて入力する必要があり最初は大変なので、今回は直感的に操作できる後者のソフトウェアを使っていきたいと思います。

今回使用する「SourceTree」は、後者のGitクライアントソフトのひとつです。

詳しいダウンロードやインストール方法については こちら のサイトを参考に行ってみてください。


Unityプロジェクトの事前準備


Gitで管理しないファイルを設定する

Unityのプロジェクトにはアセットから生成された Unity 内部の形式のデータをLibraryフォルダに保存していますが、このLibraryフォルダの容量がめちゃくちゃでかいです。

また、Unityのプロジェクトを開く際にこのLibraryフォルダは自動生成されるため、Gitで管理しないように設定してしまった方がいいです。

他にもGitで管理しなくていいファイルがいくつかあるため、そういったGitで管理しないファイルの情報をまとめた.gitignoreというファイルを作成する必要があります。

Githubのgitignoreテンプレートunity版が以下のようになっていますので、まずは適当なテキストエディタ(メモ帳など)に以下の設定をコピペしてUnityプロジェクトフォルダのすぐ下に.gitignoreというファイルを作成してみてください。


.gitignore

[Ll]ibrary/

[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
Assets/AssetStoreTools*

# Visual Studio cache directory
.vs/

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.opendb
*.VC.db

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt

# Builds
*.apk
*.unitypackage

# Crashlytics generated file
Assets/StreamingAssets/crashlytics-build.properties



Unityの設定

次にUnityプロジェクト側の設定を変更します。

管理したいプロジェクトをUnityで開き、メニューバーのEditからProject Settings -> Editor を開きます。

するとInspectorEditor Settingsが出てくるので、その中のVersion ControlAsset Serializationの項目を以下のように設定します。

unity_editor_settings.png

これでプロジェクトをGitで管理する準備は完了です。


リポジトリの作成

それではSourceTreeを起動してみてください。

2018-12-15 (2).png

最初はこのような画面になっていると思うので、まず上のCreateボタンを押します。

2018-12-15 (4).png

するとリポジトリを作成する画面が出てくるので、参照ボタンから管理したいプロジェクトのフォルダを指定して作成ボタンを押します。

2018-12-15 (5).png

このような画面が出てくるかもしれませんが、はいをクリック。

ripository.png

すると、このような画面がでてきます。これでリポジトリの作成は完了です。


プロジェクトをGit管理下に置く

画面の作業ツリーのファイルの横にある全てインデックスに追加ボタンを押すと、ファイルをGit管理する準備が整います。

2018-12-15 (8).png

そして、ファイルをGit管理下に置く(コミットする)前にコミットメッセージというのを書きます。

このコミットメッセージというのは後で自分が見返した時に、どんな変更を加えたのかというのを把握するために書くものです。

自分の名前の下の空欄にコミットメッセージを追加してコミットボタンを押します。

commit.png

すると、左のブランチタブにmasterという名前が追加されます。

master.png

これでプロジェクトがGitで管理されるようになりました。


Bitbucket にアップロードしてみる

では、このプロジェクトをBitbucketのリモートリポジトリにアップロードしてみましょう。

ブラウザで https://bitbucket.org/product を開きます。

bitbucket.png

右上の log in をクリックするとSource treeのインストール時に登録したAtlassianのアカウントが求められますのでAtlassianアカウントでログインします。

すると、下のような画面になります。

remote_repo.png

左のプラスボタンを押してCREATEメニューからリポジトリを選択します。

make_repo.png

リポジトリ名を入力し、これは非公開リポジトリですにチェックがついていることと、バージョン管理システムのラジオボタンにGitが選択されていることを確認してリポジトリの作成ボタンを押します。

remote_repo2.png

すると上のような画面に切り替わるので、赤枠で囲まれた部分をコピーします。

SourceTreeの方に戻り、右上のターミナルボタンを押します。

terminal.png

上のようなコマンドラインの画面が出てくるので、ここに先程コピーしたコマンドを貼り付けてEnterを押します。

SourceTreeに戻り、上のプッシュボタンを押すと以下のような画面になるので対象の下のチェックボックスにチェックを入れてプッシュボタンを押します。

2018-12-15 (17).png

ブラウザの先程のページを更新して以下のようにプロジェクトファイルが見えるようになっていれば完了です。

pushed.png


プロジェクトの更新

プロジェクトの更新方法についても説明します。

2018-12-17 (2).png

Unity上で変更を加えた後にSourcetreeのブランチタブのmasterを開くとこのように表示されますのでこの変更をコミットしていきましょう。

2018-12-17 (3).png

ファイルステータスタブの作業コピーに移動すると変更のあったファイルが表示されるので全てインデックスに追加ボタンを押します。

変更.png

これでコミット準備ができたのでコミットメッセージを書いてコミットしましよう。

ここで、左下の変更をすぐにorigin/masterにプッシュするチェックボックスにチェックをしておくと、コミットが自動的にリモートリポジトリにも反映されるようになります。

2018-12-17 (5).png

ブランチ->masterに戻ると変更が反映されているのが分かると思います。

変更remote.png

リモートリポジトリにも反映させた場合はプロジェクトのリモートリポジトリページのコミットを見ると変更が反映されてるのが分かると思います。

これでプロジェクトの更新をGitへ反映させる作業は完了です。


終わりに

ここまでGitを使ってプロジェクトを管理し、リモートリポジトリへのアップロード、プロジェクトの更新の反映までを記載しましたが、Gitにはまだまだ沢山の機能があります。(私も全部把握できてないです)

他の機能やこういう時はどうするの?というTipsについては他のQiitaの記事や色んなWebサイトに載っていますので必要になったら調べてみるといいでしょう。

また、Gitに関する質問は私の方でも受け付けていますので質問のある方はTwitter @sansuke05_vr の方まで連絡いただければ、分かる範囲でお答えします。

この記事をきっかけに少しでもGitを使う人が増えてもらえれば幸いです。


参考資料

【Unity/Git】Unityでチーム開発をする(1) 概要と初期設定編

Unity向け .gitignoreの設定について