GitHub - 生成 AI によるコードレビューの自動化

1. 概要

このラボでは、GitHub Actions ワークフローを設定し、Gemini と統合してコードレビューの手順を自動化します。

2bab73f63b927f93.png

学習内容

このラボでは、次の方法について学びます。

  • GitHub で GenAI コードレビュー自動化の手順を追加する方法
  • devai CLI をローカルで実行してコードレビューを自動化する方法

前提条件

  • このラボは、Cloud コンソールと Cloud Shell 環境に精通していることを前提としています。

2. 設定と要件

Cloud プロジェクトの設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

環境設定

Gemini チャットを開きます。

bc3c899ac8bcf488.png

または、検索バーに「Gemini に質問」と入力します。

e1e9ad314691368a.png

Cloud AI Companion API を有効にします。

66cb6e561e384bbf.png

[Start chatting] をクリックして、サンプルの質問のいずれかを使用するか、独自のプロンプトを入力して試します。

5482c153eef23126.png

プロンプトの例:

  • Cloud Run の 5 つの主なポイントについて説明します。
  • Google Cloud Run プロダクト マネージャーとして、Cloud Run を 5 つの重要なポイントにまとめ、学生に説明します。
  • Google Cloud Run プロダクト マネージャーとして、認定 Kubernetes デベロッパーに Cloud Run を 5 つの重要なポイントで説明します。
  • Google Cloud Run プロダクト マネージャーとして、Cloud Run と GKE のどちらを使用するかを、シニア デベロッパーに 5 つの重要なポイントで説明します。

より良いプロンプトの作成方法については、プロンプト ガイドをご覧ください。

Gemini for Google Cloud がデータを使用する方法

Google のプライバシーに関する取り組み

Google は、AI/ML プライバシー コミットメントを業界で最初に発表した企業の 1 つです。これは、お客様がクラウドに保存されている自社のデータについて最高レベルのセキュリティとコントロールを得るべきだという、Google の信念を概説したものです。

送信および受信するデータ

Gemini に尋ねる質問(Gemini に送信して分析または完成される入力情報やコードなど)は、プロンプトと呼ばれます。Gemini から受け取る回答やコード補完は、レスポンスと呼ばれます。Gemini がプロンプトやそのレスポンスをデータとして使用してモデルをトレーニングすることはありせん

プロンプトの暗号化

Gemini にプロンプトを送信すると、Gemini の基盤モデルへの入力としてデータが転送中に暗号化されます。

Gemini によって生成されたプログラム データ

Gemini は、ファーストパーティの Google Cloud コードと、選択したサードパーティ コードでトレーニングされます。コードのセキュリティ、テスト、有効性(Gemini によるコード補完、生成、分析など)については、ユーザーが責任を負います

Google がメッセージを取り扱う方法について詳しくは、こちらをご覧ください。

3. プロンプトをテストするオプション

既存の devai cli プロンプトを変更または拡張するには、いくつかの方法があります。

Vertex AI Studio は Google Cloud の Vertex AI プラットフォームの一部であり、生成 AI モデルの開発と使用を簡素化、高速化するために特別に設計されています。

Google AI Studio は、プロンプト エンジニアリングと Gemini API のプロトタイピングとテストを行うためのウェブベースのツールです。

Google Gemini ウェブアプリ(gemini.google.com)は、Google の Gemini AI モデルの機能を探索して活用できるように設計されたウェブベースのツールです。

4. サービス アカウントを作成する

検索バーの右側にあるアイコンをクリックして Cloud Shell を有効にします。

3e0c761ca41f315e.png

開いたターミナルで、Vertex AI API と Gemini チャットを使用するのに必要なサービスを有効にします。

gcloud services enable \
    aiplatform.googleapis.com \
    cloudaicompanion.googleapis.com \
    cloudresourcemanager.googleapis.com \
    secretmanager.googleapis.com

承認を求められたら、[承認] をクリックして続行します。

6356559df3eccdda.png

次のコマンドを実行して、新しいサービス アカウントとキーを作成します。

このサービス アカウントを使用して、CICD パイプラインから Vertex AI Gemini API への API 呼び出しを行います。

PROJECT_ID=$(gcloud config get-value project)
SERVICE_ACCOUNT_NAME='vertex-client'
DISPLAY_NAME='Vertex Client'
KEY_FILE_NAME='vertex-client-key'

gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --display-name "$DISPLAY_NAME"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/aiplatform.admin" --condition None

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" --condition None

gcloud iam service-accounts keys create $KEY_FILE_NAME.json --iam-account=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

5. GitHub リポジトリを個人の GitHub リポジトリにフォークする

https://github.com/GoogleCloudPlatform/genai-for-developers/fork に移動し、オーナーとして GitHub ユーザー ID を選択します。

