【MC1.12Modding】環境構築編 - バージョン管理（Gitローカルリポジトリ編）


# 環境構築編リンク
- [ツールの準備](https://qiita.com/Katatsumuri_Pan/items/b6b76096adc9243a49cb)
- [とりあえず動かす（開発環境編）](https://qiita.com/Katatsumuri_Pan/items/10ef2c7ba4e95f01cdfa)
- [とりあえず動かす（ランチャー編）](https://qiita.com/Katatsumuri_Pan/items/706db6223bbf74807797)
- [バージョン管理（Gitローカルリポジトリ編）](https://qiita.com/Katatsumuri_Pan/items/bf544822d79e92fdf009) ← here
- [あった方が良い（が今すぐとは限らない）道具等](https://qiita.com/Katatsumuri_Pan/items/195fa7d94264440ba1b5)
- [メインページへ戻る](https://qiita.com/Katatsumuri_Pan/items/e3fd7fec471ee66fa17a)

# バージョン管理とは

:::note info

バージョン管理とは、要は「便利なセーブデータ管理ツール」です。

:::

# 駄文

[飛ばす](#本記事の内容)

　ボス戦の前や重要イベントの前で分けてセーブしておきたいという気持ちは誰にでもあります。プログラミングではいつ重大イベント（バグる・動かなくなる）が発生するかは分からないので、できればいつでもたくさんセーブデータを作成したいです。
　ですが、データを分けて保存し、ちゃんと管理するというのは結構面倒なため、
- `セーブデータ.xlsx`
- `セーブデータ - コピー.xlsx`
- `セーブデータ - コピー (1).xlsx`
- `セーブデータ - コピー (2).xlsx`
- `セーブデータ - コピー (1) - コピー.xlsx`
- `セーブデータ - コピー（最新版）.xlsx`
- `セーブデータ - コピー（改定版2）.xlsx`
- `セーブデータ - コピー（最新版） - コピー.xlsx`

こうなってしまっては目も当てられません。また、プログラマになら通じる例えになりますが、古いコードをいつまでもコメントアウトして残し続けるせいでソースコードが見づらかったりコメントと区別がつきづらかったり…
　これをツールの力で解決するのが「バージョン管理」です。どれが最新のデータか分かるのはもちろん、時系列や各データの差分を簡単に取得できる機能などがあります。さらに、各セーブデータに対して、「何が変わったのか」や「今ここが○○の状態」のような短いコメントを残せます。
 　そんなかなり強い便利ツールなのですが、いかんせん使うのに心理的・技術的なハードルが高く、使えずに不便な状態で生活しているプログラマが多数生息しているのが現状です。ビックリするほど快適で、二度と手放せなくなるほどの力を持っているのでぜひ本記事で慣れてみましょう。

:::note info

要するに、ファイルの更新履歴をちゃんと管理しようということです。

:::

# 本記事の内容

一言で表すなら、「Gitのローカルリポジトリを作ってコミットする」です。
実を言うと、本記事の内容はModdingに必須ではありません。
ですがシンプルに超便利なので少しだけでも使えるようになることをお勧めします。

今回Gitというバージョン管理ツールを使いますが、そのせいでたくさんのGit用語が出てきます。
詳細な解説や用語説明は他に譲りますが、超最低限の用語解説を以下に置いておきます。


:::note info

- 「コミット」　＝　セーブデータ　← 重要
- 「コミットする」　＝　セーブする　← 重要
- 「コミットメッセージ」　＝　セーブデータに付け**た**メモ書き　← ちゃんと書こう
- 「ロールバック（する）」　＝　セーブデータの時点からやり直す　← できないと不便
- 「リポジトリ」　← 正直覚えなくていい（全セーブデータの保管場所）

:::


## 目次

- [1. Gitリポジトリの作成](#1-gitリポジトリの作成)
- [2. 初期状態をコミット](#2-初期状態をコミット)
- [3. やらかす](#3-やらかす)
- [4. ロールバック](#4-ロールバック)
- [5. うまくいったらコミット](#5-うまくいったらコミット)

実は1.と2.でGitの環境構築自体は終了ですが、それ以降で実際に触ってみて便利さを体感してみましょう。

## 1. Gitリポジトリの作成

よく分からずにただ従うだけで問題ありません。
（感覚的には「Gitを有効にする」という感じです。）

メニューバーの`バージョン管理`>`Git リポジトリの作成`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/8d741639-18d4-ab87-7fb5-1b905b5245a1.png)

普通はプロジェクトのあるフォルダが既に選択されているのでそのままOKを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/5921553d-4441-6127-8acb-5776683620ff.png)

大抵の人（Git for Windows等がインストールされてない人）はこの後エラーになりますので、以下の折り畳みを参照してください。

<details><summary>エラーが出て失敗した</summary>

Git for Windowsをインストールします。
といっても、Intellij IDEAが全部代行してくれるので1クリックで十分です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/b3efdaee-14de-2d7d-565b-a73e500d167d.png)

ダウンロード進行中…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/8f022b08-5be5-5c82-0fef-95be8ea73197.png)


インストール完了のメッセージが出たらOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/c94a0a7b-b95c-5e42-003d-eeae5009396f.png)

1.の最初から再びトライしてください。

</details>


Gitリポジトリの作成が完了すると、プロジェクトビューのファイルやフォルダの名前に色が付きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/2aa59868-7eb5-c772-d4e6-6a5ae26253f8.png)

## 2. 初期状態をコミット

Gitが使えるようになったので初期状態をまずセーブデータに保存しちゃいましょう。

Gitビューを開きます。
左のサイドバーの一番下、枝分かれアイコンのボタンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/19ce12f1-6ca0-7954-a03d-a6950c55012f.png)

これがGitビューです。
何も無いなあ程度の感想でOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/729af87d-07ac-0fc2-7206-3ac03c9e33a6.png)

続いてコミットビューを開きます。
左のサイドバーの上から2番目、玉に横一本棒が貫いているアイコンのボタンです。
ちなみに、一番上のフォルダアイコンは今表示しているプロジェクトビューになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/debb12f0-eddb-c000-f3ca-558ce8c8b537.png)

コミットビューを開いたら、上部の`変更`内の`バージョン管理外ファイル`にチェックを付け、下部にお好みのコミットメッセージを書きましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/d34a0c40-e57e-2541-1957-f7a7c467409a.png)
私は「最初のコミット」と書いてみました。

コミットメッセージが書けたらコミット！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/20716f20-e274-eb4d-e8f2-b9d1147a3260.png)

初回コミット時のみ名前とメールアドレスの入力が必要です。
空欄にすると怒られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/67858a58-1366-f135-41f4-c30a18fd33cf.png)

