1人で始まり、1人で終わるPull request入門

# 1人ではじまり1人で終わるPull Request

**今回は一人でできるGitHubのPull Requestの練習について紹介します。**

*当記事は実践的なチーム開発を想定した記事でありません。私が個人でPull Requestの練習をした内容をまとめたものです。

## Pull Requestについて
Pull RequestとはGitHubの機能の一つでソースレビューや作成もしくは変更したソースコードの反映を行うために利用される機能です。

<br>

最近ではチーム開発にGit GitHubの導入をしている企業は多くなっています。

Gitのバージョン管理はとても優れていますが、開発に携わる人間が各々ソードコードの新規作成や変更などを自己判断で反映を行った場合、チームメンバーはひとつひとつ変更内容の確認を行う必要があり、チーム開発においてとても非効率的な作業が発生します。また、チームのリーダーや有識者によるコードレビューがない場合は変更した内容により障害の発生原因となる場合があります。

**なのでPull Requestが存在します！**

Pull Requestの流れは

![プルリク](https://user-images.githubusercontent.com/51228144/101239364-6bb35100-372a-11eb-9c5e-b00322eaf99d.png)

上記のような流れで反映を行う前に人間を挟むことにより反映前にコードレビューが必ず発生するようになります。

> 雑な資料で申し訳ありません。

## Pull Requestを実践する

### はじめに

- Gitのインストール

- GitHubアカウント

上記項目が未完了の場合、先に完了させましょう。

[Git](https://git-scm.com/)

[GitHub](https://github.com/)

### リポジトリの作成を行う

<img width="1424" alt="リポジトリ" src="https://user-images.githubusercontent.com/51228144/101239659-bc2bae00-372c-11eb-983d-601f3013b28b.png">

まずはじめにリポジトリの作成を行います！

リポジトリは**Public**か**Private**お好きな方をお選びください。

***

<img width="1217" alt="作成" src="https://user-images.githubusercontent.com/51228144/101239738-5986e200-372d-11eb-85d7-08e5c3340cd2.png">


次にローカルのリポジトリとリモートのリポジトリの紐付けを行います。

私はGitHubとSSHで接続をしているので、SSHを選択していますがお使いの環境にあわせて接続形式を選択してください。

***

<img width="1431" alt="画面" src="https://user-images.githubusercontent.com/51228144/101244488-2dc62500-374a-11eb-953b-00a8da31044a.png">


リモートリポジトリにローカルの内容を**push**を行い、GitHubのリポジトリの画面が更新されていれば準備完了です。

これで1人で**Pull Request**の練習を行う準備が完了しました！

***


## Pull Requestを出してみる

まずローカルリポジトリに新規ブランチを作成しましょう。

``` sh
git checkout -b develop
```

**develop** branchの作成ができました。次にソースコードを編集または新規作成を行い、コミットを行いましょう。

コミットが完了したらリモートリポジトリに**push**しましょう。

``` sh
git push origin HEAD
```

<img width="1425" alt="gamen" src="https://user-images.githubusercontent.com/51228144/101245130-0ffabf00-374e-11eb-9c5c-5c321dcf30f7.png">

1. develop branchがpushされていることを確認します。**Compare & pull request**ボタンがからPull requestの画面に移動できます。今回はこのボタンからの遷移はおこないません。

2. 今回はPull requestを行うため **pull requestsタブ**からpull requestを行います。

***

<img width="1429" alt="画面2" src="https://user-images.githubusercontent.com/51228144/101245610-5ef62380-3751-11eb-8b99-40d6b187db57.png">

New pull requestボタンを押して**pull request**を行います。

***

<img width="1426" alt="画面3" src="https://user-images.githubusercontent.com/51228144/101245790-b052e280-3752-11eb-813f-0df7e9f8de23.png">

1. Merge先のbranchとMergeするbranchを指定します。今回は**develop branch**を**main branch**にMergeします。

2. **commit**のメッセージ内容を確認することができます。今回は**commit**が1つなので1つしか表示されていませんが、**commit**の内容が複数ある場合は複数表示されます。

3. 変更したファイルの内容を確認することができます。今回は新規のファイルを作成したので追加した内容のみ表示されています。一部削除をした場合は削除した内容が表示されます。

4. **Create pull request**ボタンを押すことで確認ページに移動することができます。

***

<img width="1425" alt="gamen3" src="https://user-images.githubusercontent.com/51228144/101269821-1d4b9400-37b6-11eb-9319-28b3d189b120.png">

1. Pull requestのタイトルを記述する項目です。初期時はコミットの内容が表示されます。この項目はわかりやすい内容にしましょう。

2. Pull requestのコメント内容を記述する項目です。①でタイトルの記述を行い、当項目でより詳しい内容を記述します。記述内容としてはどのような変更をしたのかもしくはレビューをして欲しい観点についてを記述をします。

3. pull requestの内容を分別する。

- **Reviewers** レビューをしてもらう人を選択する。

- **Assignees** 担当した人間を選択する。

- **Labels**　どうのような作業かを分類かを選択する。

- **Proects** どのプロジェクトにたいしてのpull requestかを選択する。

- **Miletone** いつまでの期限の作業かを選択する。

- **Linked Issue** Issueごとに作業を管理している場合、どの作業かを選択する。

＊今回は1人で始まり、1人で終わるpull requestなのでReviewersは選択することはできません。

上記の内容が完了したら**Create pull request**ボタンを押しましょう！

***

<img width="1440" alt="4" src="https://user-images.githubusercontent.com/51228144/101279213-09c71a00-3804-11eb-8df0-e99418012229.png">

ついに最後の画面です。

本来であればレビュー担当者がコメントを記述することができますが、今回は1人での作業のため、自身のコードレビューを行いコメントをしましょう。

Merge pull reqestボタンを押すことで**develop branch**を**main branch**にMergeすることができます。ボタンを押すとpull reqeustのコメントを記述することができます。コメントの記述が完了したら**Confirm Merge**ボタンを押しましょう。

***

<img width="1440" alt="5" src="https://user-images.githubusercontent.com/51228144/101279266-6fb3a180-3804-11eb-8c83-644e0c139d8f.png">

最後に**develop branch**を削除してGitHubでの作業は完了です！

***

## リモートをローカルに反映する

リモートリポジトリとローカルリポジトリで差があるので、リモートリポジトリの内容をローカルリポジトリに反映しましょう。今回の場合、リモートリポジトリの**main branch**は**develop branch**をMergeした状態です。一方でローカルリポジトリの**main branch**は**develop branch**をMergeしていません。

なので、リモートリポジトリのmain branchをローカルのmain branchに**pull**しましょう。

```
git checkout main
```

まず**main branch**に移動します。

```
git pull origin main
```

次にリモートの**main branch**をローカルの**main branch**にpullします。

```
git log
```

最後にMergeが正常に行えているかを確認します。

以上が1人で始まり、1人で終わるPull request入門です。

pull requestの練習がしてみたいが、やり方がわからないという人や擬似チーム開発を1人で練習してみたいひとは参考にしてください。