Slide 1

Slide 1 text

Amazon BedrockとPR-Agentで コードレビュー⾃動化に挑戦‧実際に運 ⽤してみた リテールアプリ共創部 マッハチーム morimorikochan

Slide 2

Slide 2 text

名前 morimorikochan 所属 クラスメソッド株式会社    リテールアプリ共創部    マッハチーム🚀 趣味 Switchのゲーム X @marooon88 ⼀⾔ オンライン登壇初めてで    緊張シテマス ⾃⼰紹介

Slide 3

Slide 3 text

● PR-Agentを使うことで、⽣成AIを利⽤しPRの概要⾃動⼊⼒‧⾃動コード レビューを⾏うことができた ● AWS‧GitHubActions上で動作できるため、既にこれらを利⽤している場 合導⼊コストがとても⼩さい ● 運⽤コストはSaaSに⽐べて低い ● 現状ではいくつか課題がある 📚先に結論

Slide 4

Slide 4 text

🤨コードレビューでこんなことありませんか? 󰣻 毎⽇⼤量のコードレビューに追われて忙しい💦 󰣼 プルリクエストの説明がなく、コードの読み込みに時間がかかる 🕰 󰣻 コードが知らない⾔語‧FWで書かれていてレビューしにくい🤫 󰣼 ⼈によってレビューのばらつきがあって⼿戻りが多い🪃

Slide 5

Slide 5 text

🤨コードレビューでこんなことありませんか? 󰣻 毎⽇⼤量のコードレビューに追われて忙しい💦 󰣼 プルリクエストの説明がなく、コードの読み込みに時間がかかる 🕰 󰣻 コードが知らない⾔語‧FWで書かれていてレビューしにくい🤫 󰣼 ⼈によってレビューのばらつきがあって⼿戻りが多い🪃 ⽣成AIにサポートしてもらったら解決できるんじゃない?🤨

Slide 6

Slide 6 text

󰡸探してみました (GitHub) Copilot for Pull Requests ● pull requestの概要を⾃動出⼒し てくれるサービス ● Enterpriseプランでしか提供して いない ● Diffを⾒て⾃動でコードレビューし てくれるサービス ● これはお蔵⼊りになったぽい https://githubnext.com/projects/copilot-for-pull-requests

Slide 7

Slide 7 text

󰡸探してみました CodeRabbit ● 無料プランではPull Requestの概要⾃動⼊⼒のみ ● コメントを⼊れてくれる有料プランは$12/m~ ○ PR作成者が有料プランである必要がある ○ チーム全員で考えるとそこそこ... https://coderabbit.ai/

Slide 8

Slide 8 text

󰡸探してみました (AWS Machine Learning Blog) Enhance code review and approval efficiency with generative AI using Amazon Bedrock ● 利⽤するサービスが多く管理コ ストが⾼い ● レビュー結果がメールで届く ○ メールだと⾒落としちゃう... https://aws.amazon.com/jp/blogs/machine-learnin g/enhance-code-review-and-approval-efficiency- with-generative-ai-using-amazon-bedrock/

Slide 9

Slide 9 text

󰡸探してみました coderabbitai/ai-pr-reviewer ● CodeRabbitのOSS版 ● モデルはChatGPT ● PRの要約もできる ● アーカイブされている tmokmss/bedrock-pr-reviewer ● 左記のfork ● モデルにAmazon BedRockを利 ⽤できる ● GitHubのスター数39 https://github.com/coderabbitai/ai-pr -reviewer https://github.com/tmokmss/bedroc k-pr-reviewer

Slide 10

Slide 10 text

PR-Agent ● CodiumAI社主導で開発している、⽣成AIを使ったレビューツール ● 事例が多く、どれもポジティブなものだった ● ⾃動コードレビューだけでなく⾊々できる ● SaaS / OSS ● 開発が活発だった 󰡸探してみました https://github.com/Codium-ai/pr-a gent

Slide 11

Slide 11 text

特徴 ● コードレビュー以外にも⾊々できる ● 利⽤可能なモデルが多い ● GitHubActionsで導⼊が簡単 󰴻PR-Agentとは

Slide 12

Slide 12 text