コミット完了！
下のGitビューを見ると、今作成したコミットが追加されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/8e10f48b-e54a-c571-832a-fdf6515e4889.png)
何やら右下に警告が出ていますが、これはどうしようもないので無視です。
~~エラーじゃないのでセーフ~~

## 3. やらかす

ここまででGitを使う準備ができました。
ここからは実際にGitの力を体感してみましょう。

まずはプロジェクトビューに戻ります。
左のサイドバーの一番上、フォルダのアイコンです。

starter直下に`gradle.properties`という大事なファイルがあります。
ダブルクリックで開いてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/d02a9fe2-1e14-a733-c477-ca0b78728c6b.png)
中身を見てみると分かるわかる通り、Mod名やパッケージ名、マイクラやForgeのバージョン等大事な設定を記したファイルです。
Modを作成する際に必須の超重要ファイルです。

**ではこれを削除してみましょう。**

プロジェクトビューで`gradle.properties`をクリックし、Deleteキーを押します。
（`gradle.properties`を右クリックして削除を選んでも可）

当然確認ダイアログが出ます。
`安全な削除`のチェックは外しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/d19ddd1a-08ac-dabd-6566-ab4f98df20b0.png)

<details><summary>チェック外し忘れたら…</summary>

一手間増えて面倒です。
焦らず削除ボタンを押しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/43c5c179-de45-3d0e-ffd6-aef20f958996.png)

</details>

ここにあった`gradle.properties`が消えてしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/bfd2d618-d0d5-b7a7-d99c-41e9e3974b64.png)
この状態ではもうModの起動も作成もできません。
完全にやらかしました。

マイクラの起動をしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/1ba01edb-99f0-088c-6bbe-4cb83af84b93.png)

起動に失敗しています。
最重要の設定ファイルが失われているので当然です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/dc26c933-4873-ffa8-9280-ea37389c2dc9.png)

## 4. ロールバック

こんな状態になってしまっても、Gitなら安心です。

コミットビューを開いてみましょう。
すると、削除前はなかった変更が増えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/a4feee64-cfc5-0af5-009e-efd4c267beb5.png)
どうやら`gradle.properties`を削除したことが記録に残っているようです。

ではファイルの削除を無かったことにしましょう。
コミットビュー上部のボタンの左から2つ目、左からきてUターンするような矢印のボタンをクリックして「ロールバック」をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/3cc98b2b-8d55-9a4b-357c-df6f359d2e41.png)

ロールバックのダイアログが出ました。
戻したいファイルに既にチェックが付いていると思うので、そのまま`ロールバック`を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/19c7c344-c03a-5664-4059-8e8867e316d3.png)

プロジェクトビューに戻りますと、`gradle.properties`が復活しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/9b7dd3fd-f4cd-1a69-1375-f9fb32421a63.png)

マイクラを実行起動してみると…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/e2fa7085-b0b6-88d0-6351-5493f4c6db93.png)

この状態でちゃんと起動できるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/c43e9130-3ae6-3508-a735-90021948d382.png)


## 5. うまくいったらコミット

初期状態に戻る方法はわかりました。ですがこのままではセーブの意味がありません。最初からやり直せるよってだけじゃセーブの役割を果たしていませんね。
当然、強くなった状態でもセーブできる必要があります。

まずは`gradle.properties`をダブルクリック等で開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/60e709cf-86e0-68f7-f25b-71a6bfb7becf.png)
中身の1行目にMod名を指定する部分があります。
これを書き換えてみましょう。
書き換え時の細かい注意点などは初心者編で説明します。
~~バグっても自分で何とかする！というチャレンジャー以外は~~下の行をそのままコピーして貼り付けてください。

