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

1. 始める前に

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

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

前提条件

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

学習内容

  • Gemini Code Assist Enterprise でコードのカスタマイズを活用する方法
  • コード カスタマイズでチームの時間を節約できるユースケースの 1 つ

必要なもの

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

2. コンテキスト

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

  1. Gemini が有効になっている Google Cloud プロジェクトへのアクセス
  2. Gemini の回答に反映される非公開リポジトリ。

Gemini を有効にする

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

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 ファイルは、否定(パターンの前に ! を付ける)をサポートしていません。

このことを念頭に置いて、チームが検討から除外したいファイルタイプやディレクトリを検討し、それぞれを別の行にリストアップしてみてください。

#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 ロールの設定などのサポートも提供しています。