【情報整理⑦】ゲーム形式で実践的にGitの学習・復習が可能な「githug」を利用して脳内整理。

- Netflixによって世界中から人気を博している「こんまり」さんに、多大な影響を受けて情報整理をしていく記事第七弾。
- 「本質・無駄を新人時代は考えない」という、どこかのコラムで見たことを盾にして、あらゆるものに手を出す生活。
- 今回は、**Git**をゲームスタイルで実践的に学習・復習できる「Githug」を試用していくことにしよう。

## 概要
- Ruby製の、ゲーム形式でGitの実践的な習得が可能な学習ツール。
- コミットやプッシュ等の操作を、実際のローカルのフォルダを用いて行っていくことで、ステップを進めていくことができる。
- [公式Github](https://github.com/Gazler/githug)

## 特徴

### Ruby製
- GithugはRubyを用いて作られており、Ruby環境が整っていれば、簡単に始めることができる。

### ゲーム形式
- 習得において、学習方法に悩みがちがGitを、**レベル**というステップに基づいて、クリアしながら進めていくゲーム形式のため、楽しみながら学習することができる。

### 実践的
- 自分の環境の任意のフォルダを利用して操作を進めていくため、Gitファイルの作成場所や管理の流れの理解が可能。
- また、GUIではなく実際にコマンド操作で進めていくため、より深い理解が可能。

### 膨大なステップ
- コミットやプッシュ等の基本操作だけではなく、**stash(回避)**や**cherry-pick(コミットIDでの反映)**等といった、Gitのほぼすべての操作のステップがある。

## 結果

- 各レベルによって、gitコマンドを実践的にうっていくことで、進めていく。

<img width="648" alt="test.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/00baf2c6-d208-2d02-dda5-e8df620a88a1.png">

- レベルによって、必要ファイルの作成・削除が自動で行われるため、学習の際には、gitコマンドをうつことに専念できる。

<img width="621" alt="shha.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/870a02ce-85b1-843a-76a3-a8fcd923e6d0.png">

- 学習レベルが膨大なため、gitの深いところまで理解することができる。

<img width="523" alt="hshiah.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/6c07fddb-3c6c-163c-5b82-5b8ee8fdd124.png">

## 環境
- Mac OS X 10.13.4
- ruby 2.3.3

## インストール
- ターミナル(コマンドプロンプト)を開き、下記のコマンドをうち、Githugをインストールする。
    - **※Ruby環境が整っていない場合、導入してから行う。**
    - **※最近のMacにはRuby環境が標準で用意されている。**

```bash
# Rubyバージョン確認
$ ruby -v

# インストール失敗の場合、「sudo gem install githug」で管理者権限でインストール
$ gem install githug

# githugコマンド確認
$ githug --help
```

## 操作の流れ

### 初期設定
- ステップを始めるにあたって、最初の作業として下記を行う。
    - 作業フォルダの作成
    - `git_hug`フォルダの作成

- 具体的な作業コマンドは下記。

```bash
# 作業フォルダの作成と移動
$ mkdir ~/git_practice
$ cd ~/git_practice

# git_hugフォルダの作成
githug

# git_hugフォルダへの移動
cd git_hug
```

### 基本操作
- 初期作業の完了後、基本的な学習の流れは下記。
    - `git_hugフォルダへ移動しておく。`
    - 現在のレベル確認。
    - 演習問題に沿って、任意のgitコマンドを入力。
    - 正解判定
    - 次のレベルへ進む。

- 具体的な作業例は下記。
    - **githugでは、レベル毎に必要なファイルやフォルダの作成や削除を自動で行うため、基本的にはgitコマンドを打つだけで良い。**

```bash
# git_hugフォルダへ移動
$ cd ~/git_practice/git_hug

# 現在のレベルの確認
$ githug

# 例: LEVEL9
# Name: status, Level: 9, Difficulty: *
# 内容 :  one of the files is untracked, which file is it?

# レベルの問題の回答
$ git status

On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   Guardfile
	new file:   README
	new file:   config.rb
	new file:   deploy.rb
	new file:   setup.rb
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	database.yml
 
# 正解確認(Congratulationsと出れば成功)
$ githug

What is the full file name of the untracked file? database.yml
Congratulations, you have solved the level!

Name: number_of_files_committed
Level: 10
Difficulty: *
```

### ヒント確認
- レベル問題がわからない場合、下記のコマンドをうち、ヒントを確認できる。

```bash
# ヒントの確認
$ githug hint

********************************************************************************
*                                    Githug                                    *
********************************************************************************
You are looking for a command to identify the status of the repository.
```

## 利用コマンド一覧
- githugでの利用コマンドとして、主に下記がある。

|内容|コマンド|
|:---:|:---:|
|タスク確認・正解確認|`githug`|
|githugコマンド確認|`githug help`|
|全レベル確認|`githug levels`|
|現在のレベルのリセット|`githug reset`|
|指定のレベルのリセット|`githug reset レベル番号`<br>`githug reset 4`|
|レベルのテスト|`githug test レベルファイルパス`|
|レベルのテスト(エラー情報付き)|`githug test --errors レベルファイルパス`|

## まとめ
- 今回は、ゲーム感覚での学習・復習ということで、学習形態の娯楽化が盛んな時代に心底感謝しながら、記事を書く。
- 「調べることを前提とした実践形式」のため、調査狂の私にとって、至福の時間。
- 再度Gitの整理もできたので、次回の整理ツールの捜索や脳内埋もれ技術の引き上げをすることにしよう。

## 参考
- https://www.tobscore.com/githug-what-is-it/  
→こちらのサイトを参考にいたしました。大変お世話になりました。

- https://wonderwall.hatenablog.com/entry/2017/09/07/073000  
→こちらのサイトを参考にいたしました。大変お世話になりました。

- https://www.tobscore.com/githug-what-is-it/  
→公式Githubです。大変お世話になりました。