特徴 ● コードレビュー以外にも⾊々できる ● 利⽤可能なモデルが多い ● GitHubActionsで導⼊が簡単 󰴻PR-Agentとは

Slide 13

Slide 13 text

OSS版で利⽤可能なツール 1. /describe : PRの概要を⾃動記⼊する 2. /review : PRのコードレビューを⾏いコメントに追加する a. 不具合やセキュリティリスク 3. /improve : PRのコードレビューを⾏いコメントに追加する a. 保守性やパフォーマンスやテスト容易性など 4. /ask : コメントの質問に対して回答する 5. /update_changelog : PRの修正に応じてCHANGELOG.mdを出⼒ 6. /similar_issue :類似するissueを出⼒ ※有料プラン(PR-Agent Pro)だと他にもコマンドがあります 󰴻PR-Agentとは / コードレビュー以外にも⾊々できる

Slide 14

Slide 14 text

主要なコマンドは以下3つ 1. /describe : PRの概要を⾃動記⼊する 2. /review : PRのコードレビューを⾏い結果をコメントする a. 不具合やセキュリティリスク 3. /improve : PRのコードレビューを⾏い結果をコメントする a. 保守性やパフォーマンスやテスト容易性など 4. /ask : コメントの質問に対して回答する 5. /update_changelog : PRの修正に応じてCHANGELOG.mdを出⼒ 6. /similar_issue :類似するissueを出⼒ 󰴻PR-Agentとは / コードレビュー以外にも⾊々できる

Slide 15

Slide 15 text

特徴 ● コードレビュー以外にも⾊々できる ● 利⽤可能なモデルが多い ● GitHubActionsで導⼊が簡単 󰴻PR-Agentとは

Slide 16

Slide 16 text

利⽤できるモデル ● ChatGPTの4o ● Llama ● Google Cloud のVertexAIで提供されているモデル ● Amazon Bedrockで提供されているモデル ● Groqで提供されているモデル ● IBM watsonxで提供されているモデル ● ✨ChatGPTのo1-preview/o1-mini ✨ ● … 󰴻PR-Agentとは / 利⽤可能なモデルが多い

Slide 17

Slide 17 text

特徴 ● コードレビュー以外にも⾊々できる ● 利⽤可能なモデルが多い ● GitHub Actionsで導⼊が簡単 󰴻PR-Agentとは

Slide 18

Slide 18 text

