Gemini Code Assist Enterprise によるコードのカスタマイズ

1. 始める前に

この Codelab では、Gemini Code Assist を準備して、プライベート リポジトリに合わせてコードのカスタマイズ候補を提供する方法について説明します。これにより、Code Assist の結果が大幅に有用になります。特に、類似の作業を頻繁に繰り返すチームでは、特定の規則が定められている場合が該当します。この機能で Gemini にプライベート コードベースのインデックス作成を許可しても、Gemini がプライベート コードを広範にトレーニングできるわけではありません。

また、.aiexclude ファイルを使用して、機密性の高いファイルや無関係なファイルをコード カスタマイズの対象から除外する方法についても説明します。

前提条件

  • Gemini Code Assist の基本的な知識と、Gemini Code Assist が有効になっているプロジェクトへのアクセス権
  • コードのカスタマイズに使用するサポートされているコーディング言語の知識
  • us-central1 または europe-west1 にリソースを作成できる。コードのカスタマイズには、これらのロケーションでの Developer Connect 接続が必要になるため。
  • 最新の認証済み Google Cloud CLI

学習内容

  • Gemini Code Assist Enterprise でコード カスタマイズを使用する方法
  • コードのカスタマイズによってチームの時間を節約できるユースケースの例

必要なもの

  • Gemini Code Assist が有効になっている Google Cloud プロジェクト
  • カスタマイズ リクエストのインデックスに登録する非公開リポジトリ
  • カスタマイズ リクエストのコードにインデックスを付ける時間です。これには、最長で 24 時間ほどかかることがあります
  • Gemini Code Assist がインストールされている IDE

2. コンテキスト

コードのカスタマイズを試すには、次の 2 つが必要です。

  1. Gemini が有効になっている Google Cloud プロジェクトへのアクセス
  2. 限定公開リポジトリを作成し、Gemini の回答を作成します。

Gemini の有効化

Gemini がインデックスに登録する最適なリポジトリには、組織全体で頻繁に再利用されるコードが含まれています。この Codelab に提供されているサンプル リポジトリには、標準の Spring Boot ウェブサービスと、この条件を満たすデータ転送オブジェクトのフォルダが含まれています。プレゼンテーション レイヤに転送されるときに、データベース内の各エンティティを記述する同様のクラスが作成されるためです。

3. (省略可)リポジトリの設定

独自のプライベート リポジトリではなくサンプル リポジトリを使用する場合は、任意のターミナル エディタまたは Cloud Shell で次の手順を実施します。まず、コードのカスタマイズを実際に確認できるように、限定公開リポジトリを作成します。

mkdir customization-starter
cd customization-starter
curl https://start.spring.io/starter.zip -d dependencies=web,lombok \
           -d javaVersion=21 \
           -d type=maven-project \
           -d bootVersion=3.3.4 -o cc-starter.zip
unzip cc-starter.zip
rm cc-starter.zip
pushd src/main/java/com/example/demo
mkdir dtos
touch dtos/LedgerDTO.java

LedgerDTO ファイルに以下を追加します。

package com.example.demo.dtos;

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
public class LedgerEntryDto {
    private Long id;
    private String accountName;
    private double amount;
    private String transactionType; 
    private String description;
    private java.util.Date transactionDate;
}

これは、このコードベースへの他のコントリビューターが使用すると予想されるアクセサが、コードのカスタマイズを有効にして正確に生成されることを実証するのに十分です。

新しいリポジトリを作成し、非公開にします。以下の手順に沿って、スターターを新しいリポジトリに push します。

popd
gh auth login
git init
git add .
git commit -m "code customization starter"
git remote add origin git@github.com:<YOUR_GITHUB_ID>/customization-starter.git
git branch -M main
git push -u origin main

4. ファイルの除外

