UnityでGitのリビジョンを表示したい！

## 0.前提 
本記事は[hcscode Advent Calendar 2021](https://qiita.com/advent-calendar/2021/opencv) の11日目の記事です。

この記事ではGit管理しているUnityプロジェクトで現在のリビジョン等を表示する方法について書いていきたいと思います。
※Gitに関しての説明は省きますので、分からない方は別途調べてください。

## 1.この記事を読んで出来るようになること
___Unity内で、現在のリビジョンを確認できる！___
![GitTest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666040/3cc6c36a-3c95-2c24-49a6-b5bb11a54f88.png)
こんな感じで表示したりできるようになります。

## 2.やり方
### 1.環境構築
- まずはGitを入れます。（Gitコマンドを使用するため）
    - [ここから最新版をダウンロードします](http://git-scm.com/)。
    - ダウンロードしたexeを実行し、インストールを行います。（保存先のパスをこの後で使いますので、覚えておいてください）
        - 下記の設定は「Use Windows' default console window」を選択してください。
![Git Setup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666040/a7caf2a1-294f-c975-31c2-33ee6e3adae3.png)

- PATHを通します。
    - 「path」と検索して、「システム環境変数の編集」を開き画像の手順を行います。
![path.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666040/922f33b8-ed6b-93ed-260c-065e9f58ebbe.png)
![システムのプロパティ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666040/d172e952-3918-6387-5e16-d2af4767a248.png)
![システムのプロパティ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666040/2328b0b3-d047-d114-1070-176918dc20ea.png)
![システムのプロパティ3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666040/ea00567d-2850-be7f-9beb-d79b32e2a2e3.png)
    -  先ほどインストールしたGitフォルダ内のbinフォルダを選択してください。
![システムのプロパティ4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666040/cdc352f8-6388-a89f-2893-83a2403cb089.png)


- プロジェクトの作成、リポジトリの作成等をおこなってください。

### 2.スクリプト作成
####1.作成したスクリプト

```C#
using System.Diagnostics;

/// <summary>
/// Git情報を取得するクラス
/// </summary>
public class GitInfoGetter
{
    /// <summary>
    /// プロセス
    /// </summary>
    private Process _process;

    /// <summary>
    /// コンストラクタ
    /// </summary>
    public GitInfoGetter()
    {
        _process = new Process();

        //起動するアプリケーションを指定する
        _process.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
        
        //シェルを使用するか
        _process.StartInfo.UseShellExecute = false;

        //出力をStandardOutPutに書き込むか
        _process.StartInfo.RedirectStandardOutput = true;
    }

    /// <summary>
    /// デストラクタ
    /// </summary>
    ~GitInfoGetter()
    {
        _process = null;
    }

    /// <summary>
    /// リビジョンを取得
    /// </summary>
    /// <returns>リビジョン</returns>
    public int GetRevision()
    {
        //実行するコマンドを設定
        _process.StartInfo.Arguments = "/k git log --date=iso --pretty=format:\"% h\" | find /c \" \"";

        //実行
        _process.Start();

        //結果を取得
        string result = _process.StandardOutput.ReadLine();

        //終了
        _process.Close();

        //文字列を数値に変換
        if (!int.TryParse(result, out int revision))
        {
            UnityEngine.Debug.LogErrorFormat("Error : GetRevision, result ={0}", result);
            revision = -1;
        }

        return revision;
    }

    /// <summary>
    /// 現在のコミットIDを取得
    /// </summary>
    /// <returns>コミットID</returns>
    public string GetCurrentCommitID()
    {
        //実行するコマンドを設定
        _process.StartInfo.Arguments = "/k git rev-parse --short HEAD";

        //実行
        _process.Start();

        //結果を取得
        string result = _process.StandardOutput.ReadLine();

        //終了
        _process.Close();

        return result;
    }
}
```
後は必要に応じて、処理を呼んで結果を受け取ってください。

####2.説明

```C#
//起動するアプリケーションを指定する
_process.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
```
ここで、コマンドプロンプトを起動することを設定しています。
***
```C#
//実行するコマンドを設定
_process.StartInfo.Arguments = "/k git log --date=iso --pretty=format:\"% h\" | find /c \" \"";
```
このコマンドは、「`git log --date=iso --pretty=format:\"% h\"`」で下記のような出力が行われます。

```
 7e70e6a      ///最新のコミットID（短縮版）※このコメントは出力には含まれません。
 87ad678
 e4883fd
 33fa433
 6868ba7
 5bcfb3b　    ///最初のコミットID（短縮版）※
```
そして、「`| find /c \" \""`」でこの出力から、行数を数えて出力しています。（正確には、空白が含まれている行数）
こうやって現在のリビジョン数を取得しています。
***
```C#
//実行するコマンドを設定
_process.StartInfo.Arguments = "/k git rev-parse --short HEAD";
```
このコマンドでは最新のコミットID(短縮版)を出力しています。
上でいう「`7e70e6a`」が出力されます。

## 3.最後に
いかがでしたでしょうか。
コマンドを実行することで、色々なこともできるので、是非試してみて下さい。