このドキュメントでは、Gemini Code Assist をプライベート コード リポジトリに接続して、Google Cloud コンソール、Google Cloud CLI、または Terraform で Gemini Code Assist のコード カスタマイズを設定する方法について説明します。Gemini Code Assist のコード カスタマイズ機能を使用すると、組織の内部ライブラリ、非公開 API、コーディング スタイルに基づくコードの推奨事項を受け取ることができます。
始める前に
- Enterprise サブスクリプションで Gemini Code Assist を設定する。
- サブスクリプションを所有するプロジェクトに対して、次の Identity and Access Management ロールがあることを確認します。 - コード リポジトリ インデックス管理者(roles/cloudaicompanion.codeRepositoryIndexesAdmin)
- Gemini for Google Cloud ユーザー(roles/cloudaicompanion.user)
 
- コード リポジトリ インデックス管理者(
- ユーザー アカウントを作成または構成します。Gemini Code Assist を使用している組織内のすべてのデベロッパーには、Google Cloud プロジェクトにアクセスする権限を持つ Google Cloud のユーザー ID が必要です。詳細については、Google Cloud コンソールでロールを付与するをご覧ください。各ユーザーに次のロールがあることを確認します。 
- コード カスタマイズ機能は、Developer Connect を使用してプライベート リポジトリにアクセスし、インデックスを付けます。Developer Connect リポジトリ接続が配置されている Developer Connect リージョンが、コード カスタマイズでサポートされているロケーションであることを確認します。Developer Connect 接続がサポートされていないリージョンにある場合、コード カスタマイズ機能は使用できません。サポートされているリージョンの一覧については、コードのカスタマイズの制限事項をご覧ください。 
インデックス登録するリポジトリを選択する
ベスト プラクティスとして、次の特性を持つリポジトリにインデックスを付けることをおすすめします。
- デベロッパーに記述を指示するコードと類似しているスタイルまたは構造のコード。
- 現在のコードベースから呼び出す非公開ライブラリまたは API。
(省略可)インデックスを付けないファイルを選択する
デフォルトでは、コード カスタマイズは、指定したリポジトリ内のサポートされているコードファイルをすべてインデックスに登録します。
インデックスに登録しないコードが公開されないようにするには、ブランチ パターンを使用してインデックスへのアクセスを制御し、main などの安定したブランチを使用します。
また、.aiexclude ファイルを作成して、インデックスからファイルを除外することもできます。
Gemini Code Assist のコード カスタマイズを構成する
次のオプションのいずれかを選択します。
コンソール
- Google Cloud コンソールで、[コード カスタマイズ] ページに移動します。 - Gemini Code Assist のコード カスタマイズに移動します - [Gemini Code Assist のコード カスタマイズ] ページが読み込まれます。 
- インデックスを作成します。コード カスタマイズでは、インデックスを使用してリポジトリを分析および解析し、コード生成の候補と検索を迅速に行います。 - [作成] をクリックして、インデックスの詳細を構成します。 - Cloud プロジェクトの Developer Connect で構成されているリージョンを選択します。
- インデックスの名前を入力します。インデックス名をメモします。このドキュメントのいくつかの手順で必要になります。
 
- [作成] をクリックします。 
 - インデックスの作成は通常 30 分で完了しますが、最長で 1 時間ほどかかることがあります。インデックス登録が完了すると、Google Cloud コンソールに通知が届きます。 - コード リポジトリのインデックスの数は、プロジェクトごとに 1 つ、組織ごとに 1 つに制限されています。 
- リポジトリ グループを使用してインデックスへのアクセスを制御する - リポジトリ グループは、リポジトリとそのブランチ パターンを含むインデックス構成のコンテナです。リポジトリ グループは、きめ細かい IAM 制御を目的としており、デベロッパーは - cloudaicompanion.repositoryGroups.use権限を持つグループのインデックス登録されたデータにアクセスできます。- リポジトリ グループには、同じプロジェクトとロケーションの Developer Connect リポジトリまたはリンクが含まれます。 
- [Gemini Code Assist のコード カスタマイズ] ページで、[リポジトリを追加] をクリックし、[ソース リポジトリを追加] を選択します。 - 前の手順でインデックスの作成用に構成したリージョンの Developer Connect にある既存のリポジトリのリストが表示されます。 - リポジトリ グループに新しいリポジトリを追加する必要がある場合は、[リポジトリをリンク] をクリックして、Google Cloud コンソールの手順に沿って操作します。 - また、1 つ以上のリポジトリを選択して編集し、新しいブランチを追加することもできます。 
- 新しいリポジトリを追加するリポジトリ グループを選択します。または、[新しいリポジトリ グループを作成] をクリックして、新しいリポジトリ グループを作成して構成します。 
- 選択したリポジトリのインデックス登録を開始するには、[インデックス登録] をクリックします。 - インデックス作成時間は、リポジトリのサイズによって異なります。 
CLI
- Developer Connect を構成し、リポジトリに接続していることを確認します。
- シェル環境で - gcloud components updateコマンドを実行して、gcloud のインストール済みコンポーネントがすべて最新バージョンに更新されていることを確認します。この手順では、gcloud をインストールして初期化するか、Cloud Shell エディタを使用します。- gcloud components update
- インデックスを作成します。コード カスタマイズでは、インデックスを使用してリポジトリを分析および解析し、コード生成の候補と検索を迅速に行います。 - インデックスを作成するには、シェル環境で - 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: Cloud プロジェクトの Developer Connect で構成されているリージョン。コマンドを成功させるには、サポートされているリージョンを指定する必要があります。
 - インデックスの作成は通常 30 分で完了しますが、最長で 1 時間ほどかかることがあります。 - コード リポジトリのインデックスの数は、プロジェクトごとに 1 つ、組織ごとに 1 つに制限されています。 
 
- リポジトリ グループを使用してインデックスへのアクセスを制御するリポジトリ グループは、リポジトリとそのブランチ パターンを含むインデックス構成のコンテナです。リポジトリ グループは、きめ細かい IAM 制御を目的としており、デベロッパーは - cloudaicompanion.repositoryGroups.use権限を持つグループのインデックス登録されたデータにアクセスできます。- リポジトリ グループには、同じプロジェクトとロケーションの Developer Connect リポジトリまたはリンクが含まれます。 - 管理者は次の操作を行います。 - Code Repository Index リソースを作成します。
- 同じプロジェクトとロケーションで、新しい 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 の使用の詳細については、顧客管理の暗号鍵でデータを暗号化するをご覧ください。 
- プロジェクトのリポジトリ グループに IAM ロールを付与する - インデックス内のリポジトリからの候補のみが提示されます。各リポジトリは 1 つ以上のリポジトリ グループに属します。候補にアクセスするには、次のいずれかの方法で、必要な - cloudaicompanion.repositoryGroups.userIAM 権限を含む Cloud AI コンパニオン リポジトリ グループ ユーザーの IAM ロール(- roles/cloudaicompanion.repositoryGroupsUser)をリポジトリ グループに付与する必要があります。- プリンシパルにインデックス全体へのアクセス権を付与する。
- プリンシパルにインデックスのサブセットへのアクセス権を付与する。 
 - インデックス全体- プロジェクトの 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をご覧ください。
- 条件を指定するよう求められたら、「 - 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- 次のように置き換えます。 - GROUP_NAME: 前の手順で作成したリポジトリ グループ名。リポジトリ グループを使用してインデックスへのアクセスを制御します。
- POLICY_FILE: IAM ポリシー。- 詳細については、 - gcloud gemini code-repository-indexes repository-groups set-iam-policyをご覧ください。
 
Terraform
- Developer Connect を構成し、リポジトリに接続していることを確認します。 
- インデックスを作成します。コード カスタマイズでは、インデックスを使用してリポジトリを分析および解析し、コード生成の候補と検索を迅速に行います。 - resource "google_gemini_code_repository_index" "example" { location = "REGION" code_repository_index_id = "INDEX_NAME" }- 次のように置き換えます。 - INDEX_NAME: インデックス名。重要: インデックス名をメモします。このドキュメントのいくつかの手順で必要になります。
- PROJECT_ID: Google Cloud プロジェクト ID。
- REGION: Cloud プロジェクトの Developer Connect で構成されているリージョン。コマンドを成功させるには、サポートされているリージョンを指定する必要があります。
 - インデックスの作成は通常 30 分で完了しますが、最長で 1 時間ほどかかることがあります。 - コード リポジトリのインデックスの数は、プロジェクトごとに 1 つ、組織ごとに 1 つに制限されています。 
- リポジトリ グループを使用してインデックスへのアクセスを制御するリポジトリ グループは、リポジトリとそのブランチ パターンを含むインデックス構成のコンテナです。リポジトリ グループは、きめ細かい 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 の使用の詳細については、顧客管理の暗号鍵でデータを暗号化するをご覧ください。 
- プロジェクトのリポジトリ グループに IAM ロールを付与する - インデックス内のリポジトリからの候補のみが提示されます。各リポジトリは 1 つ以上のリポジトリ グループに属します。候補にアクセスするには、次のいずれかの方法で、必要な - cloudaicompanion.repositoryGroups.userIAM 権限を含む Cloud AI コンパニオン リポジトリ グループ ユーザーの IAM ロール(- roles/cloudaicompanion.repositoryGroupsUser)をリポジトリ グループに付与する必要があります。- プリンシパルにインデックス全体へのアクセス権を付与する。
- プリンシパルにインデックスのサブセットへのアクセス権を付与する。 
 - インデックス全体- プロジェクトの 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をご覧ください。
 
- 条件を指定するよう求められたら、「 - 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 回行われ、リポジトリで行われた変更がすべて取得されます。
- indexingログを検索します。詳細については、Logging のクエリ言語をご覧ください。- コンソール- Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。 
- ログ名フィルタを使用して、 - 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"
- 以下のような、関連するインデックス登録ステータスを確認します。 - リポジトリのインデックス登録の開始(例: 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は確認するリポジトリです。
- リポジトリのインデックス登録の開始(例: 
- 以下のような、関連するインデックス作成エラーを確認します。 - リポジトリを取得できませんでした。
- リポジトリ ファイルを一覧表示できませんでした。
- インデックスからリポジトリ情報を取得できませんでした。
- インデックスからファイルを取得できませんでした。
- 内部エラーが発生しました。
 
コード カスタマイズを使用する
コード カスタマイズを設定すると、コード補完とコード生成の候補が表示されます。これらの候補は、インデックスに登録したプライベート コードに基づく場合があります。また、コードベース全体の認識結果も使用されます。
1 つ以上のリソースがインデックスに登録されているリポジトリ グループに追加されたデベロッパーには、コード カスタマイズが有効になったことを知らせる通知が IDE に届きます。コード カスタマイズのステータスを確認するには、右下の spark Gemini シンボルをクリックし、検索バーで次のいずれかのコード カスタマイズ ステータスを探します。
- これで完了です。コードのカスタマイズが有効になっており、構成されている。
- 利用不可。デベロッパーにリポジトリ グループへのアクセス権がないか、ユーザーがアクセスできるリポジトリ グループが空です。
- Unset。コード カスタマイズが有効になっていないか、管理者が構成していない。
コード カスタマイズの使用とベスト プラクティスの詳細については、コード カスタマイズを使用するをご覧ください。
コード カスタマイズをオフにする
次のオプションのいずれかを選択します。
コンソール
- Google Cloud コンソールで、[Gemini プロダクト] ページに移動します。 - [Gemini プロダクト] ページが読み込まれます。 
- ナビゲーション メニューで [コード カスタマイズ] をクリックします。 - [コード カスタマイズ] ページが読み込まれます。 
- インデックスを削除するには、[削除] をクリックします。 - 警告メッセージが表示されます。続行してインデックスを削除する場合は、インデックス名を入力して [削除] をクリックします。 
CLI
- 現在のインデックスのすべてのリポジトリ グループを一覧表示するには、シェル環境で - 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: Cloud プロジェクトの Developer Connect で構成されているリージョン。コマンドを成功させるには、サポートされているリージョンを指定する必要があります。
- PROJECT_ID: Google Cloud プロジェクト ID。
- INDEX_NAME: インデックスを作成するために前の手順で作成したインデックスの名前。
 
- 現在のインデックスからリポジトリ グループを削除するには、 - 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
- インデックスからすべてのリポジトリ グループを削除するまで、リポジトリ グループごとに上記の手順を繰り返します。 
- 省略可: インデックスを削除するには、シェル環境で - gemini code-repository-indexes deleteコマンドを使用します。- gcloud gemini code-repository-indexes delete INDEX_NAME \ --location=REGION \ --project=PROJECT_ID
次のステップ
- Gemini Code Assist の使用を開始します。- VS Code、IntelliJ、その他のサポートされている JetBrains IDE: Gemini Code Assist によるコード
- Cloud Shell: Gemini Code Assist を使用したコード
- Cloud Workstations: Gemini Code Assist を使用したコード
 
- コード カスタマイズを使用する方法とベスト プラクティスを学習する。
- 顧客管理の暗号鍵(CMEK)でデータを暗号化する方法を学習する。
- Developer Connect の詳細を確認する。
- Gemini for Google Cloud がデータを使用する方法とタイミングについての説明をご確認ください。