初学者向け：GitとGitHubを使ったチーム開発ガイド ～ブランチ作成からプルリク、最終マージまで～

## はじめに
今回は、GitHubを使ったチーム開発の流れを、自分への備忘録も兼ねて体系的にまとめてみます。

:::note info
***GitコマンドやGitHubの操作は、定期的に意識して振り返らないと、忘れてしまいがちです。***
:::

この機会に、基礎的な内容を記事としてまとめ、振り返っていこうと思います。***この記事が誰かの技術の参考になれば幸いです！***

## 書こうと思ったきっかけ
現在受講しているITスクールのチーム開発（ハッカソン）に参加するにあたり、忘れかけていたGitHubでのチーム開発の知識を整理しようと考えました。

![スクリーンショット 2024-10-25 11.42.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/30b91a41-9078-0a41-45bd-a8a5200b75c1.png)
引用画像：https://www.ricksoft.jp/blog/articles/001410.html

これまで、基本的には1人で開発することが多く、その際は直接メインブランチにプッシュする方法で管理していました。

:::note warn
***しかし、チーム開発では、4～5人のチームで1つのリポジトリを共有して作業する必要があります。***
:::

***そのため、ブランチの設定や作成方法、マージのタイミングなどを改めて整理し、記事としてまとめることにしました！***

## 1. リポジトリの準備

まず、GitHubで新しいリポジトリを作成します。***詳しい作成方法については、以下の記事を参考にしてください。***

https://qiita.com/free-honda/items/874b1cd9d4a41e82c3ee

リポジトリの作成が完了すると、初期ブランチ（通常は ```main```）が自動的に作成されます。

![Screenshot 2025-01-03 at 22.48.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/be2978ec-7540-e36c-27de-c7702c1b7b50.png)

次に、チームメンバーがローカル環境でリポジトリを使用できるよう、以下のコマンドでリポジトリをクローンします。

```bash
git clone <リポジトリのURL>
cd <リポジトリ名>
```

## 2. ブランチを作成する

自分の作業内容に応じて、新しいブランチを作成します。以下のコマンドを使用してください。

```bash
git checkout -b <ブランチ名>
```

例: ```test```

作成したブランチをリモートリポジトリにプッシュします。

```bash
git push -u origin <ブランチ名>
```

リモートリポジトリに新しいブランチが保存されたことを確認できます。

![Screenshot 2025-01-03 at 23.03.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/68317775-12a5-716e-69b3-0c39b09f8b79.png)

## 3. 作業内容をコミットする

**変更内容の確認**

ファイルを編集後、現在の変更内容を確認します。

```bash
git status
```

今回は、まだファイルの追加や編集を行っていないため、以下のような出力になります。

```bash
➜  GitHub-test git:(test) git status
On branch test
Your branch is up to date with 'origin/test'.

nothing to commit, working tree clean
➜  GitHub-test git:(test) 
```

**ファイルの作成**

適当な空ファイルを作成して変更を試します。

```bash
touch test
```

**変更のステージング**

必要な変更をステージに追加します

```bash
## 特定のファイルを追加する場合
git add <ファイル名>
## すべての変更を追加する場合
git add .
```

**変更内容をコミット**

適切なメッセージを添えてコミットします。

```bash
git commit -m "プルリクエスト（Pull Request）もろもろのテスト検証"
```

正常にコミットが完了すると、以下のような出力が表示されます。

```bash
➜  GitHub-test git:(test) ✗ git commit -m "プルリクエスト（Pull Request）もろもろのテスト検証"
[test ca7da4c] プルリクエスト（Pull Request）もろもろのテスト検証
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test
➜  GitHub-test git:(test) 
```

**リモートブランチへのプッシュ**

作業内容をリモートリポジトリのブランチにプッシュします。

```bash
git push
```

プッシュが正常に完了すると、以下のような出力が表示されます。

```bash
➜  GitHub-test git:(test) git push
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 10 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 343 bytes | 343.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To github.com:free-honda/GitHub-test.git
   6c2b007..ca7da4c  test -> test
➜  GitHub-test git:(test) 
```

## 4. プルリクエスト（Pull Request）を作成する

**プルリクエストの作成**

GitHubのリポジトリページにアクセスし、「Compare & pull request」をクリックします。

