Windows＋WSL2でGitを使う最低限の設定

## 1.はじめに
WindowsユーザーがWSL2の環境でGitを使ったシステム開発に挑戦しようとしたとき、最初に気になるのは **「Gitって何？」「何から設定すればいいの？」** という疑問かもしれません。この記事は、まさにそんなあなたのために書きました！

ここでは、開発をスムーズに進める上で最低限知っておくべきGitの初期設定を、Windows+WSL2の環境に合わせて分かりやすく解説します。さらに、日々の開発で必ず使う基本的なGitコマンドも丁寧にまとめているので、Gitを初めて学ぶ方でも安心して読み進められます。

この記事を読めば、あなたもGitを使ったシステム開発の第一歩を迷うことなく踏み出せるはずです。

## 2.Gitのインストール
ここでは、WSL2環境にGitをインストールする手順を解説します。

まず、WSL2のターミナルを開いて、以下のコマンドを順番に実行します。
```bash
sudo apt update
sudo apt install git -y
```
インストールが完了したら、以下のコマンドを実行してGitが正しくインストールされたか確認しましょう。

```bash
git --version
```

このコマンドを実行すると、インストールされたGitのバージョン情報が表示されます。例えば、以下のような出力が得られれば、インストールは成功です。

```
git version 2.43.0
```

## 3.SSH鍵の作成
GitHubのリモートリポジトリに安全に接続するためには、SSH鍵の作成と登録が必須となります。GitHubではセキュリティ強化のため、パスワードによるGit操作は非推奨となり、現在では利用できなくなっています。代わりに、このSSH鍵を使うことで、より安全かつスムーズにGit操作が行えるようになります。

まずは、あなたのローカル環境（WSL2内）にSSH鍵を作成します。以下のコマンドを順番に実行してください。

```bash
ssh-keygen -t ed25519 -C "あなたのメールアドレス"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
```

コマンドを実行すると、鍵の保存場所とパスフレーズ（任意）の設定について質問されますが、どちらもEnterキーを押すことでデフォルトのまま進めて問題ありません。

作成したSSH鍵のうち、公開鍵 (~/.ssh/id_ed25519.pub) をGitHubに登録する必要があります。公開鍵は安全に共有できる鍵です。

まず、公開鍵の内容を表示するために、以下のコマンドを実行します。

```bash
cat ~/.ssh/id_ed25519.pub
```

このコマンドを実行すると、ssh-ed25519 から始まる長い文字列が表示されます。この文字列全体をコピーしてGitHubの「Settings > SSH and GPG keys」へアクセスし、新しいSSHキーとして貼り付け登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613298/21fdf536-3d61-4d36-95b4-ef9f87fb0093.png)

HTTPS形式でリモートリポジトリのURLを設定している場合は、SSH形式に変更することで、SSH鍵を使った認証が利用できるようになります。

以下のコマンドを実行し、<ユーザ名> と <リポジトリ名> をあなたのGitHubのユーザ名とリポジトリ名に置き換えてください。
```
git remote set-url origin git@github.com:<ユーザ名>/<リポジトリ名>.git
```

## 4.最低限の設定
Gitを使い始めるにあたって、最初に設定しておくと便利な項目があります。これらの設定は、コミットログに記録されるあなたの情報や、Gitの動作方法に影響を与えます。以下のコマンドをWSL2のターミナルで実行してください。

```bash
git config --global user.name "あなたの名前"
git config --global user.email "あなたのメールアドレス"
git config --global core.editor "vim"  # 好みのエディタに変更可
git config --global pull.rebase false  # git pull時のマージ方法（お好みで）
```

下記のコマンドで現在の設定を確認できます。
```bash
git config --list
```

以上でGitのセットアップが完了しました。
ここから先はよく使うGitコマンドの紹介です。


## 5.よく使うGitコマンド
### git clone
説明: リモートリポジトリをローカルにコピーします。
補足: <repository_url> には、GitHub、GitLab、BitbucketなどのリポジトリのURLを指定します。
```
git clone <repository_url>
```

### git checkout
説明: ブランチの切り替えや、ファイルの変更を元に戻す際に使用します。
注意点: 作業中の変更がある場合、git checkout でブランチを切り替える前にコミットするか、git stash で一時的に保存する必要があります。

```bash
git checkout <branch-name> # 指定したブランチに切り替えます
git checkout <commit-id> # 特定のコミット時点の状態に戻します（detached HEAD状態）
git checkout <file-name> # 指定したファイルの変更を直前のコミットの状態に戻します
git checkout . # 全てのファイルの変更を直前のコミットの状態に戻します
git checkout -b <new-branch-name> # 新しいブランチを作成し、そのブランチに切り替えます
```

### git branch
説明: ブランチの作成、一覧表示、削除、名前変更を行います。
```bash
git branch # ローカルブランチの一覧を表示します。現在のブランチには * マークがつきます
git branch -d <branch-name> # ローカルブランチを削除します（マージ済みのブランチのみ）
git branch -D <branch-name> # ローカルブランチを強制的に削除します（未マージの変更がある場合など）
git branch -m <old-branch-name> <new-branch-name> # ローカルブランチの名前を変更します
```

### git push
説明: ローカルでの変更をリモートリポジトリに反映させます。
```bash
git push
git push --set-upstream origin <branch-name> # ローカルブランチとリモートブランチを紐付けます。次回以降は `git push` だけでプッシュできます
git push -u origin <branch-name> # `--set-upstream` の短縮形です
```

### git pull
説明: リモートリポジトリの変更をローカルに取り込み、現在の作業ブランチに反映させます。
補足: git pull は git fetch と git merge を同時に行うコマンドです。
```bash
git pull # 現在のブランチに対応するリモートブランチの変更を取り込み、マージします
```

### git diff
説明: ファイルの変更内容を確認するために使用します。
```bash
git diff # 作業ディレクトリとステージングエリアの差分を表示します
git diff <branch-name> # 指定したブランチとの差分を表示します
git diff <commit-id1> <commit-id2> # 2つのコミット間の差分を表示します
```

### git merge
説明: 異なるブランチで行われた作業を一つに統合します。
補足: マージ時にコンフリクト（競合）が発生した場合は、手動で解消する必要があります。
```bash
git merge <branch-name> # 指定したブランチの変更を現在のブランチに取り込みます
git merge --no-ff <branch-name> # マージコミットを作成してマージします（non-fast-forward）履歴を分かりやすく残したい場合に推奨されます
```

### git stash
説明: 作業中の変更を一時的に保存し、ワークツリーをクリーンな状態に戻します。急なブランチの切り替えや、一時的に作業を中断したい場合に便利です。
補足: 退避させた変更は、後で git stash apply や git stash pop を使って復元できます。
```bash
git stash # 作業中の変更を一時的に退避させます
git stash save "<message>" # 退避させる変更にコメントを追加します
git stash list # 退避させた変更の一覧を表示します
git stash apply # 最新の退避させた変更を復元します（退避させた内容はstashリストに残ります）
git stash apply stash@{<n>} # 特定の退避させた変更を復元します
git stash pop # 最新の退避させた変更を復元し、stashリストから削除します
git stash drop # 最新の退避させた変更をstashリストから削除します
git stash clear # 全ての退避させた変更をstashリストから削除します
```

git addやgit commitを載せていないのは、TortoiseGitなどのGUIツールをよく利用するため、割愛しています。理由としては修正ファイルやその差分の確認、コミットコメントの入力のし易さなどがGUIツールの方が使い勝手がいいと感じているからです。また、VSCodeなどのエディタの拡張機能を活用するのもいいですね。