```
modName = My First Modding!!;
```

:::note warn

Mod名に全角文字や記号は使わないでください。
ここぞというときにバグります。

:::

:::note alert

`modName = `という部分は一字一句そろえてください。
少しでも違うとエラーになります。

:::

以下の画像のようにすればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/de091134-234d-0f2c-4606-3dce18f06e5c.png)


ファイ路の中身を書き換えると、何やら像のマークが出てきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/a3a39146-d9e3-7ade-a6ee-c2b9e19b4535.png)
実はこの`gradle.properties`を書き換えた際は、Gradleの再読み込みを行う必要があります。
IDEAは気を遣って「一発で再読み込みしてくれるボタン」を表示してくれているのでクリックしましょう。

<details><summary>×押しちゃって消えちゃった…</summary>

Gradleビューを開き、The 再読み込み！って感じのボタンを押しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/bcacb33a-d951-1b7c-edd5-1ec961176177.png)

</details>

ちょっと右下に実行中の処理が出たかと思うとすぐ終了します。
終了後、特に見栄えは変わりませんが心配は不要です。


このままマイクラを起動してMod名が変わったところを見たいのですが、IDEAが古いファイルをキャッシュしているせいで今のままではうまくいきません。

:::note info

キャッシュのせいで変更が反映されない問題は、ModdingにかかわらずPC上で割と遭遇します。~~そういうもんです。~~
素直にキャッシュをクリアする方法を調べましょう。

:::

今回はキャッシュフォルダを削除することで対処します。
`build`の中の`resources`の中の`main`フォルダを丸ごと消し飛ばしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/7ab2a209-1623-4943-534e-8f468190824f.png)
（実は`build`フォルダ全体ごと削除しても問題ないが、再生成にすごく時間がかかるので非推奨。）

こんな忠告が出ますが問題ありません。
どうせ自動で再生成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/9b12a738-decc-a0d8-0fdb-7ceb27f584a2.png)

キャッシュを削除したので、マイクラを実行起動し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/e2fa7085-b0b6-88d0-6351-5493f4c6db93.png)

Mods画面を開き、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/f02e9d03-e8a8-a360-6201-18062429db52.png)

スクロールしていくとMod名がちゃんと変更されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/fbfe6f39-8fca-24d6-c704-0a737261de45.png)


これで油断してはいけません。まだセーブしていないのですから。

「コミット」をします。

<details><summary>コラム：ファイルの保存とコミットの違いって？</summary>

いわゆる`Ctrl+S`のショートカットでおなじみの「ファイルの保存」は上書き保存ですが、「コミット」は別名保存です。
そのため、コミットをすればするほどバックアップが増えていくような状態になります。
コミットは実質バックアップなので簡単に昔の状態を復元できるという理屈です。

コラム終わり
</details>

最初にGitビューを出しておくことをお勧めします。
左のサイドバーの一番下です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/81b11984-5ce9-3dac-b01d-08942946c7eb.png)

続いてコミットビューを表示します。
左のサイドバーの上から2番目です。
変更を加えたファイル名が青い色で表示されています。
（実はプロジェクトビューでも`gradle.properties`のファイル名が青色になっていたことに気づきましたか？）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/3769e4c7-3d71-9276-86a2-671158640a42.png)

`gradle.properties`をダブルクリックしてみると、どこが編集されたかが一目瞭然な比較ビューが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/974c3d5c-76f5-f8bf-b575-a8d0dd5e3183.png)
片方をスクロールするともう片方も連動する親切設計です。

変更内容バッチリだな！と感じたら、コミットするファイル(=`gradle.properties`)にチェックを入れ、コミットメッセージを書きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/c97320ad-b1c4-bff3-42fc-af32545e924d.png)

最後にコミットボタンを押してセーブ完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/63757d3f-5ba8-e9ce-ce58-3675382d2728.png)

Gitビューを見ると、今しがた行ったコミットが記録されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/2aaf0594-3aad-7bb3-c740-8abee0f7b1b4.png)
見た目の雰囲気でも見て取れますが、最初のコミットは上書きされて失われたりはせず、積み重なるように両方のコミットが記録されていることがわかります。

実は、Gitビューからコミットをクリックするだけでどのファイルを更新したかわかり、変更内容も遡れたり、さらに一瞬で任意のセーブ時点に巻き戻れる優れモノなのですが、これ以上の説明はまた今度です…

# おわりに

一通りGitを実際に体験していただきました。
Gitは必須ではありません。ですが、Gitさえあればいくらでもセーブポイントを作成しておけるので、プログラミングをやる上では、使えるかどうかでヤラカシ時のリカバリ能力に大きな差が出ます。
まあ、便利なので使ってやってください。


---

[環境構築編 - あった方が良い（が今すぐとは限らない）道具等に続く](https://qiita.com/Katatsumuri_Pan/items/195fa7d94264440ba1b5)

[メインページへ戻る](https://qiita.com/Katatsumuri_Pan/items/e3fd7fec471ee66fa17a)