「main」ブランチのみをコピーする場合は、オプションのチェックを外します。

[Create fork] をクリックしてください。

6. GitHub Actions ワークフローを有効にする

フォークされた GitHub リポジトリをブラウザで開き、[Actions] タブに切り替えてワークフローを有効にします。

1cd04db9b37af7cf.png

7. リポジトリ Secret を追加する

フォークされた GitHub リポジトリの「Settings / Secrets and variables / Actions」にリポジトリ シークレットを作成します。

名前が「GOOGLE_API_CREDENTIALS」のリポジトリ シークレットを追加します。

94cbe2778bef25eb.png

Google Cloud Shell ウィンドウ/タブに切り替えて、Cloud Shell ターミナルで次のコマンドを実行します。

cat ~/vertex-client-key.json

ファイルの内容をコピーして、シークレットの値として貼り付けます。

915579a97f8f2ced.png

値として Qwiklabs プロジェクト ID を指定して、PROJECT_ID シークレットを追加します。

4fa92833ce615a36.png

8. GitHub Actions ワークフローを実行する

ブラウザで GitHub リポジトリに移動し、ワークフローを実行します。

ワークフローは、コードプッシュまたは手動実行で実行されるように構成されています。

da11273b4b54f7b6.png

結果を確認する:

cf49aa41980aacc5.png

テストカバレッジ コマンドの結果:

devai review testcoverage -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

3b21bd4639524763.png

コードレビュー コマンドの結果:

devai review code -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

4876dbc2e0042943.png

パフォーマンス レビュー コマンドの出力:

devai review performance -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

98dd2472b2e819bf.png

セキュリティ レビュー コマンドの結果:

devai review security -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

7d180a763db92d56.png

ブロックツールがコマンドの結果を確認する:

devai review blockers -c ${{ github.workspace }}/sample-app/pom.xml

726175e874aefcf.png

9. リポジトリのクローンを作成する

Cloud Shell ターミナルに戻り、リポジトリのクローンを作成します。

コマンドを実行する前に、YOUR-GITHUB-USERID を GitHub のユーザー ID に変更します。

git clone https://github.com/YOUR-GITHUB-USERID/genai-for-developers.git 

フォルダを変更し、Cloud Shell エディタでワークフロー ファイルを開きます。

cd genai-for-developers

cloudshell edit .github/workflows/devai-review.yml 

IDE に構成ファイルが表示されるまで待ちます。

9e81e5a79d421eac.png

10. Gemini Code Assist を有効にする

右下にある [Gemini] アイコン 7c891e32c055c0e4.png をクリックします。

[Login to Google Cloud] と [Select a Google Cloud Project] をクリックします。

f5318f22c91ecaa8.png

6b7203ffdd8485fa.png

fb8d42a6bc8a260f.png

ポップアップ ウィンドウで、Qwiklabs プロジェクトを選択します。

f661047956a6d6f9.png

11. Gemini Code Assist でコードを説明する

devai-review.yml ファイルを右クリックして、Gemini Code Assist > Explain を選択します。

41fb7da002bdf43.png

審査の説明:

7724d52e54918c00.png

12. DEVAI CLI をローカルで実行する

Cloud Shell ターミナルに戻り、次のコマンドを実行して devai をローカルにインストールします。

pip3 install devai-cli

CLI はインストールされているが、PATH にない。

WARNING: The script devai is installed in '/home/student_00_478dfeb8df15/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

次のコマンドを実行して、PATH 環境変数を更新します。ユーザーのホームフォルダ名に置き換えます。例: student_00_478dfeb8df15

export PATH=$PATH:/home/YOUR-USER-HOME-FOLDER/.local/bin

devai cli コマンドを実行して、ローカルでコードレビューを実施します。CLI の出力を確認します。

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1

cd ~/genai-for-developers

devai review code -c ./sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

次のコマンドを実行してレビュー スクリプトを開きます。

cloudshell edit devai-cli/src/devai/commands/review.py

review.py ファイルの任意の場所を右クリックし、Gemini Code Assist > Explain を選択します。

説明を確認します。

30e3baf4c272c8ab.png

13. DevAI CLI 開発

このセクションでは、devai cli に変更を加えます。

まず、Python virtualenv を設定し、要件をインストールして、サンプル コマンドを実行します。

cd ~/genai-for-developers/devai-cli
python3 -m venv venv
. venv/bin/activate
pip3 install -r src/requirements.txt
pip3 install --editable ./src
devai echo

コードレビュー コマンドを再実行して、すべてが正常に機能していることを確認します。

devai review code -c ~/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Cloud Shell エディタの Markdown プレビューを使用して結果を確認します。

新しいファイルを作成し、Gemini の回答を貼り付けます。

次に、コマンド パレットを使用して「Markdown: Open Preview」を選択します。