GitHub Actionsのワークフローが ドキュメントに⽤意されている ※ローカルCLI, GitLab, BitBucket, Azure Devopsなどからでも実⾏可能 ※モデルにAmazon BedRockを利⽤す る場合は、別途AWSの認証情報設定が 必要 󰴻PR-Agentとは / GitHub Actionsで導⼊が簡単 on: pull_request: types: [opened, reopened, ready_for_review] issue_comment: jobs: pr_agent_job: if: ${{ github.event.sender.type != 'Bot' }} runs-on: ubuntu-latest permissions: issues: write pull-requests: write contents: write name: Run pr agent on every pull request, respo steps: - name: PR Agent action step id: pragent uses: Codium-ai/pr-agent@main env: OPENAI_KEY: ${{ secrets.OPENAI_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Slide 19

Slide 19 text

趣味で作ってるリポジトリで試したらうまくいったので 業務でも試してみた 試した条件 ● bedrock/anthropic.claude-3- haiku-20240307-v1:0 ○ 性能的にはclaude3.5-sonnet を使いたかったが、コストに ビビった ● FE, BE, IaC含むモノレポ ○ TypeScript ● 2週間、6程度のPRで運⽤ 👊試してみた 仕組み ● PRの概要⾃動⼊⼒/コードレビュ

Slide 20

Slide 20 text

いくつかいまいちな部分があった 1. ⽇本語で出⼒されない場合がある 2. 設定をチューニングしにくい 3. 指摘がイマイチ... 👊試してみた結果

Slide 21

Slide 21 text

👊試してみた結果 / 1.⽇本語で出⼒されない場合がある うまくいった場合 ⽇本語を指定しても、そうならな い場合がありました ダメだった場合

Slide 22

Slide 22 text

👊試してみた結果 / 1.⽇本語で出⼒されない場合がある You must always answer in Japanese. 必ず⽇本語で回答してください。 ⽇本語を指定しても、そうならな い場合がありました ● 特に /describe でよく発⽣ ● プロンプトの指定が⽢かっ た? ダメだった場合

Slide 23

Slide 23 text

👊試してみた結果 / 2.設定をチューニングしにくい モデルやプロンプトなどの設定⽅法 1. リポジトリのmainブランチのルートディレクトリに .pr_agent.tomlを配置しそこに定義 2. GitHubActionsでのジョブ実⾏時の環境変数で定義

Slide 24

Slide 24 text

👊試してみた結果 / 2.設定をチューニングしにくい モデルやプロンプトなどの設定⽅法 1. リポジトリのmainブランチのルートディレクトリに .pr_agent.tomlを配置しそこに定義 2. GitHubActionsでのジョブ実⾏時の環境変数で定義 いずれもmainブランチでコードを修正する必要があり、気軽に設定値を修正 しにくい(2はトリガーが”issue_comment”の場合のみ)

Slide 25

Slide 25 text

👊試してみた結果 / 3.指摘がイマイチ... PR-Agentがレビューで指摘した部分が的外れなことが多い 🤨“more clear”になる? 🤨他と同じ定義⽅法なので よしなに無視して欲しい

Slide 26

Slide 26 text

🤨⾃分が修正済みの内容を 指摘してくる(もう修正した けど…?) 👊試してみた結果 / 3.指摘がイマイチ... PR-Agentがレビューで指摘した部分が的外れなことが多い

Slide 27

Slide 27 text

🤨型定義の時点でundefinedに なりえないのに... 👊試してみた結果 / 3.指摘がイマイチ... PR-Agentがレビューで指摘した部分が的外れなことが多い

Slide 28

Slide 28 text

😎保守性を考慮した指 摘をしてくれる ※この場合は残念なが らすでに考慮済み 👊試してみた結果 / よかった点 とても参考になった部分もいくつか

Slide 29

Slide 29 text

😎予想以上にPRの概要が細かく 書かれる。 レビュワーにとってめちゃくちゃ 嬉しい 👊試してみた結果 / よかった点 とても参考になった部分もいくつか

Slide 30

Slide 30 text

😎UIの改善提案までやって くれてる...! 👊試してみた結果 / よかった点 とても参考になった部分もいくつか

Slide 31

Slide 31 text

必要な費⽤ ● PR-AgentのOSS利⽤:0円 ● GitHubActionsの費⽤:(場合によりけり) ● Amazon Bedrock(Claude 3 Haiku)の費⽤ ○ ⼊⼒トークン 1,000 個あたり 0.00025 USD ○ 出⼒トークン 1,000 個あたり 0.00125 USD 👊試してみた結果 / コストが低い

Slide 32

Slide 32 text

コード差分 \ コマンド /describe /review /improve 合計 +0 -41 $0.000852 0.12円 $0.000916 0.13円 $0.005358 0.76円 1.01円 +251 -0 $0.0014 0.20円 $0.00139 0.20円 $0.00130 0.18円 0.58円 +600 -61 $0.0053 0.75円 $0.0047 0.67円 $0.01368 1.94円 3.36円 👊試してみた結果 / コストが低い 必要な費⽤(Amazon Bedrock(Claude 3 Haiku))

Slide 33

Slide 33 text

● PR-Agentを使うことで、⽣成AIを利⽤しPRの概要⾃動⼊⼒‧⾃動コード レビューを⾏うことができた ● AWS‧GitHubActions上で動作できるため、既にこれらを利⽤している場 合導⼊コストがとても⼩さい ● 運⽤コストはSaaSに⽐べて低い ● 現状ではいくつか課題がある ○ ⽇本語で出⼒されない場合がある ■ プロンプトの改善で解消される可能性あり ○ 設定をチューニングしにくい ○ 指摘がイマイチ... ■ コードレビューの指摘はむやみに信⽤せず、参考程度に留めるべき 📚まとめ

Slide 34

Slide 34 text

● 差分が多いファイルはignoreすると無駄なトークンを消費しない ○ package-lock.json ○ **/package-lock.json ● PR-Agentの内部実装ではlitellmを利⽤している ○ このライブラリで対応しているモデルが多いので結果的にPR-Agentが利⽤で きるモデルも多くなっている? ● drop_params=true ● モデルに送られているプロンプトはどんな感じ? ○ (次ページ) 📚Appendix

Slide 35

Slide 35 text

● Publicリポジトリの場合 ”@CodiumAI-Agent” に メンション⾶ばすだけで 実⾏してくれる ● 他には設定不要 📚Appendix

Slide 36

Slide 36 text

● 適当にやっちゃうと運⽤困るかもしれない ○ PR-Agentが指摘した部分の可否を誰がどう判断するか 📚Appendix

Slide 37

Slide 37 text

You are PR-Reviewer, a language model designed to review a Git Pull Request (PR). Your task is to provide a full description for the PR content - files walkthrough, title, type, and description. - Focus on the new PR code (lines starting with '+'). - Keep in mind that the 'Previous title', 'Previous description' and 'Commit messages' sections may be partial, simplistic, non-informative or out of date. Hence, compare them to the PR diff code, and use them only as a reference. - The generated title and description should prioritize the most significant changes. - If needed, each YAML output should be in block scalar indicator ('|-') - When quoting variables or names from the code, use backticks (`) instead of single quote ('). Extra instructions from the user: ===== {ユーザーが指定したプロンプト} ===== …(省略) 📚モデルに送られているプロンプト

Slide 38

Slide 38 text

😎最後に マッハチームの紹介

Slide 39

Slide 39 text

😈プロジェクト⽴ち上げの課題 チーム
 ビルディング 
 顧客の
 意思決定 
 が遅い
 PJ概要 
 の理解
 顧客の
 事業理解 
 新しい技術の キャッチアッ プ
 アサイン 
 調整
 プリセールス時 と話しが違う 
 🤔

Slide 40

Slide 40 text

マッハチームの特徴 40 プロジェクトの開始から 初速をマッハ に そして MVPを早く提供 し 「思ってたものと違った」 を防ぐ。 進捗 時間 従 来 マッハチーム

Slide 41

Slide 41 text

マッハチームの特徴 ✔ 固定チーム → チームビルディングが不要 ✔ 技術スタックをチームで 標準化・パッケージ化   → 最小限の時間で環境構築を行える   → PJ毎の技術的なキャッチアップが最小限に抑えられる ✔ プリセールスから開発まで一貫 して担当   → PJ概要を全て把握した状態でスタートできる ✔ 数多くプロダクトを開発してきた経験   → 顧客が意思決定に迷うポイントを先回り してサポート

Slide 42

Slide 42 text

一緒に働く仲間を大募集中 ...!

Slide 43

Slide 43 text

技術 採⽤技術スタック ⾔語 TypeScript(JavaScript) フロントエンド React.js, Next.js, Flutter CI/CD GitHub Actions 開発プラットフォーム GitHub IaC AWS CDK コンピューティング Lambda, ECS on Fargate データベース DynamoDB, Aurora 認証基盤 LINE認証、Auth0 その他(AWS関連) API Gateway, ALB, WAF, SQS, SNS, EventBridge, AppSync, etc… デザイン Figma 使⽤する技術スタック

Slide 44

Slide 44 text

44 モダンな技術でフルスタック開発に挑戦したい ● 2~3名のエンジニアで、フロントエンド、サーバーサイド、インフラ全て 担当 プリセールスからプロダクトの方向性を提案したい ● エンジニアがプリセールスも顧客折衝もガンガン進めていきます ● アジャイル開発が多く提案しやすいです 0から1を圧倒的なスピードで立ち上げたい ● 2~6人月程度の案件サイズがボリュームゾーンです ● 様々なお客様を通して、マッハで経験できます マッハチームはこんなエンジニアにおすすめ

Slide 45

Slide 45 text

45 クラスメソッドはこんな人におすすめ 自由に仕事をしたい人 仕事中にブログを書きたい人(※) AWSのスキルを限界まで高めたい人

Slide 46

Slide 46 text

気になった方は カジュアル面談で話しましょう

Slide 47

Slide 47 text

ありがとうございました 🫠おわり