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

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

始める前に

  • Gemini Code Assist のコードカスタマイズを利用するには、営業担当者にお問い合わせください。
  • プロジェクトに変更を加えるには、Google Cloud 管理者アカウントがあることを確認します。
  • Gemini Code Assist の設定
  • エンドユーザー アカウントを作成または構成します。Gemini Code Assist を使用している組織内のすべてのデベロッパーには、Google Cloud プロジェクトにアクセスする権限を持つ Google Cloud のユーザー ID が必要です。詳細については、Google Cloud コンソールでロールを付与するをご覧ください。各ユーザーに次のロールがあることを確認します。
  • Developer Connect を構成し、GitHub.com または GitLab.com リポジトリに接続します。

    また、コードのカスタマイズは、次のロケーション(リージョン)のデベロッパー コネクト接続でのみサポートされます。

    • us-central1
    • europe-west1
    • asia-southeast1
  • シェル環境で gcloud components update コマンドを実行して、インストールされているすべての Google Cloud CLI コンポーネントが最新バージョンに更新されていることを確認します。

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

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

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

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

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

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

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

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

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

インデックスを作成する

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

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. インデックスを作成するには、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 時間ほどかかることがあります。

Google では、コード リポジトリ インデックスの数をプロジェクトと組織ごとに 1 つに制限しています。コード リポジトリのインデックスがさらに必要な場合は、割り当ての増加をリクエストできます。

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

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. リポジトリ グループを作成するには、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 など)。
    • 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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. プロジェクトの 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 をご覧ください。

  3. 条件を指定するよう求められたら、「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

以下を置き換えます。

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

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

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

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

  2. ログ名フィルタを使用して indexing ログを表示するか、次のコマンドを使用してインデックス ログを検索します。

    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"
    

    詳細については、Logging のクエリ言語をご覧ください。

  3. 次のような関連するインデックス登録ステータスを確認します。

    • リポジトリのインデックス登録の開始(例: 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 は確認するリポジトリです。

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

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

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

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

コードのカスタマイズを無効にする

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. 現在のインデックスのすべてのリポジトリ グループを一覧表示するには、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: インデックスを作成する前の手順で作成したインデックスの名前。
  3. 現在のインデックスからリポジトリ グループを削除するには、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
    
  4. インデックスからすべてのリポジトリ グループを削除するまで、リポジトリ グループごとに手順 3 を繰り返します。

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

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

次のステップ