このドキュメントでは、Gemini Code Assist をプライベート コード リポジトリに接続して、API Console、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 のコード カスタマイズを構成する
次のオプションのいずれかを選択します。
コンソール
API コンソールで、[コードのカスタマイズ] ページに移動します。
Gemini Code Assist のコード カスタマイズに移動します
[Gemini Code Assist のコード カスタマイズ] ページが読み込まれます。
インデックスを作成します。コード カスタマイズでは、インデックスを使用してリポジトリを分析および解析し、コード生成の候補と検索を迅速に行います。
[作成] をクリックして、インデックスの詳細を構成します。
- Cloud プロジェクトの Developer Connect で構成されているリージョンを選択します。
- インデックスの名前を入力します。インデックス名をメモします。このドキュメントのいくつかの手順で必要になります。
[作成] をクリックします。
インデックスの作成は通常 30 分で完了しますが、最長で 1 時間ほどかかることがあります。インデックス登録が完了すると、Google API Console に通知が届きます。
コード リポジトリのインデックスの数は、プロジェクトごとに 1 つ、組織ごとに 1 つに制限されています。
リポジトリ グループを使用してインデックスへのアクセスを制御します。
リポジトリ グループは、リポジトリとそのブランチ パターンを含むインデックス構成のコンテナです。リポジトリ グループは、きめ細かい IAM 制御を目的としており、デベロッパーは
cloudaicompanion.repositoryGroups.use
権限を持つグループのインデックスに登録されたデータにアクセスできます。リポジトリ グループには、同じプロジェクトとロケーションの Developer Connect リポジトリまたはリンクが含まれます。
[Gemini Code Assist のコードのカスタマイズ] ページで、[リポジトリを追加] をクリックし、[ソース リポジトリを追加] を選択します。
前の手順でインデックスの作成用に構成したリージョンの Developer Connect にある既存のリポジトリのリストが表示されます。
リポジトリ グループに新しいリポジトリを追加する必要がある場合は、[リポジトリをリンク] をクリックして、Google API Console の手順に沿って操作します。
また、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.user
IAM 権限を含む Cloud AI Companion リポジトリ グループ ユーザーの 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.user
IAM 権限を含む Cloud AI Companion リポジトリ グループ ユーザーの 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 API コンソールで、[ログ エクスプローラ] に移動します。
ログ名フィルタを使用して、
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
は確認するリポジトリです。- リポジトリのインデックス登録の開始(例:
以下のような、関連するインデックス作成エラーを確認します。
- リポジトリを取得できませんでした。
- リポジトリ ファイルを一覧表示できませんでした。
- インデックスからリポジトリ情報を取得できませんでした。
- インデックスからファイルを取得できませんでした。
- 内部エラーが発生しました。
コード カスタマイズを使用する
コード カスタマイズを設定すると、コード補完とコード生成の候補が表示されます。これらの候補は、インデックスに登録したプライベート コードに基づく場合があります。また、コードベース全体の認識結果も使用されます。
コード カスタマイズの使用とベスト プラクティスの詳細については、コード カスタマイズを使用するをご覧ください。
コード カスタマイズをオフにする
次のオプションのいずれかを選択します。
コンソール
API コンソールで、[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 がデータを使用する方法とタイミングについての説明をご確認ください。