VRChatのアバター管理をGithubでする(自分の場合

Githubってすごいですよね。VRChatアバター管理用に使ってる話もチラチラ見かけるんですが、人によって流儀が違いすぎて参考になるんだかならないんだかよくわからないので、とりあえず自分の環境を晒す趣旨で記事にしてみます。Github使ったことない超初心者向けで、VRChatとか関係なしにVSCodeでGithub使いたいという人には役に立つ可能性が微レ存な記事にするつもりです。

## とりあえず用意するもの
- VScode： 公式サイトからダウンロードしてインストールしましょう。GitのGUIとして使います。
- Githubのアカウント： Gitlabでも大丈夫です。ほぼ同じです。公式サイトからアカウント作りましょう。Githubにしたけど個人的にはGitlabの方が使いやすい印象あります。
- VRChatのアカウント：　しばらく遊んでNew Userになってる前提です。
- Unity： VRChatのSDKと対応するバージョンが必要です。Unity hubから入れるのが吉。
- その他：　VRChatのSDKとか。

## 注意
2022/4/27時点の情報です。世の中の変化はやいのですぐに全く役に立たなくなるかもしれません。

## Github使うと何が嬉しいのか
gitによる差分管理がいい感じにできます。任意のタイミングの状態への復元が簡単なのでUnityプロジェクト壊れたから簡単に戻せます。すぐ壊れるので安心。むしろ一回やるともうなしではやっていけない状態になっています。。

## 流派
独学の自己流ですが、ブランチで管理派です。PC用とquest用とか大枠くくった程度。そもそもアバター数が少ないし、バージョンアップ対応とかしたことないので真面目にやるなら真面目にやってる記事を参照した方がいいかも。


導入の簡単さ重視です。

## 手順
### レポジトリ作成
まずはGithubの自分のページから新しいレポジトリを作成します。名前はお好みで。　　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/d50b0ed3-25c1-202c-41d3-a480f04a62e3.png)

個人用なのでPrivateで作るのが大事です。Github デフォはpublicなので注意。Publicだと世界中から見えてしまいます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/efe094e6-1126-7a75-ad20-11bf65cf1560.png)
readme.mdはあったほうが好みなのでつけるようにしています。ここにメモを書いています。


add .gitignoreでunityを選びます。これをやっとくとunityのライブラリとかがGit管理されなくなる(.gitignore)のでアホみたいに重いライブラリ部分を除いたプロジェクトフォルダの必要な部分のみGitによる差分管理することができます。やらないとGithub無料分容量超えるかもしれないしろくなことがないのでやった方がいいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/add3dbb8-f5c6-e5c4-1a6e-c33e2e68aea2.png)


### VScodeの設定
ここまでできたら次はVScodeを起動します。  起動して適当に好みで日本語化したりテーマで色変えたりしておきます。

で、なんも開いていない状態だとGithubのレポジトリをクローンして始めるみたいなのがあるので、そこを押してあげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/4614f41d-dbf7-d088-614b-eb15c6b247da.png)


で、Githubから複製を選ぶとなんかログイン画面とかが勝手にでてきて言われたとおりにやると認証されて自分のアカウントがVSCodeから使えるようになります。Gitインストールしろとか言われたら言われた通りインストールします。拡張機能いれろって言われたら言われた通りにインストールします。で、デフォルトの選択肢にはPublicのレポジトリしかでてこないので、さっき作ったレポジトリ名を入力してあげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/6f2b8bbb-fd86-ca76-b2e2-ea23a0dd12da.png)

で、選ぶとフォルダの場所指定しろって言われるので適当にフォルダ指定します。そこにGit管理されたフォルダができます。


ちなみにGitlabでやる場合は、Gitlabの画面のクローンするところにVSCodeで開くってあるのでそれで開きます。認証周りのやり方がちょっと違う。


フォルダの中にはまだreadme.mdと.gitignoreしかないはずです。ここに色々入れていきます。手始めに自分はvroidで作ってる人なのでvroidのファイルを入れてます。フォルダ作ってvroidのファイルを入れた状態です。普通にエクスプローラーとかでやってもいいしVSCodeでやってもいいです。っていうか後述しますが説明のためなので今やらなくてもいいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/02d6f69e-729f-8055-59c8-099c2ebf127f.png)

ちなみにVScodeの機能としては主にエクスプローラー（ファイル操作／左のアイコンの一番上）とソース管理（（左のアイコンの3番目）だけ使います。拡張機能でGit系の便利なのもいろいろありますが、今回は割愛。ぐぐるとめっちゃ出てくる。

ソース管理画面に行くと変更のところに入れたファイルたちがいます。ブランチをちょくちょくいじるのでソース管理レポジトリも表示しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/30b0a75d-0468-0422-5d92-c1d0e3dcd9a0.png)

するとこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/3cf8f539-092e-5cc6-4910-5584dd136085.png)

いまはmainレポジトリでやってます。現在は、「フォルダの中は新しいファイルがあり」、「ローカルのGitからみて変更差分がある」状態です。つまり、空のレポジトリから２個ファイルが増えているけど変更はまだ「コミット」されていない状態です。ファイルをおもむろに入れちゃいましたがとりあえずこいつらは保留にしておきます。空のテンプレート状態をセットしてからコミットします（順番間違えてます）

