複数のGithubアカウントでプロジェクトを制作する

## 今回紹介する内容:point_up_tone1:

**複数のGitHubアカウント**、または**異なるデバイス**を使って、1つの同じプロジェクトを編集・管理する方法について解説します。

---
## :small_red_triangle_down: 自分の状況
現在、職業訓練校でプログラミングを学習中です。学習のアウトプットとして制作物を作成する時期に入りました。

そこで、以下のような状況にあります：

- **学校と自宅のパソコンが別**。
- **GitHubアカウントも異なる**（学校用と個人用で分けている）。
- **チーム開発の経験がない**ため、Pull Request（プルリクエスト）やマージの作業フローに慣れていない。

###  問題点
自宅用アカウントで作成したリポジトリを学校でもクローンすることはできても、学校で編集した変更をPushできない。

---

## :small_red_triangle_down: 解決方法
今回は、以下の方法を採用しました：
1. **自宅アカウント（MAIN）にリポジトリを作成**。
2. **学校アカウント（SUB）をコラボレーターとして追加**。
3. **Pull Request（プルリクエスト）を使って変更を反映**。

この方法は、複数のアカウントや環境を使う場合でも作業を整理しやすく、トラブルを最小限に抑えられるメリットがあります。

---

## :small_red_triangle_down: 実際の流れ

MAIN（自宅アカウント）とSUB（学校アカウント）を使った具体的な手順を説明します。  
また、**MAINは自宅で作業するアカウント、SUBは学校で作業するアカウント**として設定します。

さらに、学校で作業を行う場合、**作業内容は常に[school-branch]ブランチ**で管理します。
※今回は作業などによってブランチを新たに作成することはせずschool-branch に限定されるため、どのブランチで作業をしているか迷うことがありません。

---

### :small_orange_diamond: **1. 環境の設定**

#### 1-1. MAINアカウントでリポジトリを作成
1. GitHubでMAINアカウントにログイン。
2. 新しいリポジトリを作成。
   - 必要に応じてリポジトリを **Private** または **Public** に設定。

---

#### 1-2. SUBアカウントをコラボレーターとして追加
1. MAINアカウントで、該当リポジトリの **Settings > Collaborators** に進む。
2. SUBアカウントのメールアドレスまたはGitHubユーザー名を入力し、招待。
3. 学校のSUBアカウントで招待を承認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929278/2a2861f6-a98c-4768-a56c-61909c87650f.png)


---

### :small_orange_diamond:**2. 学校での作業**

#### 2-1. リポジトリをClone
学校のパソコンでGit Bashを開き、以下を実行：
```bash
git clone https://github.com/username/repo.git
```

- username/repo は、MAINアカウントで作成したリポジトリのURLです。
- Cloneする前に、cd コマンドで作業フォルダに移動しておきましょう。

#### 2-2. 編集後、ブランチを作成してPush
学校で編集した内容を、別のブランチにPushします：
```bash
git checkout -b school-branch
git add .
git commit -m "学校での作業内容"
git push origin school-branch
```
※ブランチ名は自由につけてください
※コミットコメントも、作業内容などによってわかりやすい内容を記述してください


---

### **2-3. GitHub上でPull Requestを作成**
1. SUBアカウントでGitHubにログイン。
2. **MAINアカウントが所有するリポジトリのページ**にアクセスします。
3. リポジトリの「Pull requests」タブを開き、「New pull request」をクリック。
4. **Base branch（マージ先）** を `main`、**Compare branch（作業したブランチ）** を `school-branch` に設定。
5. タイトルと説明を記入して、「Create pull request」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929278/fbc70f9f-bc6d-73fa-d20f-382b7c76b803.png)


---

### **3. 自宅での作業を同期**

#### **3-1. Pull Requestを承認してマージ**
1. MAINアカウントでGitHubにログイン。
2. 「Pull requests」タブからSUBアカウントが作成したPull Requestを開き、内容を確認。
3. 問題がなければ「Merge pull request」をクリックしてマージ。

#### **3-2. 最新状態をPull**
Git Bashで以下を実行して、ローカル環境を最新の状態に更新：
```bash
git pull origin main
```

---
### :small_orange_diamond:4. 自宅（MAINアカウント）での作業をした場合
#### 4-1. 通常通り作業を進める
編集後、以下のコマンドで変更をPush：
```bash
git add .
git commit -m "自宅での作業内容"
git push origin main
```
※コミットコメントは作業内容などによってわかりやすいように記述
※ローカルで他のブランチを特に作成していなければプッシュのorigin main の指定は省略可
（↓↓↓ 現在のローカルブランチの確認方法）
```bash
git remote -v
```


#### **4-2. 次の日、学校でPullして続きの作業**
学校のPCで、作業を始める前に最新の状態を取得：
```bash
git pull origin main
```
その後は作業を続け、作業後はまたcommit,push, Pull requestの手順に沿って行ってください。

---

### :writing_hand_tone1: **ポイント: 作業前後のチェックリスト**

#### :large_blue_diamond: **作業を始める前**
- **自宅で作業を再開する場合**  
  - Pull Requestの承認とマージを行い、リポジトリの最新状態をPullする。  
  （コンフリクトを防ぐため、必ず最新状態を取得してください）
- **学校で作業を再開する場合**  
  - リポジトリの最新状態をPullしてから作業を開始する。  
  （コンフリクトを防ぐための重要な手順です）

---

#### :large_blue_diamond: **作業が終わった後**
- **自宅で作業を終えた場合**  
  - 変更をCommitし、`main` ブランチにPushする。
- **学校で作業を終えた場合**  
  - 変更をCommitし、`school-branch` にPushした後、Pull Requestを送信する。  
  （Pull Requestを使うことで、コンフリクトを避けながら変更をマージできます）

---

### :warning: **注意点**
- **最新状態の確認**: 作業開始時には必ず最新状態をPullすることで、コンフリクトを防ぐ。
- **ブランチの一貫性**: 学校での作業はすべて `school-branch` に統一する。
- **作業の流れを守る**: Pull Requestを活用し、自宅で承認・マージする手順を徹底する。


---

### :small_red_triangle_down: **今回の方法の利点**
- **トラブル防止**  
  アカウント間や環境の衝突を防ぐことができます。
- **変更履歴の管理が容易**  
  Pull Requestで編集内容を確認し、変更履歴を明確に管理できます。
- **初心者向けに理解しやすいフロー**  
  手順がシンプルで管理が楽です。

---

### :small_red_triangle_down: **最後に**
最初は慣れないかもしれませんが、この方法を繰り返していけば自然に覚えられるはずです。特に学校で作業を終える際は、少し早めに時間を確保して冷静に手順を確認しましょう。

この記事に対するフィードバックや質問があれば、ぜひコメント欄で教えてください！