Gemini Code Assist のコード カスタマイズを構成して使用する

このドキュメントでは、Gemini Code Assist をプライベート コード リポジトリに接続して、Gemini Code Assist のコードカスタマイズを設定する方法について説明します。この機能を使用すると、組織の内部ライブラリ、限定公開 API、コーディング スタイルに基づくコード推奨事項を受け取ることができます。

始める前に

接続するプライベート リポジトリを選択する

ベスト プラクティスとして、次のリポジトリを接続することをおすすめします。

  • デベロッパーに記述してほしいコードと類似したスタイルや構造のコードがある。
  • 現在のコードベースから呼び出す非公開のライブラリまたは API がある。

(省略可)インデックスに登録しないファイルを選択する

デフォルトでは、コード カスタマイズは、指定されたリポジトリ内のすべてのサポートされているコードファイルをインデックスに登録します。

多くの場合、インデックスに登録しない特定のファイルやサブツリーがあります。次に例を示します。

  • 組織内でのアクセスが制限されている極めて機密性の高い情報
  • 古いコードまたは非推奨のコード
  • 自動生成コードまたは一時コード

インデックスに登録したくないコードが公開されないようにするには、ブランチ パターンを使用してインデックスへのアクセスを制御し、main などの安定したブランチを使用します。

また、.aiexclude ファイルを作成して、インデックスからファイルを除外することもできます。

インデックスを作成する

コードのカスタマイズでは、インデックスを使用してリポジトリを分析および解析し、コード生成の候補と検索を迅速に行います。

gcloud

インデックスを作成するには、シェル環境で gemini code-repository-indexes create コマンドを使用します。

gcloud gemini code-repository-indexes create INDEX_NAME \
    --project=PROJECT_ID \
    --location=REGION

Terraform

resource "google_gemini_code_repository_index" "example" {
  provider = google-beta
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
}

次のように置き換えます。

  • INDEX_NAME: インデックス名。重要: インデックス名を記録します。このドキュメントのいくつかのステップで必要になります。
  • PROJECT_ID: Google Cloud プロジェクト ID
  • REGION: このページの始める前にで説明されているように、Google Cloud プロジェクトの Developer Connect で構成したサポート対象のリージョン。

インデックスの作成は通常 30 分で完了しますが、最長で 1 時間ほどかかることがあります。

Google では、コード リポジトリ インデックスの数をプロジェクトと組織ごとに 1 つに制限しています。

リポジトリ グループを使用してインデックスへのアクセスを制御する

リポジトリ グループは、リポジトリとそのブランチパターンを含むインデックス構成のコンテナです。リポジトリ グループは、きめ細かい IAM 制御を目的としており、デベロッパーは cloudaicompanion.repositoryGroups.use 権限を持つグループのインデックス登録データにアクセスできます。

リポジトリ グループには、同じプロジェクトとロケーションの Developer Connect リポジトリ(リンク)が含まれます。

管理者は次の操作を行います。

  • Code Repository Index リソースを作成します。
  • 同じプロジェクトとロケーションで、新しい Developer Connect 接続を構成します。
  • 接続で Git リポジトリをリンクします。
  • リンクのリソース名を取得し、リンクごとにインデックスに登録するブランチ パターンを選択して、1 つ以上のリポジトリ グループに配置します。

gcloud

リポジトリ グループを作成するには、シェル環境で gemini code-repository-indexes repository-groups create コマンドを使用します。

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories='[{"resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "BRANCH_NAMES"}]'

Terraform

resource "google_gemini_repository_group" "example" {
  provider = google-beta
  location = "REGION"
  code_repository_index = "INDEX_NAME"
  repository_group_id = "REPOSITORY_GROUP"
  repositories {
    resource = "REPOSITORY_RESOURCE_NAME"
    branch_pattern = "BRANCH_NAMES"
  }
}

次のように置き換えます。

  • REPOSITORY_GROUP: リポジトリ グループの名前(default など)。
  • PROJECT_ID: Google Cloud プロジェクト ID
  • REGION: このページの始める前にで説明されているように、Google Cloud プロジェクトの Developer Connect で構成したサポート対象のリージョン。
  • INDEX_NAME: インデックスを作成する前の手順で作成したインデックスの名前。
  • REPOSITORY_RESOURCE_NAME: Developer Connect 接続内のリポジトリの名前。リポジトリの名前を確認するには、Google Cloud コンソールの Developer Connect ページに移動し、[リポジトリ] タブで、テーブルの [接続] 列の下にある接続 ID を探します。リソース名をコピーするには、more_vert メニューをクリックしてオプションを表示し、[リソースパスをコピー] を選択します。
  • BRANCH_NAMES: インデックスに登録するブランチの名前(main|dev など)。

JSON(または YAML)ファイルで定義されたリポジトリを使用して、リポジトリ グループを作成することもできます。形式は次のとおりです。

JSON

[
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "main|dev"
  },
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "dev"
  }
]

YAML

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: main|dev

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: dev

JSON ファイルまたは YAML ファイルに基づいてリポジトリ グループを作成するには、シェル環境で gemini code-repository-indexes repository-groups create コマンドを使用します。

JSON

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.json

YAML

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.yaml

プロジェクトのリポジトリ グループに IAM ロールを付与する

インデックス内のリポジトリからの候補のみが提示されます。各リポジトリは 1 つ以上のリポジトリ グループに属します。候補にアクセスするには、次のいずれかの方法で、必要な cloudaicompanion.repositoryGroups.user IAM 権限を含む Cloud AI Companion リポジトリ グループ ユーザーの IAM ロール(roles/cloudaicompanion.repositoryGroupsUser)をリポジトリ グループに付与する必要があります。

  • プリンシパルにインデックス全体へのアクセス権を付与します。
  • プリンシパルにインデックスのサブセットへのアクセス権を付与します。

