【超初心者向け】Unityのプロジェクトを、GitHub for Unityを使って超簡単にバックアップする方法

# この記事の目的

* 「Gitって何」というレベルの人が、とりあえずGitを使ってUnityプロジェクトを**ローカル**でバックアップできるようになる
    * 想定としては非プログラマ（デザイナーとか、VRChatユーザとか）
    * 想定ユーザは1人だけで、チーム開発ではない
* ここでいう「バックアップ」は次のことができる
    * 今のUnityプロジェクトの状態を保存できる
    * 操作をミスってぶっ壊したときに、直前のプロジェクトの状態に戻せる
    * **PC自体がぶっ壊れた！みたいな状況には対応していません**（後述するサーバ保存などを併用しましょう）
* Gitの「むずかしい」機能は使わない
    * ブランチ操作などはしない
* `GitHub for Unity` って名前のプラグインだけど、別に「GitHub」は使わなくても大丈夫です

# 今回使うもの

* GitHub for Unity

# 用語集

|用語|意味|
|:--|:--|
|Git|ファイルの差分管理をするもの（バックアップをとるツール）|
|GitHub|GitでとったバックアップをサーバにアップロードできるWebサービスの名前|
|コミット|「今この瞬間」の状態を保存すること（プロジェクトの一部だけをコミットすることも可能）|

# インストール手順

## 1. GitHub for Unityをダウンロードする