ec6fedf4b6d3fb73.png

9999e7fbb20cf251.png

9a12ba6ee8b3eedd.png

14. devai CLI コマンドの詳細を確認する

コードレビュー コマンド

devai review code -c ~/genai-for-developers/sample-app/src/main/java

パフォーマンス レビュー コマンド

devai review performance -c ~/genai-for-developers/sample-app/src/main/java

セキュリティ審査コマンド

devai review security -c ~/genai-for-developers/sample-app/src/main/java

テストカバレッジの確認コマンド

devai review testcoverage -c ~/genai-for-developers/sample-app/src

ブロック設定の確認コマンド

devai review blockers -c ~/genai-for-developers/sample-app/pom.xml
devai review blockers -c ~/genai-for-developers/sample-app/setup.md

画像や図の確認と要約:

入力図 [~/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

確認コマンド:

devai review image \
  -f ~/genai-for-developers/images/extension-diagram.png \
  -p "Review and summarize this diagram"

出力:

The diagram outlines a process for conducting local code reviews using a VS Code extension or CLI, leveraging Google Cloud's Vertex AI (Gemini Pro) for generating review prompts. 

**Process Flow:**

1. **Code Style Check:** Developers initiate the process by checking their code for adherence to pre-defined style guidelines.
2. **Prompt Generation:** The VS Code extension/CLI sends the code to Vertex AI (Gemini Pro) on Google Cloud. 
3. **Vertex AI Review:**  Vertex AI analyzes the code and generates relevant review prompts.
4. **Local Review:** The prompts are sent back to the developer's IDE for their consideration.
5. **Optional Actions:** Developers can optionally: 
    - Create new JIRA issues directly from the IDE based on the review prompts.
    - Generate new issues in a GitLab repository.

**Key Components:**

* **VS Code Extension/CLI:** Tools facilitating the interaction with Vertex AI and potential integrations with JIRA and GitLab.
* **Vertex AI (Gemini Pro):**  Google Cloud's generative AI service responsible for understanding the code and generating meaningful review prompts.
* **Google Cloud Secret Manager:** Securely stores API keys and access tokens required to authenticate and interact with Google Cloud services.
* **JIRA/GitLab (Optional):** Issue tracking and project management tools that can be integrated for a streamlined workflow.

**Benefits:**

* **Automated Review Assistance:**  Leveraging AI to generate review prompts saves time and improves the consistency and quality of code reviews. 
* **Local Development:** The process empowers developers to conduct reviews locally within their familiar IDE.
* **Integration Options:** The flexibility to integrate with project management tools like JIRA and GitLab streamlines workflow and issue tracking.

画像の差分分析:

devai review imgdiff \
  -c ~/genai-for-developers/images/devai-api.png \
  -t ~/genai-for-developers/images/devai-api-slack.png  

出力:

The following UI elements are missing in the "AFTER UPGRADE STATE" image compared to the "BEFORE UPGRADE STATE" image:

1. **Slack:** The entire Slack element, including the icon, "Team channel" label, and the arrow indicating interaction, is absent in the AFTER UPGRADE image. 
2. **Storage Bucket:**  The "Storage Bucket" element with its icon and "PDFs" label is missing in the AFTER UPGRADE image. 
3. **"GenAI Agents" label in Vertex AI block:** The BEFORE UPGRADE image has "Vertex AI Agents" and "GenAI Agent" labels within the Vertex AI block, while the AFTER UPGRADE image only has "Vertex AI."
4. **"Open JIRA Issue" and "Team Project" labels:** In the BEFORE UPGRADE image, these labels are connected to the JIRA block with an arrow. These are missing in the AFTER UPGRADE image.

**Decision Explanation:**

The analysis is based on a direct visual comparison of the two provided images, noting the presence and absence of specific UI elements and their associated labels. The elements listed above are present in the BEFORE UPGRADE image but absent in the AFTER UPGRADE image.

ドキュメント生成コマンド:

devai document readme -c ~/genai-for-developers/sample-app/src/main/

出力:

# Bank of Anthos - Balance Reader Service

## Description

The Balance Reader service is a component of the Bank of Anthos sample application. It provides a REST endpoint for retrieving the current balance of a user account. This service demonstrates key concepts for building microservices with Spring Boot and deploying them to a Kubernetes cluster.

## Features
...

Cloud Shell エディタで、利用可能な devai cli コマンドを確認します。

cloudshell edit ~/genai-for-developers/devai-cli/README.md

または、GitHub リポジトリの README.md をご覧ください。

15. 完了

お疲れさまでした。これでこの Codelab は終了です。

学習した内容

  • GitHub で GenAI コードレビュー自動化の手順を追加する
  • devai cli をローカルで実行する

次のステップ:

  • 今後もハンズオン セッションを開催する予定です。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

©2024 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。