プリンシパルにインデックス全体へのアクセス権を付与する

  1. プロジェクトの IAM ポリシーをバインドするには、シェル環境で projects add-iam-policy-binding コマンドを使用します。

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

    次のように置き換えます。

    • PROJECT_ID: リポジトリ グループが配置されているプロジェクト ID。
    • PRINCIPAL: アクセスが必要なプリンシパルのメールアドレス(例: 個人の場合は user:test-user@gmail.com、グループの場合は group:admins@example.com)。

    詳細については、gcloud projects set-iam-policy をご覧ください。

  2. 条件を指定するよう求められたら、「None」と入力します。

プリンシパルにインデックスのサブセットへのアクセス権を付与する

複数のリポジトリ グループを作成し、異なる IAM プリンシパルに IAM ロールを割り当てることができます。

gcloud

IAM ポリシーを設定するには、IAM ポリシーの JSON または YAML ファイルを準備する必要があります。このファイルには、IAM グループと割り当てられたロールのリストが含まれます。次に例を示します。

bindings:
- members:
  - group:my-group@example.com
  - user:test-user@example.com
  role: roles/cloudaicompanion.repositoryGroupsUser

詳細と構文については、許可ポリシーについてをご覧ください。

IAM ポリシーを設定するには、シェル環境で gemini code-repository-indexes repository-groups set-iam-policy コマンドを使用します。

gcloud gemini code-repository-indexes repository-groups set-iam-policy GROUP_NAMEPOLICY_FILE \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME

次のように置き換えます。

Terraform

data "google_iam_policy" "foo" {
  provider = google-beta
  binding {
    role = "roles/cloudaicompanion.repositoryGroupsUser"
    members = ["test-user@example.com"]
  }
}

resource "google_gemini_repository_group_iam_policy" "foo" {
  provider = google-beta
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  policy_data = data.google_iam_policy.foo.policy_data
}

data "google_gemini_repository_group_iam_policy" "foo" {
  provider = google-beta
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  depends_on = [
    google_gemini_repository_group_iam_policy.foo
  ]
}

バインディングを作成することもできます。

resource "google_gemini_repository_group_iam_binding" "foo" {
  provider = google-beta
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  role = "roles/cloudaicompanion.repositoryGroupsUser"
  members = ["test-user@example.com"]
}

次のように置き換えます。

インデックスのステータスを確認する

インデックスに登録するリポジトリの数とサイズによっては、コンテンツのインデックス登録に最大 24 時間かかることがあります。大規模なリポジトリの場合、インデックスの作成に時間がかかることがあります。インデックス処理は 24 時間に 1 回行われ、リポジトリに加えられた変更がすべて取り込まれます。

  1. indexing ログを検索します。詳細については、Logging のクエリ言語をご覧ください。

    コンソール

    1. Google Cloud コンソールで、ログ エクスプローラに移動します。

      [ログ エクスプローラ] に移動

    2. ログ名フィルタを使用して、indexing ログを表示します。

    gcloud

    インデックス ログを検索するには、シェル環境で logging read コマンドを使用します。

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing""
    

    PROJECT_ID は、リポジトリ グループが配置されているプロジェクト ID に置き換えます。

    たとえば、indexing ログのエラーを表示するには、次のコマンドを実行します。

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. 次のような、関連するインデックス登録ステータスを確認します。

    • リポジトリのインデックス登録の開始(例: Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.
    • 個々のリポジトリのインデックス登録の終了 - 例:
      • 成功: Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • 失敗: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • リポジトリのインデックス登録の終了(例:
      • 成功: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • 失敗: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 1. Repositories that were not successfully fetched will be retried in the next run.

    インデックス ステータスでは、REPOSITORY_NAME は確認するリポジトリです。

  3. 次のような関連するインデックス作成エラーを確認します。

    • リポジトリを取得できませんでした。
    • リポジトリ ファイルを一覧表示できませんでした。
    • インデックスからリポジトリ情報を取得できませんでした。
    • インデックスからファイルを取得できませんでした。
    • 内部エラー。

コードのカスタマイズを使用する

コードのカスタマイズを設定すると、コード補完とコード生成の候補が表示されます。これは、インデックスに登録したプライベート コードに基づく場合や、コードベース全体の認識結果に基づく場合があります。

コードのカスタマイズをオフにする

  1. シェル環境で現在のインデックスのすべてのリポジトリ グループを一覧表示するには、gemini code-repository-indexes repository-groups list コマンドを使用します。

    gcloud gemini code-repository-indexes repository-groups list --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME --uri
    

    次のように置き換えます。

    • REGION: このページの始める前にで説明されているように、Google Cloud プロジェクトの Developer Connect で構成したサポートされているリージョン。
    • PROJECT_ID: Google Cloud プロジェクト ID
    • INDEX_NAME: インデックスを作成する前の手順で作成したインデックスの名前。
  2. 現在のインデックスからリポジトリ グループを削除するには、gemini code-repository-indexes repository-groups delete コマンドを使用します。

    gcloud gemini code-repository-indexes repository-groups delete REPOSITORY_GROUP \
        --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME
    
  3. インデックスからすべてのリポジトリ グループを削除するまで、リポジトリ グループごとに手順 3 を繰り返します。

  4. 省略可: インデックスを削除するには、シェル環境で gemini code-repository-indexes delete コマンドを使用します。

    gcloud gemini code-repository-indexes delete INDEX_NAME \
        --location=REGION \
        --project=PROJECT_ID
    

次のステップ