NITICNoobsによるGit/GitHub講座 第8回 〜Pull Request/Issue〜

## 自己紹介
どうも、isso0424です。又の名をいっそうです。
高専2年生でぷよぐやみんぐを趣味でやっています。
***限界開発鯖***で無限に通話をしてます。
何やってるかは以下のtwitterやGitHub見てもらえればわかると思います。
[twitter](https://twitter.com/kousou4129)
[GitHub](https://github.com/isso0424)
今回は僕がGit&GitHub解説を進めていきます。

気づいたかも知れませんが俗に言うコピペと呼ばれる魔法を使いました。
## お目次
- Issue
- Pull Request

今回はGitHubの実践編になります。

## お説明
## Issue
これはリポジトリに結び付けられる`課題`や`問題点`などを指す言葉です。

### 使用する場面
Issueを使用する場面はそこそこあります

- 新機能の実装
- バグの報告
- 改善点の提案

### 立て方
では実際に自分のリポジトリで見てみましょう。
![Screenshot from 2020-06-03 02-35-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/487135f3-02dc-9f98-35d2-391e5ffd51ed.png)

ダークテーマを拡張機能で入れているので違和感があるかも知れませんが気にしないでください。
ここでCodeの隣の***Issue***ボタンを押すとIssueの一覧が見れます。
![IssueList.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/88289d34-85ac-cc66-97a0-2fd455b02bbe.png)


(おそらく)まだIssueを作成していないと思うので右上の`New Issue`ボタンを押して新しいIssueを作成しましょう。
![CreateNewIssue.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/e9d71f7b-1d9b-8bc5-46f6-428ea948fa97.png)

この画面で以下の情報が指定できます。

|名前|意味|
|---|---|
|Title|Issueのタイトル|
|Comment|Issueに付けるコメント|
|Assignees|Issueの担当者(self assignにより自分でIssueを解決するという意思表示ができる)|
|Labels|Issueについたラベル(Bugなど)Issueの方向性を示す|

その他は割愛します。
そして、`Submit new issue`を押すことで***Issue***を立てることができます。

### 閉じ方
Issueは***Close***することで解決したことを示します。
それぞれのIssueのページで`Close Issue`というボタンを押すと閉じれます。
また、後述のリンクされた`Pull Request`がマージされた際にも閉じられます。

## Pull Request
これはブランチを、***GitHub***上で別なブランチにマージする為のものです。
### 作り方
まず、

```
git checkout -b hoge
```

で`hoge`ブランチに移動します。

次に、ファイルを編集します。
その後、コミットして

```
git push origin hoge
```
で`origin`に対して`hoge`の変更を***push***します。

その後、GitHubへ行き`Pull Request`のボタンをクリックすると以下のような画面に飛びます。![PRList.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/72e24ea2-782c-5f3d-b20e-297f8b2d0617.png)

右上の`New Pull Request`を押すと`Issue`のような感じで`Pull Request`の作成画面に飛びます。

![ChangeCompare.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/389f38d3-a2d8-0a80-5c21-213dd58d1d6b.png)

今回は`master`を`base`に`hoge`をマージするので左上の`compare`を`hoge`に変更します。

すると下のような画面になります。![CreateNewPR.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/9e7248b6-0548-1dfe-bf08-773dab202b85.png)

ここで`Create New Pull Request`というボタンを押すと`Pull Request`を作成するページに飛びます。![CreateNewPR2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/796a13e9-5412-4e3c-ffe7-3aa39dfb50fe.png)

ここは`Issue`と似ていますが一点だけ相違点があります。
それは`Reviewers`の指定ができることです。
`Reviewers`というのは後述の`Review`を行う人員を指します。
今回は個人リポジトリなので指定しなくて問題ありません。

そして`Create pull request`を押すと`Pull Request`を作成できます。
すると下のスクショのような画面に移るはずです。
![Screenshot from 2020-06-03 03-21-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/7c804fa0-efe4-bd3b-3f5e-5249240c9295.png)

### Pull Requestのマージ
これはとても簡単で`Merge Pull Request`を押すだけでマージできます。
共同開発の場合は、`Reviewer`からの`Approve`(後述)の上でマージすることになります。
![PRmerge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/c34a4129-3f3c-4930-dafd-41c531689ce4.png)

### Pull Requestのレビュー
`Pull Request`でのコードの変更に対しては**レビュー**という形で指摘などをすることができます。
レビューをするにはまず、`File changed`というボタンをクリックします。
![FilesChanged.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/ad64e5db-24d6-e90a-ffed-f43bf4d7ca58.png)

そして、下のような画面に飛びます。
![Screenshot from 2020-06-03 03-35-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/0eea4589-9909-b471-cf1f-18062eae2f4f.png)
ここでレビューを行います。
指摘したい場所の行番号にカーソルを持っていって出てくる`+`をクリックします。
すると以下のようなフォームが出てきます。
![StartAReview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/8e27cc81-987a-5f0e-f54e-fde3ac893625.png)
ここで`Start a review`を押すとレビューが開始します。
あとは気になるところを指摘していきます。

最後にレビューの種類を決めます。
レビューの種類には以下のものがあります。

|名前|意味|
|---|---|
|Approve|マージしていいぞ|
|Request Changes|こんなコードマージさせれるか書き直してこい|
|Comment|特に特殊な意味の無いコメント|

`Reviewers`全員から`Approve`がもらえればそれはマージする許可が出たということなのでマージします。
逆に`Request Changes`が来たら**コメントを元に修正**する必要があります。

ここで重大な事実なんですがなんと **Pull Requestを立てた本人は自分のPull Requestに対してApproveやRequest Changesを出せません。**

というわけで今回は`Comment`だけにしておきましょう。

すると、`Pull Request`の画面に戻ると下のようにコメントが追加されます。![Screenshot from 2020-06-03 03-48-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568835/0ecaa2e3-f6d7-46a7-112b-e256de44d915.png)

これがレビューです。

### Issueとのリンク
`Pull Request`の大切な機能として`Issue`とリンクさせる事ができることが挙げられます。
リンクと言われてもピンとこないかも知れませんが`このPull RequestはこのIssueを解決しました`というのを示すものになります。
そして、`Pull Request`が後述のようにマージされると同時に`Issue`は`Close`されます。

## おまとめ
- プロジェクトの課題は`Issue`という形で示す。
- 別ブランチの変更をリモートの別ブランチに適用するときは`Pull Request`を立てる
- `Pull Request`はレビューを募れる

## おリンク
[1回目〜〜インストール編〜〜](https://qiita.com/Colk-tech/items/e75c61146cabc887ad29)
[2回目〜〜設定編〜〜](https://qiita.com/Colk-tech/items/f0817df7c6fdc9a7f283)
[3回目〜〜基本技能編〜〜](https://qiita.com/Colk-tech/items/8d4b28b9001b862eeb99)
[4回目〜〜平行世界編-1〜〜](https://qiita.com/Flisan/items/e6398225905e0ed906dc)
[5回目〜〜平行世界編-2〜〜](https://qiita.com/Flisan/items/6afd47345fdca42f1c3c)
[6回目〜〜GitHub編〜〜](https://qiita.com/ko_5/items/c0c45c80f12e0072e51e)
[7回目〜〜fetch/pull編〜〜](https://qiita.com/isso0424/items/a7a0816d9a7f0caf1de6)
8回目〜〜Issue/PR編〜〜 ←イマココ

## 執筆者
- [いっそう](https://twitter.com/kousou4129)
- [こ](https://twitter.com/ko_CottonLove)
- [こるく](https://twitter.com/Colk_)
- [フライさん](https://twitter.com/loxygenK)