こんにちは。KENTEMでバックエンドを担当しているおかおかです。
弊社ではAzureやGitHubを利用しているため、AIによる自動コードレビューができるPR-Agentをお試しで導入してみました。
Azure OpenAI Serviceを作成する
Azureのポータル上からAzure OpenAIを新規作成します。以下設定を行うだけで簡単に構築することができます。
「gpt-4o」モデルを利用したいため、リージョンは「West US」にします。
Azure OpenAIが作成できたら、モデルをデプロイします。
「リソース管理」→「モデルデプロイ」→「展開の管理」をクリックすると「Azure OpenAI Studio」が表示されます。
「共有リソース」→「デプロイ」→「モデルのデプロイ」を選択
「gpt-4o」モデルを選択し、以下内容を入力して「デプロイ」します。
これでAzureの設定は完了です。簡単に作成することができました。
GitHubにYamlファイルを作成する
リポジトリに.github/workflows/code-review.yamlを追加し、以下設定をします。
OPENAI_KEY:デプロイしたAOAIリソースのAPIキー
OPENAI.API_VERSION:2024-02-15-preview
OPENAI.API_BASE:https://{aoai-resource-name}.openai.azure.com
OPENAI.DEPLOYMENT_ID:AIモデルのデプロイ時につけた名前
name: code-review on: pull_request: types: [opened, ready_for_review] issue_comment: types: [created, edited] pull_request_review_comment: types: [created, edited] env: EXTRA_SETTINGS : | 必ず日本語で回答してください。 文章が日本語で回答されているかを確認し、 英語になっている場合は日本語にしてください。 jobs: pr_agent_job: runs-on: ubuntu-latest timeout-minutes: 30 # PRの場合 # - ドラフトではない # コメントの場合 # - /ask から始まる if: | (github.event_name == 'pull_request' && !github.event.pull_request.draft) || (endsWith(github.event_name, 'comment') && startsWith(github.event.comment.body, '/ask')) permissions: issues: write pull-requests: write steps: - uses: Codium-ai/pr-agent@main env: OPENAI_KEY: ${{ secrets.OPENAI_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} OPENAI.API_TYPE: "azure" OPENAI.API_VERSION: ${{ vars.AZURE_API_VERSION }} OPENAI.API_BASE: ${{ vars.AZURE_API_BASE }} OPENAI.DEPLOYMENT_ID: ${{ vars.AZURE_API_DEPLOYMENT_ID }} # /describe PR_DESCRIPTION.EXTRA_INSTRUCTIONS: ${{ env.EXTRA_SETTINGS }} PR_DESCRIPTION.PUBLISH_LABELS: false # /review PR_REVIEWER.EXTRA_INSTRUCTIONS: ${{ env.EXTRA_SETTINGS }} # /improve PR_CODE_SUGGESTIONS.EXTRA_INSTRUCTIONS: ${{ env.EXTRA_SETTINGS }}
処理概要
GitHubでプルリク作成
Codium-ai/pr-agentがプルリクエストを解析
このツールがプルリクエストの内容を取得し、解析のためにAzureのOpenAIサービスに送信AzureのOpenAIサービスが解析を実行
AzureのOpenAIサービスがプルリクエストの内容を解析結果がGitHubに戻る
導入したことでの効果
変数名などの誤字を指摘してくれる
1プロジェクトで1ヶ月利用したAzureのコストは、平均¥1,300~¥1,400程度であったため、非常にコスパが良い
1PRを300行程度で試算した場合、約¥20程度機械的に自動で指摘されるため、指摘された側も素直に受け止めることができる(感情がないことが大きい)
思った以上に指摘の精度が良かった
以下実際によかった指摘です
検索機能の改善
const showItems: Item[] = items.filter((item) => - item.text.includes(inputText), + item.text.toLowerCase().includes(inputText.toLowerCase()), );
配列操作のパフォーマンス改善
- (file) => files.every((item) => !isSame(item.file, file.data)) + (file) => !files.some((item) => isSame(item.file, file.data))
条件式を簡潔にする指摘
onClick={() => { - isSelected === false && - disabled !== true && - props.onClick !== undefined && + if (!isSelected && !disabled && props.onClick) { props.onClick(); + } }}
おわりに
KENTEMでは、様々な拠点でエンジニアを大募集しています!
建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。
recruit.kentem.jp
career.kentem.jp