* [GitHub for Unity](https://unity.github.com/)

こちらから`GitHub for Unity`の`unitypackage`をダウンロードしてください。
（アセットストアから導入しても可）

## 2. バックアップしたいUnityプロジェクトにアセットを追加する

バックアップしたいUnityプロジェクトをUnityで開き、さきほどの`unitypackage`を追加してください。

![unitypackage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/1827ca9c-f878-ac36-b67e-d11586ca354e.png)

導入が完了すると、メニューの`Window` -> `GitHub`の項目が追加されています。
（自動的に `.gitignore`が生成され、git LFSも有効化される）

## 3. 初期設定をする


`Window` -> `GitHub`から、`GitHub for Unity`のウィンドウを開きます。
初回起動時は裏でインストールが実行されるため、ちょっと待たされる場合があります。
![menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/40d18cb1-f2d7-4899-32fa-b466df250f3e.png)


ウィンドウが開けたら、`Setting`を選び、`Name`と`Email`欄を設定してください。
適当な名前とメールアドレスでもOKです（プロジェクトをpublicに公開するなら、ちゃんとしたものを入力しておいた方がいい）。
![setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/c4c2282c-b9ab-98fb-0c58-b922027f7eda.png)



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

`Initialize`のタブを開き、`Initialize a git repository for this project`のボタンを押します。
![Initialize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/371ccd09-c172-77e6-86fe-a71e5e0797ec.png)

このボタンを押すとUnityプロジェクトに対して`Git`の初期設定が実行され、このプロジェクトで`Git`が使えるようになります。

## 5. 現状の状態で1回まずバックアップをとる

インストールした直後の状態で、まず1度バックアップを取ります。
（ちなみにGitの場合はバックアップを取る作業のことを「**コミット**」すると呼びます）

`changes`のタブを開き、すぐその下の`All`を押します。
すべてのファイルにチェックが付いたことを確認してから、下の方の`Commit summary`と`Commit description`を入力してください。

* `Commit summary` : このコミットにつける名前
* `Commit description` : このコミットでやった作業の詳細

`summary`と`description`は適当でも構いませんが、あとからバックアップを見直す時に困るのである程度分かるように入力しておくことを推奨します。

すべて入力できたら、右下の `Commit to [master]` を押します。

![first commit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/a757d323-a610-b3a7-dd63-0b245e009192.png)


正しくコミットできたら、`History`タブにこのコミットが追加されています。

![history.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/69b82a2c-e6fa-8ec9-1361-97a06a84cda7.png)

導入は以上です。

# 使い方

## 現在のプロジェクトの状態でバックアップをとる

`GitHub for Unity`を導入した状態でプロジェクトを操作すると、Projectビューにマークが付きます。

![mark.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/f5e5815d-e21e-4d5b-9d4c-72dd018e2ce2.png)


これは、「このファイルはまだコミットされていない」という意味になります。
つまり「バックアップしていないファイルだよ」という表示になります。

![changes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/550eaf7c-3ae9-09f8-6ef7-90be7c8bb5f9.png)
（差分が出ているファイルにマークが付いている）

バックアップを取る場合はさきほどと同じく次の操作を行います。

1. `changes`タブを開く
2. 上の方にある`Refresh`ボタンを押す
3. このコミットへ含めたいファイルにチェックを入れる
4. `summary`と`description`を入力する
5. `Commit to [master]`

正しくコミットできたら、`History`タブにコミットが追加されています。

![addSphere.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/04e8c99c-bff0-1399-ee29-ac41e8aaf23b.png)

### コミットの頻度はどうしたらいいか

「区切りがいいタイミング」でコミットする（バックアップする）とよいでしょう。
たとえば「新しいアセットを追加した」「Prefabの設定値を変更した」など。

「今日1日分の作業をまるごとコミットする」でも構いませんが、巻き戻した時に大量のファイルが戻ってしまいます。
適切な粒度でコミットするようにしましょう。


## 直前のバックアップへ巻き戻す

間違えてファイルを消してしまったり、設定値がおかしくなってしまった場合に、直前のコミットの状態に戻すことができます。

1. `changes`タブを開く
2. 巻き戻したいファイル/フォルダを右クリックして、`discard`を選ぶ

![discard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/9c2bc13d-0786-af40-cb72-bc29123c090b.png)
`discard`すると削除したファイルは復活し、変更したファイルの設定は元に戻ります。

注意点として、**discardで巻き戻した設定をまた元に戻すことはできません**。
保存したかったファイルを間違えて`discard`してしまうと取り返しがつかないので、かなり注意する必要があります。


## おまけ：前回のバックアップをなかったことにしたい

バックアップしたはいいものの、ミスってたため「前回のバックアップ」をまるごとなかったことにしたい場合。

`GitHub for Unity`からは、「バックアップの操作を打ち消す」という操作ができます。

1. `History`タブを開く
2. なかったことにしたいコミットの履歴を右クリック
3. `Revert`を押す

![revert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/f1a5b163-1321-e157-f074-8e11a9c33055.png)


`Revert`すると、「そのコミットの逆の操作」をしたコミットが生成されます。
これによって前回のバックアップを擬似的になかったことにできます。

![revert2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/df2938bf-294c-6469-86c0-4f3566f749ba.png)
（新しいファイルを追加したのなら、それを消す変更を追加することでプラスマイナスゼロにする）

# まとめ

`GitHub for Unity`を使えば、とりあえず「バックアップする」「壊れた時に直前の状態に戻す」ということができるようになります。

ただし、`GitHub for Unity`は必要最低限の操作しかできません。
なので、次のような複雑な操作は実行できません。

* **特定のコミットの状態に完全に戻したい**
* **複数人で同時にプロジェクト編集したい**
* 変更を残したままコミットだけなかったことにしたい
* 現在の状態を保持したまま、別の作業を並行して行いたい

これらの操作がしたくなった場合は、 `Git for Windows`を導入した上で、他のGUIツールを使ってみるとよいでしょう。
（`SourceTree`や`GitHub Desktop`など。余力があるならコマンドラインで`Git`操作できるとなおよい。）


# おまけ：サーバにバックアップを保存する

`GitHub for Unity`で保存したバックアップファイルは、**プロジェクトのあるフォルダと同じ場所に保存されます。**
そのため「パソコンが壊れて起動しなくなった！」という状況には対応できません。

そこで、「バックアップしたファイル」をオンラインサーバ（`GitHub`）に保存する方法を紹介します。

### 容量制限に注意

なお`GitHub`は無課金の場合、**1GBまで**しかサーバに保存できません。
また通信量も規制の対象になり、**一ヶ月あたりに1GBまで**しか通信できません。
（プロジェクト単位ではなくユーザ単位での制限なので大量のプロジェクトをアップロードするとすぐに達してしまう）

もし制限を超えた場合はアップロードができなくなる点に注意してください（勝手に課金されたりはしません）。
そのため大きなプロジェクトを`GitHub`にアップロードする際は注意が必要です。

ちなみに、月$5でこの容量を`50GB`まで増やすことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/c589baad-0153-b990-6c02-606e36d031a2.png)
（容量を増やす場合は、ユーザ設定の`Billing -> Git LFS Data -> Edit -> Add more data pack`）

