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

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

始める前に

  1. Enterprise サブスクリプションで Gemini Code Assist を設定します。

  2. サブスクリプションを所有するプロジェクトに対して、次の Identity and Access Management(IAM)ロールがあることを確認します。

    • コード リポジトリ インデックス管理者(roles/cloudaicompanion.codeRepositoryIndexesAdmin)
    • Gemini for Google Cloud ユーザー(roles/cloudaicompanion.user)
  3. ユーザー アカウントを作成または構成します。Gemini Code Assist を使用している組織内のすべてのデベロッパーには、 Google Cloud プロジェクトにアクセスする権限を持つGoogle Cloud のユーザー ID が必要です。詳細については、 Google Cloud コンソールでロールを付与するをご覧ください。各ユーザーに次のロールがあることを確認します。

  4. コード カスタマイズ機能は、Developer Connect を使用してプライベート リポジトリにアクセスし、インデックスを付けます。Developer Connect リポジトリ接続が配置されている Developer Connect リージョンが、コード カスタマイズでサポートされているロケーションであることを確認します。Developer Connect 接続がサポートされていないリージョンにある場合、コードのカスタマイズ機能は使用できません。サポートされているリージョンの一覧については、コードのカスタマイズの制限事項をご覧ください。

インデックス登録するリポジトリを選択する

ベスト プラクティスとして、次の特性を持つリポジトリにインデックスを付けることをおすすめします。

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

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

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

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

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

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

次のオプションのいずれかを選択します。

コンソール

  1. Google Cloud コンソールで、[コード カスタマイズ] ページに移動します。

    Gemini Code Assist のコード カスタマイズに移動します

    [Gemini Code Assist のコード カスタマイズ] ページが読み込まれます。

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

    1. [作成] をクリックして、インデックスの詳細を構成します。

      • Google Cloud プロジェクトの Developer Connect で構成されているリージョンを選択します。
      • インデックスの名前を入力します。インデックス名をメモします。このドキュメントのいくつかの手順で必要になります。
    2. [作成] をクリックします。

    インデックスの作成は通常 30 分で完了しますが、最長で 1 時間ほどかかることがあります。インデックス登録が完了すると、 Google Cloud コンソールに通知が届きます。

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

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

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

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

  4. [Gemini Code Assist のコードのカスタマイズ] ページで、[リポジトリを追加] をクリックし、[ソース リポジトリを追加] を選択します。

    前の手順でインデックスの作成用に構成したリージョンの Developer Connect にある既存のリポジトリのリストが表示されます。

    リポジトリ グループに新しいリポジトリを追加する必要がある場合は、[リポジトリをリンク] をクリックして、 Google Cloud コンソールの手順に沿って操作します。

    また、1 つ以上のリポジトリを選択して編集し、新しいブランチを追加することもできます。

  5. 新しいリポジトリを追加するリポジトリ グループを選択します。または、[新しいリポジトリ グループを作成] をクリックして、新しいリポジトリ グループを作成して構成します。

  6. 選択したリポジトリのインデックス登録を開始するには、[インデックス登録] をクリックします。

    インデックス作成時間は、リポジトリのサイズによって異なります。

