AWS CodeCommitでプルリク機能を使ってみよう！


## はじめに

AWS CodeCommitを使っていますか？
CodeCommitは、AWSから提供されている完全マネージド型のバージョン管理サービス(Git)になります。

CodeCommitのサービスが一般公開となったのが2015年7月、東京リージョンで使えるようになったのが2017年5月末でしたが、ついに2017年11月末に待望の**プルリクエスト機能**がアップデートで追加されました。

プルリクエスト機能の追加から約半年ほど経ちましたが、CodeCommitのプルリクエスト機能に言及している記事がネット上にあまり見かけませんので、簡単にプルリクエスト機能の使い方を解説したいと思います。



## AWS CodeCommitとは？

まずは、おさらい。

AWS CodeCommitとは、完全マネージド型のGitサービスになります。

Gitの特徴や分散型バージョン管理システムなどについての説明は、この記事では行いませんので、こちらの記事などを読んでみてください。
[サルでもわかるGit入門 〜バージョン管理を使いこなそう〜](https://backlog.com/ja/git-tutorial/)

完全マネージド型サービスとなりますので、サーバの管理やソフトウェアの管理、リポジトリを保管するストレージの管理など一切考える必要はありません。（サーバーレスですね！）

AWS CodeCommitの特徴として、IAMでユーザ管理出来たり、CodeStarやCodeBuild・Beanstalkのソース場所として使用できたり、リポジトリイベントに応答するLambdaファンクションを作成出来たりと、[他のAWSのサービスとの親和性が高い](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/integrations.html)ことが挙げられますので、AWSを使ってDevOpsに取り組むのであれば是非CodeCommitを使ってみてください。



## プルリクエスト機能の使い方

### 前提

- 今回のシナリオは、「*ログイン画面の文言修正*」が発生したシナリオとします。

- Gitの運用については「git-flow」で運用しているものとします。

  - 以下のブランチが存在している前提です。

    1. masterブランチ・・・本番リリース状態ブランチ
    2. developブランチ・・・開発ブランチ
    3. feature/login_changeブランチ・・・今回修正を行うブランチ

  - 「git-flow」の説明は以下を参照してください。

    [A successful Git branching model ｜ nvie.com](http://nvie.com/posts/a-successful-git-branching-model/)

    [AWSチーム社内勉強会「git-flow」レポート ｜ Developer.IO](https://dev.classmethod.jp/tool/git/cmstudy-git-flow/)

- CodeCommitのセットアップ方法やリポジトリの作成方法、使い方については、当記事では説明しませんので、以下の記事などを参照してください。
  [CodeCommit入門 – Code三兄弟を知る ｜ Developers.IO](https://dev.classmethod.jp/cloud/aws/codecommit-introduction/)
  ​

### 【開発者】機能修正用のfeatureブランチを作成し、ソースを修正する

1. 機能の修正に取り掛かるために、developブランチから**featureブランチ**を作成する。

2. ブランチを作成したfeatureブランチに切り替える。

3. 対象のソースコードの修正を行う。

4. 修正したソースコードをステージングする。

5. 変更内容をコミットする。

6. 変更内容をリモートにプッシュする。

### 【開発者】CodeCommitでプルリクエストを作成する

- １. CodeCommitのサービスを選択し、対象のリポジトリを開き、対象のブランチの「プルリクエストの作成」を選択する。
<img width="1407" alt="codecommit1.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/d6a6c2d3-4ed9-5c1e-438a-50fde18a6555.png">

- ２. 今回のプルリクエストの内容を「タイトル」「説明」に記載する。
<img width="1210" alt="codecommit2.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/043c8ad4-e7ba-745d-4747-0fe4a1ec5691.png">

   - プルリクメッセージの記載内容は以下の記事を参考にしてみてください。  
    [GitHub「完璧なプルリクの書き方を教えるぜ」| qiita](https://qiita.com/umanoda/items/93aec41213f8e3ce14c8)


- ３. 通知エリアの差分内容を確認し、問題が無ければ、「保存」をクリックする。
<img width="1250" alt="codecommit3.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/24812bd8-8fce-802c-db33-d775416a8b97.png">

- ４. プルリクエストが作成されました。
<img width="1054" alt="codecommit5.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/6795926c-36cd-f381-f4cc-a2a3ace62bf2.png">

### 【他の開発者】プルリクエストの確認を行う

1. CodeCommitのサービスを選択し、対象のリポジトリを開き、「オープン」状態のプルリクエストを選択する。
<img width="1053" alt="codecommit6.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/75b08234-fea9-c845-8f75-c9fb5f5cddac.png">


2. 「変更」タブを開いて、変更内容のコードレビューを行い、コメントを記載し「保存」する。
<img width="1033" alt="codecommit7.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/7bebbb5b-d2ee-3369-e7e3-c396812c6eb6.png">
<img width="1045" alt="codecommit8.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/7f4c195e-fd7f-cade-6cb2-494cdde861ac.png">

   *コメントは分かりやすく、サンプルなどを記載してあげると良いと思います。*

### 【開発者】コメントを確認し、指摘事項の修正を行う

1. CodeCommitのプルリクエストのコメントを確認し、指摘事項への対応を行う。
2. 修正したソースコードをコミット・プッシュする。
3. CodeCommitのプルリクエストを確認すると、コミットが更新されていることが確認できます。
<img width="1058" alt="codecommit9.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/f845e8be-b946-ba1c-639c-ca6046ce324b.png">
<img width="1051" alt="codecommit10.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/3484f157-bda8-00d3-41cc-8e80e786fb2d.png">

4. 他開発者からのコメントに返信し、マージの依頼を行う。
<img width="1044" alt="codecommit11.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/de6477b9-ea51-8d3f-3e4a-75c8f720a2a5.png">


### 【他開発者】指摘事項の修正を確認しマージする

1. CodeCommitのプルリクエストの内容を確認し、問題が無ければ「マージ」をクリックする。
<img width="1059" alt="codecommit12.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/26b66cc4-e9eb-c8ec-ece2-9498d3abf7a2.png">

2. featureブランチは対応完了後に自動的に削除するためチェックを付与して「マージ」をクリックする。
<img width="620" alt="codecommit13.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/4eef5fef-a3ed-83bb-f856-04fa42f467e6.png">

3. 変更分がマージされ、プルリクエストがクローズされます。
<img width="1056" alt="codecommit14.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/e546137e-2688-d26c-c616-c432687994b9.png">

4. オープン状態のプルリクエストがなくなったことを確認します。
<img width="1266" alt="codecommit15.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/1afbc783-f4e9-c931-dae2-ad0da7277149.png">

* 以上がプルリクエスト運用の説明となります。

## 最後に

*リポジトリに対して通知メールの設定をしている場合は、プルリクエストの作成時・更新時にSNSトピックに対して通知が行われますので、slackなどと連携させて、開発者で運用を決めておくと使い易いと思います。*

<img width="1054" alt="codecommit4.png" src="https://qiita-image-store.s3.amazonaws.com/0/62038/afc7cd01-4859-65c0-ef85-399de5804e33.png">



最後になって気付きましたが、マージ先がmasterブランチになっていました。。。
masterブランチは本番用ブランチですので、マージ先は正しくdevelopブランチに行ってください m(_ _)m