## アップロード方法

### 1. GitHubアカウントを作る

* [GitHub](https://github.com/)

`GitHub`にアクセスし、新しいアカウントを作ります。

### 2. Unity上でサインインする

`GitHub for Unity`のウィンドウの右上にある`Sign in`を押して`GitHub`にサインインします。
![singin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/31458907-1f76-27e6-4b9b-1785d283b481.png)



### 3. リモートリポジトリを作る

`GitHub for Unity`のウィンドウの左上の、`Publish`ボタンを押します。
![publish.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/99faf174-148f-d779-a929-d8db59205a80.png)


すると新しくリモートリポジトリを作る画面が出てくるので、名前などをつけてリモートリポジトリを作ります。

`Make repository private`にチェックをいれると、自分だけがアクセスできるリモートリポジトリになります。
**第三者に見られてはまずいものや、有料のアセット等再配布禁止なものが含まれている場合は必ずチェックをいれてください。**
![SugoiGame.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/c71c4c13-5ce3-f6a6-c2a0-f27368aa10f8.png)
（チェックをつけると非公開にリポジトリになる）


リモートリポジトリができると、現在のプロジェクトの状態が自動でアップロードされます。
アップロード状況はブラウザから`GitHub`を開くことで確認できます。
![RemoteRepository.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/f6a698bb-4517-9e2f-8685-284b3eab97a7.png)



### 4. 定期的にサーバにアップロードする

リモートリポジトリの設定ができると、`GitHub for Unity`のウィンドウの左上のボタンが変わります。

![pushpullfetch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/a972d86f-bba7-4389-8520-c6a7fc7c714e.png)


* `Fetch` : サーバの状態をダウンロードする（反映はしない）
* `Pull` : サーバの状態をダウンロードして、プロジェクトに反映する
* `Push` : ローカルの状態をアップロードする

コミットが終わったら`Push`するようにするとよいでしょう。

## アップロードしたプロジェクトファイルのダウンロード方法

たとえば「別のPCで作業をしたい」等となった時はサーバにアップロードしてあるプロジェクトファイルをダウンロードしてくる必要があります。


### GitHubのダウンロードボタンは使えません


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/a57917f8-47b6-2852-a345-f3700257d45e.png)

`GitHub`にはアップロードしたファイルをZipでダウンロードするボタンがあります。
ここからZipファイルをダウンロードして解凍すれば保存したプロジェクトファイルが入手できます。
**が、ダウンロードボタンからプロジェクトファイルをダウンロードした場合、音声や画像データが読み込めない状態になります。**

これは特定の拡張子のファイルは`GitHub`の別のサーバに保存されているからです。（`Git LFS`という機能が使われている。）
アップロードに失敗しているわけではないので安心してください。正しい方法でダウンロードすればちゃんと復元できます。

## どうしたらいいの

一番簡単な方法は`GitHub Desktop`を使うことです。

* [GitHub Desktop](https://desktop.github.com/)


### 1.ダウンロードしてインストールする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/76596c77-509b-025b-1966-75105be5e491.png)
ここからダウンロードしてインストールしてください。

### 2. GitHubにサインインする

起動したら`File -> Option -> Accounts`から`GitHub`にサインインしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/de54b30f-d580-b37d-03df-0e4dc3657222.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/6f0bd34e-f23f-4f4c-c11f-fb545ef5379c.png)

### 3. アップロードしたファイルをダウンロードする

`File -> Clone repository...` を押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/2aef8ad4-651e-9155-3750-40a4002ce88c.png)

ダウンロードしたいリポジトリを選び、保存先を選んで`Clone`を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/9fa3a29d-f589-0060-006f-3e5f0b33d098.png)

`Git LFS`を初期化しますか？と聞かれたら`Initialize Git LFS`を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47146/617d2997-2408-5b85-75ce-eef9b960d23b.png)

これで正しく画像や音声データを含んだ状態でプロジェクトがダウンロードできました。


### 4. Unityで開く

あとは普通にUnityで開けばOKです。