CLI

  1. Developer Connect を構成し、リポジトリに接続していることを確認します。
  2. シェル環境で gcloud components update コマンドを実行して、gcloud CLI のインストール済みコンポーネントがすべて最新バージョンに更新されていることを確認します。この手順では、gcloud CLI をインストールして初期化するか、Cloud Shell エディタを使用します。

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

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

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

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

      • INDEX_NAME: インデックス名。重要: インデックス名をメモします。このドキュメントのいくつかの手順で必要になります。
      • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
      • REGION: Google Cloud プロジェクトの Developer Connect で構成されているリージョン。 コマンドを成功させるには、サポートされているリージョンを指定する必要があります。

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

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

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

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

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

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

    リポジトリ グループを作成するには、シェル環境で 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"}]'
    

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

    • REPOSITORY_GROUP: リポジトリ グループの名前(default など)。
    • REPOSITORY_RESOURCE_NAME: Developer Connect 接続内のリポジトリの名前。リポジトリの名前を確認するには、 Google Cloud コンソールの [Git リポジトリ ページ] に移動し、[リポジトリ] タブで、テーブルの [接続] 列の下にある接続 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
    

    必要に応じて、Cloud Key Management Service で顧客管理の暗号鍵(CMEK)を使用してデータを暗号化し、制御できます。CMEK の使用の詳細については、顧客管理の暗号鍵でデータを暗号化するをご覧ください。

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

    インデックス内のリポジトリからの候補のみが提示されます。各リポジトリは 1 つ以上のリポジトリ グループに属します。候補にアクセスするには、次のいずれかの方法で、必要な cloudaicompanion.repositoryGroups.user IAM 権限を含む Cloud AI コンパニオン リポジトリ グループ ユーザーの 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'
      

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

      • PRINCIPAL: アクセスが必要なプリンシパルのメールアドレス(例: 個人の場合は user:test-user@gmail.com、グループの場合は group:admins@example.com)。

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

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

    インデックスのサブセット

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

    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

  1. Developer Connect を構成し、リポジトリに接続していることを確認します。

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

    resource "google_gemini_code_repository_index" "example" {
      location = "REGION"
      code_repository_index_id = "INDEX_NAME"
    }
    

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

    • INDEX_NAME: インデックス名。重要: インデックス名をメモします。このドキュメントのいくつかの手順で必要になります。
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • REGION: Google Cloud プロジェクトの Developer Connect で構成されているリージョン。 コマンドを成功させるには、サポートされているリージョンを指定する必要があります。

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

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

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

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

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

    • Code Repository Index リソースを作成します。
    • 同じプロジェクトとロケーションで、新しい Developer Connect 接続を構成します。
    • 接続で Git リポジトリをリンクします。
    • リンクのリソース名を取得し、リンクごとにインデックス登録するブランチ パターンを選択して、1 つ以上のリポジトリ グループに配置します。
    resource "google_gemini_repository_group" "example" {
      location = "REGION"
      code_repository_index = "INDEX_NAME"
      repository_group_id = "REPOSITORY_GROUP"
      repositories {
        resource = "REPOSITORY_RESOURCE_NAME"
        branch_pattern = "BRANCH_NAMES"
      }
    }
    

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

    • REPOSITORY_GROUP: リポジトリ グループの名前(default など)。
    • REPOSITORY_RESOURCE_NAME: Developer Connect 接続内のリポジトリの名前。リポジトリの名前を確認するには、 Google Cloud コンソールの [Git リポジトリ ページ] に移動し、[リポジトリ] タブで、テーブルの [接続] 列の下にある接続 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
    

    必要に応じて、Cloud Key Management Service で顧客管理の暗号鍵(CMEK)を使用してデータを暗号化し、制御できます。CMEK の使用の詳細については、顧客管理の暗号鍵でデータを暗号化するをご覧ください。

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

    インデックス内のリポジトリからの候補のみが提示されます。各リポジトリは 1 つ以上のリポジトリ グループに属します。候補にアクセスするには、次のいずれかの方法で、必要な cloudaicompanion.repositoryGroups.user IAM 権限を含む Cloud AI コンパニオン リポジトリ グループ ユーザーの 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'
      

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

      • PRINCIPAL: アクセスが必要なプリンシパルのメールアドレス(例: 個人の場合は user:test-user@gmail.com、グループの場合は group:admins@example.com)。

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

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

    インデックスのサブセット

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

      data "google_iam_policy" "foo" {
        binding {
          role = "roles/cloudaicompanion.repositoryGroupsUser"
          members = ["test-user@example.com"]
        }
      }
    
      resource "google_gemini_repository_group_iam_policy" "foo" {
        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" {
        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" {
        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"]
      }
    

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

    • GROUP_NAME: 前の手順で作成したリポジトリ グループ名。リポジトリ グループを使用してインデックスへのアクセスを制御します。

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

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

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

    コンソール

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

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

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

    CLI

    indexing ログを検索するには、シェル環境で 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 つ以上のリソースがインデックスに登録されているリポジトリ グループに追加されたデベロッパーには、コード カスタマイズが有効になったことを知らせる通知が IDE に届きます。コードのカスタマイズのステータスを確認するには、デベロッパーは右下の spark Gemini シンボルをクリックし、検索バーで次のいずれかのコードのカスタマイズ ステータスを探します。

  • 設定完了。コードのカスタマイズが有効になっており、構成されています。
  • 使用不可。デベロッパーにリポジトリ グループへのアクセス権がないか、ユーザーがアクセスできるリポジトリ グループが空です。
  • 未設定。コードのカスタマイズが有効になっていないか、管理者によって構成されていません。

コード カスタマイズの使用とベスト プラクティスの詳細については、コード カスタマイズを使用するをご覧ください。

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

次のオプションのいずれかを選択します。

コンソール

  1. Google Cloud コンソールで、[Gemini プロダクト] ページに移動します。

    [Gemini プロダクト] に移動

    [Gemini プロダクト] ページが読み込まれます。

  2. ナビゲーション メニューで [コード カスタマイズ] をクリックします。

    [コード カスタマイズ] ページが読み込まれます。

  3. インデックスを削除するには、[削除] をクリックします。

    警告メッセージが表示されます。続行してインデックスを削除する場合は、インデックス名を入力して [削除] をクリックします。

CLI

  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. インデックスからすべてのリポジトリ グループを削除するまで、リポジトリ グループごとに上記の手順を繰り返します。

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

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

次のステップ