![Screenshot 2025-01-03 at 23.10.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/71589359-00ac-9db5-22b2-79bbfef276e4.png)

メインブランチ（例: ```main```）に対して作成したブランチをマージするリクエストを作成します。

変更内容、目的、関連するタスクや問題を明確に説明します。

```例.txt
このPRでは以下を変更しました：
- ログイン機能の追加
- ユーザ認証APIの統合
```

説明を記入し終えたら、画面右下の「Create Pull Request」ボタンをクリックしてリクエストを作成します。

![Screenshot 2025-01-03 at 23.11.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/29ced867-3ab2-b86b-9169-bd340dca814f.png)

### レビュープロセス
作成したPRは、他のチームメンバーがコードをレビューします。***メンバーからのフィードバックを受け取り、必要に応じて修正を行います。***



![Screenshot 2025-01-03 at 23.13.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/072d8084-5b27-4e8a-04a8-3d0b4ccb7aab.png)

:::note warn
***修正が必要な場合は、該当の変更をローカルでコミットし、再度プッシュします。***
:::

## 5. ブランチをマージする

**マージの手順**

レビュー完了後、チームの同意を得たらPRを承認し、GitHub上で「Merge Pull Request」をクリックします。

![Screenshot 2025-01-03 at 23.15.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/db5eca65-58b7-a97c-884a-9a662c102f25.png)

「Confirm Merge」を実行し、これでブランチがメインブランチに統合されます。

![Screenshot 2025-01-03 at 23.16.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/cf4e18c6-28c4-6170-e8dc-7007c29643cb.png)

マージが成功すると、画面の色が変わり、メインリポジトリに統合されたことが確認できます。

![Screenshot 2025-01-03 at 23.17.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/b3487def-7abe-3f0d-2059-df577134c8d8.png)

***メインリポジトリに、テストブランチで作成したテストファイルが表示されていることを確認してください。***

### 最新のメインブランチをローカルに反映

以下のコマンドを実行して、最新のメインブランチをローカルに反映します。

```bash
git checkout main
git pull origin main
```

**コマンド実行後の出力例**

```bash
➜  GitHub-test git:(test) git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
➜  GitHub-test git:(main) git pull origin main
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Unpacking objects: 100% (1/1), 971 bytes | 323.00 KiB/s, done.
From github.com:free-honda/GitHub-test
 * branch            main       -> FETCH_HEAD
   6c2b007..3bc7ef7  main       -> origin/main
Updating 6c2b007..3bc7ef7
Fast-forward
 test | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test
➜  GitHub-test git:(main) 
```

**不要なブランチを削除**

マージ後、作業が完了した不要なブランチは削除してリポジトリを整理します。

```bash
git branch -d <ブランチ名> # ローカル
git push origin --delete <ブランチ名> # リモート
```

**コマンド実行後の出力例**

```bash
➜  GitHub-test git:(main) git branch -d test 
Deleted branch test (was ca7da4c).
➜  GitHub-test git:(main) git push origin --delete test
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
To github.com:free-honda/GitHub-test.git
 - [deleted]         test
➜  GitHub-test git:(main) 
```

**リポジトリの確認**

削除したブランチがリポジトリからも消えていることを確認します。

![Screenshot 2025-01-03 at 23.23.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/c946e5e6-6f96-e751-f404-b8007be592b3.png)

:::note warn
**不要なブランチを適切に削除することで、リポジトリの管理が簡潔になり、チーム開発における効率性が向上します。**
:::

## まとめ

今回、GitHubを使ったチーム開発の流れを整理してみたことで、ブランチ運用やプルリクエストの仕組みがいかに効率的であるかを再確認できました。

:::note info
**※特に、以下のポイントが重要だと感じました。**
- **レビュー文化を定着させることで、品質向上とチームの協力体制が強化される。**
- **ブランチ命名規則などのルールをあらかじめ明確にしておくことで、後々のトラブルを未然に防ぐ。**
:::

これらを実践することで、チーム開発がより円滑に進むと改めて実感しました。***引き続き、学んだ内容を活かしながら、チーム開発の効率化に努めていきたいと思います。***

## 参考記事

https://dev.classmethod.jp/articles/protect-branch/

https://qiita.com/EasyCoder/items/395361d90a70e37297df

https://qiita.com/moriokatakashir/items/18b5dffe235b035e2b36