### Unity起動
Unityを起動してプロジェクトを作っていきます。VRChatアバターの[現時点のやりかた](https://docs.vrchat.com/docs/current-unity-version)に従って、2019.4.31f1で3Dのプロジェクトを作ります。LocationにさっきGitで作ったフォルダを選びます。Unity起動しました。


VScodeに戻ります。ソース管理みると6Kとかすごい数が変更になっていますが、.gitignoreの場所がずれてるせいなので、Unityプロジェクトの方に移動してあげます。フォルダとかうまくやってればこの操作は不要です。好みで階層一個ずらしたせいや。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/78121132-93f5-a29f-f2b5-97d0878fd19c.png)

ソース管理の変更が30個くらいに落ち着いてればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/5e71a4ad-ad96-3174-531b-5fe9b8e92cd0.png)

もう一個のパターンとしては.gitignoreを動かすのではなくて作ったUnityプロジェクトをgit管理フォルダの直下にするパターンもあります。どっちでもいいです。

で、Unityに戻ります。[VRM Converter for VRChat](https://booth.pm/ja/items/1025226)とか[VRChatSDK3.0](https://docs.vrchat.com/docs/choosing-your-sdk)とか必ず使うものをインポートしていきます。DynamicBoneはもういらない子なので入れないです…。

この辺のツールの更新を一括で管理するいい感じの記事見た記憶ありますが、理解できてないのでできてないです。

いろいろ必ず使うものを入れ終わったらVRChat SDKからログインだけしてUnityを一旦終了します。

### mainレポジトリにプッシュ
VSCodeにもどります。ソース管理にたくさんファイルがいます。最初に~~間違って~~入れたVroidのファイルを除いてmainのところにコミット、プッシュしていきます。

全ての変更をステージして、Vroidのファイルだけ変更のステージングを解除してやります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/0f245eca-a0b8-ffdf-6c2a-dd1ce7058237.png)

ステージングした変更だけ変更を登録したりできるんですね。便利ですね。

メッセージのところに適当に何か入れてコミットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/d98a133c-a362-23c1-d6f8-9eef3d1ed767.png)
怒られました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/37ff6648-bec8-3379-619b-318fb67ad68e.png)
gitの設定でuser.nameとuser.emailを設定する必要があります。Gitのログを開くと
```git
*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: no email was given and auto-detection is disabled
[2022-04-27T13:17:37.455Z] > git config --get-all user.name [26ms]
```
こうすればいいよと書いてあるので、おもむろに横にあるターミナルで
```
> git config --global user.email "Githubに登録しているメールアドレス（たぶん）"
> git config --global user.name "Githubのユーザーネーム（たぶん）"
```
を入力します。--globalを消してもいいです。自分は消しました。

で、コミットします。今度は通りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/0c4afe33-3843-6ffb-12e4-e5ced1645ee4.png)
ソース管理レポジトリの方にmainの横に1↑が増えました。これは、ローカルのGitで反映された変更が、Githubのリモートレポジトリの変更と差がある状態になったので同期しましょうねってことです。ここを押してやるとローカルとリモートの同期（今回はプッシュ）がされます。

はい。できました。Githubで確認してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/b982e79e-b793-e228-4872-99a69afafa47.png)
こんな感じになっています。

やっと事前準備できました。


ちなみに、Unityプロジェクトを新規で作りましたが、既存のプロジェクトのフォルダコピーして初期状態として放り込むのもありです。


### ブランチでアバター管理
VSCodeに戻ります。

ブランチ作ります。mainはmainで取っておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/c61b74d4-c09d-95bb-8894-884885421f65.png)
ソース管理のその他の操作からブランチの分岐の作成をします。

適当な名前でブランチを作ります。これがアバターの名前のつもりです。一般的なGitの運用的にはブランチは適当なタイミングで元のブランチにマージ（統合）するんですが、今回はひたすら分岐だらけにする運用します。

ブランチできたら、さっき残しておいたVroidのファイルをブランチにコミットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/488c08ff-73ce-d83b-1c9f-902f8ad2efa3.png)
ブランチ作った直後はプッシュじゃなくてブランチの発行になります。

あとはもりもりアバターをいじります。自分がキリがいいなというタイミングで変更を全てステージングしてコミットしておきます。

このコミットしたタイミングにいつでも帰れます。


仕上げにreadme.mdにアバターとアバターに使ってるアセットのメモとか、どんな操作したか忘れそうなポイントなどを書いていきます。UnityのスクショをGithub上で編集しておもむろに貼り付けると画像が貼れて便利。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772969/0aefb056-b203-54be-0203-4708ea306efc.png)


破壊的変更やるときはブランチ新しくするとか、新しい服つけたらブランチ新しくするとか、特にせずにリリースでバックアップポイント作っておくとかどうするのがいいかは全然わかりません。

っていうかあれだな。自分は同じアバターの派生をVroidでいじってインポートからやり直すという特性上、文字通りブランチだからこういう風になってるんですね。

というわけで、自分はこんな感じでやってますという紹介でした。



# 参考
[【Git】【Unity】VRChatterのためのGit入門](https://qiita.com/sansuke05/items/d4dd046eef65a987ed02)
[VRChatアバターGit管理でアバター多頭飼いのススメ](https://narazaka.hatenablog.jp/entry/2021/02/13/VRChatアバターGit管理でアバター多頭飼いのススメ)