このドキュメントでは、Gemini Code Assist をプライベート コード リポジトリに接続して、Gemini Code Assist のコードカスタマイズを設定する方法について説明します。この機能を使用すると、組織の内部ライブラリ、限定公開 API、コーディング スタイルに基づくコード推奨事項を受け取ることができます。
始める前に
- Enterprise サブスクリプションを使用して Gemini Code Assist を設定する。
- エンドユーザー アカウントを作成または構成します。Gemini Code Assist を使用している組織内のすべてのデベロッパーには、Google Cloud プロジェクトにアクセスする権限を持つ Google Cloud のユーザー ID が必要です。詳細については、Google Cloud コンソールでロールを付与するをご覧ください。各ユーザーに次のロールがあることを確認します。
Developer Connect を構成し、GitHub.com または GitLab.com リポジトリに接続します。
- GitHub に接続します。
- GitLab に接続する。
また、コードのカスタマイズは、次のロケーション(リージョン)のデベロッパー コネクト接続でのみサポートされます。
us-central1
europe-west1
asia-southeast1
シェル環境で
gcloud components update
コマンドを実行して、インストールされている gcloud CLI のすべてのコンポーネントが最新バージョンに更新されていることを確認します。この手順では、gcloud CLI をインストールして初期化するか、Cloud Shell を使用します。gcloud components update
接続するプライベート リポジトリを選択する
ベスト プラクティスとして、次のリポジトリを接続することをおすすめします。
- デベロッパーに記述してほしいコードと類似したスタイルや構造のコードがある。
- 現在のコードベースから呼び出す非公開のライブラリまたは 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 プロジェクト IDREGION
: このページの始める前にで説明されているように、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 プロジェクト IDREGION
: このページの始める前にで説明されているように、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
)をリポジトリ グループに付与する必要があります。
- プリンシパルにインデックス全体へのアクセス権を付与します。
- プリンシパルにインデックスのサブセットへのアクセス権を付与します。
プリンシパルにインデックス全体へのアクセス権を付与する
プロジェクトの 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
をご覧ください。条件を指定するよう求められたら、「
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
次のように置き換えます。
GROUP_NAME
: リポジトリ グループを使用してインデックスへのアクセスを制御するために、前の手順で作成したリポジトリ グループ名。POLICY_FILE
: IAM ポリシー。REGION
: このページの始める前にで説明されているように、Google Cloud プロジェクトの Developer Connect で構成したサポートされているリージョン。INDEX_NAME
: インデックスを作成する前の手順で作成したインデックスの名前。詳細については、
gcloud gemini code-repository-indexes repository-groups set-iam-policy
をご覧ください。
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"]
}
次のように置き換えます。
GROUP_NAME
: リポジトリ グループを使用してインデックスへのアクセスを制御するために、前の手順で作成したリポジトリ グループ名。REGION
: このページの始める前にで説明されているように、Google Cloud プロジェクトの Developer Connect で構成したサポートされているリージョン。INDEX_NAME
: インデックスを作成する前の手順で作成したインデックスの名前。詳細については、
gcloud gemini code-repository-indexes repository-groups set-iam-policy
をご覧ください。
インデックスのステータスを確認する
インデックスに登録するリポジトリの数とサイズによっては、コンテンツのインデックス登録に最大 24 時間かかることがあります。大規模なリポジトリの場合、インデックスの作成に時間がかかることがあります。インデックス処理は 24 時間に 1 回行われ、リポジトリに加えられた変更がすべて取り込まれます。
indexing
ログを検索します。詳細については、Logging のクエリ言語をご覧ください。コンソール
Google Cloud コンソールで、ログ エクスプローラに移動します。
ログ名フィルタを使用して、
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"
次のような、関連するインデックス登録ステータスを確認します。
- リポジトリのインデックス登録の開始(例:
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
は確認するリポジトリです。- リポジトリのインデックス登録の開始(例:
次のような関連するインデックス作成エラーを確認します。
- リポジトリを取得できませんでした。
- リポジトリ ファイルを一覧表示できませんでした。
- インデックスからリポジトリ情報を取得できませんでした。
- インデックスからファイルを取得できませんでした。
- 内部エラー。
コードのカスタマイズを使用する
コードのカスタマイズを設定すると、コード補完とコード生成の候補が表示されます。これは、インデックスに登録したプライベート コードに基づく場合や、コードベース全体の認識結果に基づく場合があります。
コードのカスタマイズをオフにする
シェル環境で現在のインデックスのすべてのリポジトリ グループを一覧表示するには、
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
次のように置き換えます。
現在のインデックスからリポジトリ グループを削除するには、
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 を繰り返します。
省略可: インデックスを削除するには、シェル環境で
gemini code-repository-indexes delete
コマンドを使用します。gcloud gemini code-repository-indexes delete INDEX_NAME \ --location=REGION \ --project=PROJECT_ID
次のステップ
- Gemini Code Assist の使用を開始します。
- VS Code: Gemini Code Assist を使用したコード
- IntelliJ: Gemini Code Assist を使用したコード
- Cloud Shell エディタ: Gemini Code Assist を使用したコード
- Cloud Workstations: Gemini Code Assist を使用したコード
- 詳しくは、Developer Connect をご覧ください。
- Gemini for Google Cloud がデータを使用する方法とタイミングについて確認する。