【GitHub】 プルリクエストにAIレビューを導入してみた

## はじめに
以前からGitHubのプルリクにAIサポート、Copilotがあればいいのにと思っていました。
[Github Copilot for Pull Request](https://githubnext.com/projects/copilot-for-pull-requests/)もありますがCopilot Enterpriseに登録した企業のみなので
シンプルかつ個人でも始められそうなChatGPT CodeReviewを導入してみます。

https://github.com/anc95/ChatGPT-CodeReview


## ChatGPT CodeReviewを導入する
### OpenAIの作業
**1. [OpenAIアカウント](https://platform.openai.com/login?launch)に登録、ログインする**

:::note warn
ほんの少し費用が掛かります
:::

**2.　課金する**
Setting - Billingを選択します。
**Add to credit balance**を選択して、クレジットカードを登録します。
![スクリーンショット 2024-03-18 7.32.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/b6740ef7-af7d-9138-9ad4-509cbc230e2c.png)

ミニマム$5〜から課金を行います。
![スクリーンショット 2024-03-18 13.12.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/cec26df0-3c1e-df75-9451-93ff6e40fba5.png)


**3. APIKey作成**
API Keysを選択します。
Create New Secret keyを選択してAPI Keyを作成します。
![スクリーンショット 2024-03-18 7.25.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/14d26fc4-10a7-1358-b68c-321198e95c5f.png)
API keyを安全な場所に保存します。
※以降確認できません。
![スクリーンショット 2024-03-18 13.17.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/24bc4b4a-5796-80fa-d038-0feb5ed4f8cf.png)

### GitHubの作業
**1. GitHubにChatGPT CodeReviewをインストール**

https://github.com/apps/cr-gpt

**２. Github上の変数にAPIkeyをセットする**
GitHubの各リポジトリのSetting - Secrets And Variables - Actions - VariablesにOpenAIのAPI Keyを追加します。

VariableのKey名は「OPENAI_API_KEY」です。
※リポジトリ毎に手順2の作業が必要です。

![スクリーンショット 2024-03-18 13.23.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/1f60263b-69db-5f52-3d55-53e3422e6bad.png)

**以上で設定は完了です！**

## 試してみる
適当にプルリクを作成します。するとAIによるレビューが表示されます。
あとは人間が修正の要不要を判断してコードに反映すれば良いのではないかと思います。

英語のみのためGoogle翻訳で日本語に翻訳します。


![スクリーンショット 2024-03-18 13.33.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/1c9f4f10-ccbf-f302-ef86-ff8b92032969.png)


![スクリーンショット 2024-03-18 13.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/5f59637b-e1a1-a610-e361-878c8b63fda9.png)

## 費用
費用は1レビューあたり0.01ドル以下なので日本円にしても気にならない程度かと思います。
![スクリーンショット 2024-03-19 6.19.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/5c03535b-a218-251b-4cad-1b36b40dbf01.png)

## Github Actionsを使う
今紹介したのはBotというオプション等がない英語でのレビューを行う方法です。
他にGithub Actionsを用いてymlファイルにレビューの言語や詳細を設定する方法もあります。今回はかんたんに紹介します。

追記：下記記事にGithub Actionsの導入方法まとめました

https://qiita.com/sauna1137/items/7a897cf3daefba1b2c73

1. APIKeyをGitHubActions シークレットに追加します
2. .github/workflows/cr.ymlを作成し、以下のコンテンツを追加します

```
name: Code Review

permissions:
  contents: read
  pull-requests: write

on:
  pull_request:
    types: [opened, reopened, synchronize]

jobs:
  test:
    # if: ${{ contains(github.event.*.labels.*.name, 'gpt review') }} # Optional; to run only when a label is attached
    runs-on: ubuntu-latest
    steps:
      - uses: anc95/ChatGPT-CodeReview@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          # Optional
          LANGUAGE: Japanese ← 　！！！言語設定！！！
          OPENAI_API_ENDPOINT: https://api.openai.com/v1
          MODEL: gpt-3.5-turbo # https://platform.openai.com/docs/models
          PROMPT: # example: Please check if there are any confusions or irregularities in the following code diff:
          top_p: 1 # https://platform.openai.com/docs/api-reference/chat/create#chat/create-top_p
          temperature: 1 # https://platform.openai.com/docs/api-reference/chat/create#chat/create-temperature
          max_tokens: 10000
          MAX_PATCH_LENGTH: 10000 # if the patch/diff length is large than MAX_PATCH_LENGTH, will be ignored and won't review. By default, with no MAX_PATCH_LENGTH set, there is also no limit for the patch/diff length.
```


## まとめ
思ったより簡単に導入できました！
チームではAIのレビューを挟むことでセルフレビューの強化にもなり、レビューワーの負担も減らせそうです。また精度が安定しているのでレビューワーによる偏りが減るのではないかと思います。個人ではますます【個人+AI】による開発になるので個人開発という概念がなくなるかも知れませんね。


## 最後に
私の働いている会社で経験の有無を問わず採用を行っています。
興味のある方は是非カジュアル面談から応募してみてください！

https://jambo-support.com/recruit_engineer/