Gemini に限定公開リポジトリへのアクセス権を付与する前に、チームがインデックスに登録したくない無関係なファイルや機密ファイルを除外する方法を理解しておくことが重要です。.aiexclude ファイルを使用してこれを行います。これは .gitignore に似ていますが、次のような重要な違いがあります。

  • 空の .aiexclude ファイルは、そのディレクトリとすべてのサブディレクトリ内のすべてのファイルをブロックします。
    • これは、**/* を含むファイルと同じです。
  • .aiexclude ファイルは否定(パターンに ! を接頭辞として追加)をサポートしていません。

これを念頭に、チームが除外したいファイルタイプやディレクトリを検討し、それぞれを 1 行に 1 つずつリストします。

#Block all files with .key extensions
*.key

#Block all files under sensitive/dir
my/sensitive/dir/

#Block all .key files under sensitive/dir
my/sensitive/dir/ /.key

5. Developer Connect を構成する

Developer Connect は、GitHub または GitLab のプライベート コード リポジトリへの接続リンクを容易にするサービスです。これは、Gemini Code Assist がプライベート リポジトリに安全に接続し、回答の改善に使用するインデックスを作成するためのメカニズムです。

次の 2 つのコンセプトは、Developer Connect がコードへのアクセスを安全に提供する仕組みを理解するうえで役立ちます。

接続

  • Google とサードパーティのソースコード管理プラットフォーム間のブリッジを表します。

リンク

  • 接続されたソースコード管理プラットフォーム内で選択した個々のソースコード リポジトリとの関連付けを表します。

これらのコンセプトを念頭に置いて、まず [Developer Connect] ページに移動して、プロジェクトで API を有効にします。

Developer Connect を有効にする

次に、適切な手順に沿って、GitHub または GitLab接続リンクを作成します。ウィザードのプロセス中に両方のリソースが作成されます。

接続とリンクの作成

この手順を繰り返して、Gemini のコードカスタマイズ機能で回答に含めるリポジトリごとにリンクを作成します。複数のリポジトリが同じプラットフォームから取得される場合は、既存の接続を再利用できます。

6. インデックスを作成して接続する

リポジトリをすばやく解析して分析するため、コードのカスタマイズではインデックスを使用します。使用する INDEX_NAME をメモしておきます。この名前は次のステップで必要になります。

インデックスを作成するには、次のコマンドを実行します。

gcloud gemini code-repository-indexes create <INDEX_NAME> \
    --project=<YOUR_PROJECT_ID> \
    --location=<REGION>

Invalid choice: ... エラーが発生した場合は、次のコマンドを実行して Google Cloud CLI が最新の状態であることを確認します。

gcloud components update

次に、リポジトリ グループを作成して、インデックスへのアクセスを許可します。

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories='[{"resource": "projects/PROJECT_ID/locations/REGION/connections/INDEX_CONNECTION/gitRepositoryLinks/REPOSITORY", "branch_pattern": "BRANCH_NAMES"}]'

次の値を置き換えます。

  • REPOSITORY_GROUP: 作成するリポジトリ グループの名前
  • PROJECT_ID: Google Cloud プロジェクト ID。
  • INDEX_NAME: インデックスを作成するために前の手順で定義したインデックスの名前。
  • REGION: ドキュメントのリストに記載されているサポート対象リージョン。Google Cloud プロジェクトの Developer Connect で構成します。
  • INDEX_CONNECTION: 前の手順でインデックスを作成するために作成したインデックスの接続。
  • REPOSITORY: インデックスに登録するリポジトリ。少なくとも 1 つのリポジトリを指定する必要があります。必要に応じて複数のリポジトリを指定することもできます。
  • BRANCH_NAMES: インデックスを付けるブランチの名前(main や dev など)。

インデックスに登録するリポジトリの数とサイズによっては、コンテンツのインデックス登録に最長で 24 時間かかることがあります。インデックス処理は 24 時間に 1 回行われ、リポジトリに加えられた変更がすべて取り込まれます。インデックス生成のステータスを確認するには、こちらの手順を参照してください。

検索のインデックス登録ステータス

最後に、目的のプリンシパルにグループへのアクセス権を付与します。

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='PRINCIPAL' \
    --role='roles/cloudaicompanion.repositoryGroupsUser'

7. カスタマイズされたコードを生成する

Gemini が限定公開リポジトリのコードにアクセスできるようになったので、コード補完リクエストに関連スニペットが表示されるはずです。サンプル リポジトリで DTO フォルダに移動し、新しいオブジェクトを表す新しいクラスを作成すると、入力するときに想定されるアノテーションが表示されます。

生成されたサンプル

8. まとめ

これでこの Codelab は終了です。Gemini Code Assist のコードのカスタマイズ機能の使い方を学びました。回答をチーム固有のプライベート コードベースに合わせて調整できるため、各プロンプトとコード補完はチームのデベロッパーにとってより有益なものになります。

以下に、IAM ロールの設定などの詳細とサポートに関するドキュメントと資料を示します。