【PR-Agent】オラが村にもAIが来ただよ


:::note
[これは何] 
PRの内容をAIが書いてくれたり、レビューしてくれるCIをインターン先に導入した話
:::

:::note warn
本命の原稿落としました。佐竹先生の次回作にご期待ください。
:::

## 自己紹介

### Yuma Satake

普段は ~~フロントおじさん~~ Webアプリケーション開発をしている車好きの学生。

- 名前：佐竹友真
- 所属：名古屋工学院専門学校(3 年)
- 領域：Web 開発
- 趣味：車・旅行
- Twitter：[Yuma Satake | Matsuriba🏮](https://x.com/yuma_satake22)

<img width="200px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740071/aaf685a0-0af0-5e5b-92e9-a6f0275812fc.jpeg">



## 📕概要


### どうしたの

長期のインターン先で`PR-Agent`というAIレビューをしてくれるツールを導入した話

▼ PR-Agent

https://github.com/Codium-ai/pr-agent

### それは何？

`GithubActions`でPR時に動作するPR自体を書いてくれたり、レビューとかやってくれるやつ

### PR-Agentとは？

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740071/32e94c94-2102-ea41-3d78-c104e7835cd9.jpeg" />

> [公式] Qode Merge PR-Agentは、AIによるフィードバックと提案を提供することで、プルリクエストの効率的なレビューと処理を支援することを目的としています。

`Codium AI`が開発をしている、オープンソースのAIツール。
GithubActionsをトリガーにして、PRの差分の内容から、PRの説明文生成、レビューなどを行ってくれる。

競合として同様にAIレビューを行う`CodeRabbit`などがある。

▼ CodeRabbit

https://www.coderabbit.ai

### 何が嬉しいの？

- PRで何を変更したか手書きしなくてよくなる
- AIがPRの改善点をコメントしてくれる

### お金は？

- OpenAIのAPI KEYで動作する
- 今の所`3円/1PR`ぐらい（もちろん差分の量に依存するが）

### 日本語対応は？

プロンプトを差し込む事で日本語対応が可能

### 対応言語は？

GPTをモデルとしては内部で使っているので、GPTが読めるやつであれば

## 導入

以下の３つの対応で導入が可能です。

1. リポジトリへのAPI KEYの追加
2. pr-agent.yamlの追加
3. pull_request_template.mdへの追記

### 1. リポジトリへのAPI KEYの追加

先述の通り、`PR-Agent`は裏で`OpenAI`のAPIを利用して動作するため、API KEYをリポジトリに追加します。

▼ `Settings > Secrets and variables > Actions > New repository secret` から追加

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740071/a5275258-89a3-394b-7d38-4921a6d8051b.png" />

▼ OPENAIのAPI KEYはここから発行

https://platform.openai.com/api-keys

### 2. pr-agent.yamlの追加

Actionsのファイルとして`pr-agent.yaml`を追加します。
envとして`PR-Agent`のカスタマイズを行なっています。

例えば
`pr_reviewer.extra_instructions: Must use Japanese in your answers.`
と設定することで、日本語で回答を生成してくれるようになります。

▼ 設定はこちら

https://github.com/Codium-ai/pr-agent/tree/main/pr_agent/settings

※設定の内容をコメントで雑にGPTに書かせて追記しています

```yaml
name: pr-agent

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

permissions:
 pull-requests: write

jobs:
 pr_agent:
   runs-on: ubuntu-latest
   name: Run PR Agent
   if: ${{ github.event.sender.type != 'Bot' }}
   steps:
     - id: pr-agent
       uses: Codium-ai/pr-agent@main
       env:
         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 
         # OpenAIのAPI KEYで動きます        
         OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
         # 出力の詳細度      
         config.verbosity_level: 1 
         # レビューの労力見積もりを必須としない設定です
         pr_reviewer.require_estimate_effort_to_review: 'false'  
         # ファイル要約をインライン表示する設定が有効になっています
         pr_description.inline_file_summary: 'true'  
         # 説明マーカーの使用を有効化しています
         pr_description.use_description_markers: 'true'  
         # 「Generated by」ヘッダーの追加を無効化しています
         pr_description.include_generated_by_header: 'false'  
         # 最終更新メッセージの表示を無効化しています
         pr_description.final_update_message: 'false'  
         # ヘルプテキストの表示を無効化しています
         pr_description.enable_help_text: 'false'  
         # 自動レビュー機能を有効化しています
         github_action_config.auto_review: 'true'  
         # 自動説明生成機能を有効化しています
         github_action_config-auto_describe: 'true'  
         # 自動改善機能を有効化しています
         github_action_config.auto_improve: 'true'  
         # レビュワーには回答を日本語で行うよう指示しています
         pr_reviewer.extra_instructions: "Must use Japanese in your answers."  
         # 説明文も日本語で記述し、タイトルにはcommitlintパターンのプレフィックスを含めるように指示しています
         pr_description.extra_instructions: 'Must use Japanese in descriptions. Titles should have prefix of commitlint pattern such as `feat:`, `chore:`, `test:`, `fix:`, `ci:`, `docs:` etc' 
```

### 3. pull_request_template.mdへの追記

PRのテンプレートに以下のような記述を追加します。

それぞれ、`summary`と`walkthrough`と記載した箇所に、PR-Agentが生成した内容を埋め込んでくれます。

:::note warn
PRを発行した直後、PR-Agentが動作している間にPRを編集してしまうと、PR-Agentがうまく書き込みをしてくれない時があるので注意（re-runしてもダメ）
:::

```markdown
### 🤖 PR Agent

#### Summary

<!-- DO NOT EDIT -->
pr_agent:summary

#### Walkthrough

<!-- DO NOT EDIT -->
pr_agent:walkthrough
```

## 実際に動作している様子

※内容は一部マスクしています

- **Summary（変更点を書いてくれる）**

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740071/32a1bffa-8a3c-79d8-20db-1f3529df23fa.png" />    
    
- **Walkthrough（各ファイルの変更点と変更内容を書いてくれる）**

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740071/2fe2f7ac-0641-f9e0-860c-af1bdc45a5b4.png" />
    
- **PR Reviewer Guide（PR上で確認すべき点を教えてくれる）**

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740071/19ab2805-1894-5f9c-2a2c-27825c54a508.png" />

他にもPRの内容についてhelpをする事ができたり、Codeのサジェストもしてくれます。

## Code Rabbitとの比較

導入の手軽さでは`CodeRabbit`が優れているが、カスタマイズ性は`PR-Agent`の方が高いかな？といった感じ。
（CodeRabbitが完全にエアプなので、完全な比較はできていない）

サブスクリプションを契約しなくても、OpenAIのAPI KEYがあれば利用できるという点で、`PR-Agent`の方が個人的には好き。


| 比較項目       | CodeRabbit                                      | PR-Agent                                                                 |
|----------------|-------------------------------------------------|--------------------------------------------------------------------------|
| 提供形態       | サブスクリプションサービスとして提供          | OSSとして提供                                               |
| 主な機能       | PRの自動レビュー、要約生成、リアルタイムチャットによるフィードバック | PRの概要自動生成、自動レビュー、コード改善提案、ドキュメント追加など多彩な機能 |
| 導入の容易さ   | GitHub Appとして簡単に導入可能                | GitHub Actionsとして設定が必要                                         |
| カスタマイズ性 | 固定された機能セット                          | プロンプトの調整により柔軟にカスタマイズ可能               |
| 料金体系       | 月額$12からのサブスクリプションモデル          | 利用自体は無料（OpenAI APIの使用料が別途発生）                       |
| プライバシー | SOC2 Type II、GDPR、HIPAAなどのセキュリティ基準に準拠 |セルフホスト可能                   |    

## お気持ち

- PR書く手間が省ける◎
- 経験ベース、Suggestions はたまに良いこと言ってくれる◎
- Actionsとして簡単に追加できるのは便利◎

## まとめ

インターン先では、一部のプロジェクトで導入をしたが、結構便利だと好評なので、全社展開を密かに狙っている。
AIツールは、使えるところから小さく導入していく良いと思っているので、これからもこういったツールを積極的に入れていきたい。

## 資料

https://x.com/yuma_satake22

https://github.com/Codium-ai/pr-agent

## 参考資料

https://tech.layerx.co.jp/entry/2023/09/01/102612

https://inside.dmm.com/articles/introduce-pr-agent-to-monorepo/#content1