🤖

チームの“秘伝のタレ”を Gemini に継承!Code Customization 実践ガイド

に公開

はじめに

あなたのチームにも、大切にしている独自のコーディングスタイルや共通ライブラリ、いわば “秘伝のタレ” と呼べるような特別なノウハウがありませんか?そうしたチーム固有の 貴重な開発資産 を Gemini にしっかりと “継承” させ、AI による開発支援のポテンシャルを最大限引き出す機能 が、Gemini Code AsssitCode Customization です。

本記事は、Code Customization 機能の基本設定から具体的な活用方法まで、手順を追って解説しています。Gemini Code Assist の導入を検討されている方から、既に利用していてさらにチームに Gemini の開発支援を最適化したい方まで、Code Customization 機能のパワフルさを実感していただくきっかけになれば幸いです。

そもそも Gemini Code Assist とは?

Gemini Code Assist は、Google Cloud の先進的な AI モデルである Gemini を活用したコーディング支援ツールです。こちらのミニ解説動画を見るとイメージが掴みやすいかと思います。

https://youtu.be/TFN08ACYYxE

https://youtu.be/5h59daGtZYY

主な特徴は以下の通りです。(参考:公式ドキュメント

  • AIによるコーディング支援: コードの生成、補完、リファクタリング、バグの発見と修正提案、コードの解説、テストケースの作成など、開発ライフサイクルの様々な場面で Gemini がサポートします。
  • 生産性の向上: 定型的なコード記述の自動化や、複雑なコードの理解支援により、開発者の作業効率を大幅に向上させます。
  • 主要IDEとの連携: Visual Studio Code、JetBrains IDE(IntelliJ IDEA、PyCharmなど)といった主要な統合開発環境内で直接利用可能です。
  • コンテキストに応じた提案: プロジェクトの既存コードや開いているファイルに基づいて、文脈に即した質の高いコード提案を行います。
  • エンタープライズ対応: セキュリティとプライバシーに配慮し、企業や組織での利用に適した機能を提供します。

ざっくり言うと、「開発者の隣に座る、賢い AI ペアプログラマー」 のような存在で、より迅速かつ高品質なソフトウェア開発を実現するためのAI開発支援機能です。

Code Customization の概要

この記事で紹介する Code Customization 機能は、上記に述べた特徴の中では コンテキストに応じた提案 を強化する機能になります。具体的には、Gemini がコードの提案や説明をする際に、ローカルのコンテキストに加えて、リモートに接続したリポジトリを参照する設定 を行うことができます。

なお、Gemini Code Assist には以下の3つのエディションが存在します:

  • Gemini Code Assist for Individials(個人向け)
  • Gemini Code Assist Standard(企業向け)
  • Gemini Code Assist Enterprise(企業向け)

対応リポジトリ

Code Customization は、github.comgitlab.combitbucket.org でホストされているリポジトリ、および GitLab EnterpriseGitHub EnterpriseBitbucket Data Center でホストされているオンプレミスリポジトリをサポートしています。

対応言語

Code Customization では、以下の言語をサポートしています。

  • C、C++、C#
  • Golang
  • Java
  • JavaScript
  • Kotlin
  • PHP
  • Python
  • Rust
  • TypeScript

ドキュメント、メディア、その他のコード以外のファイルは index に登録されません。

Code Customization の仕組み(ざっくり)

ざっくりとした Code Customization の仕組みのイメージは以下の通りです。

  1. チーム専用の「賢い参照元=(index)」を作る

    • この Code Customization 機能は、あなたのチームが使っているプライベートなコードリポジトリ(例えば GitHub や GitLab など)を読み込んで分析します。
    • そして、その内容を基に index という、いわばチーム専用の参照データベースのようなものを作ります。
    • これにより、Gemini Code Assist が「うちのチームのコードって、いつもこんな感じで書くよね」というのを学習してくれるわけです。
  2. Index を参照してコード提案に活かす

    • あなたが開発環境でコードを書いていると、Gemini はその index を参照します。
    • 「今書こうとしているコードに似たものが、リポジトリのあのファイルにあったな」という感じで、関連性の高いコードを見つけ出します。
    • その情報をヒントに、あなたのチームのスタイルに合った、より的確なコード候補を提案してくれます。
    • この index は24時間ごとに自動で更新されるので、リポジトリの最新状況が定期的に反映されます。

より詳細な仕組みが気になる方は公式の解説をご覧ください。

上記の説明は、主に画像内の "Code Customization Service" にあたります。"Developer Connect" は 3Pツールと Google Cloud を繋ぐ仕組みで、index を作成する前段階で必要な手続きです。

Code Customization のメリット

Code Customization のメリットとしては、以下が挙げられます。

  • リポジトリ全体を見てくれる: 複数のファイルやモジュールにまたがる複雑な依存関係や共通処理が存在する大規模プロジェクトでも、Gemini が全体像を把握しやすくなり、的確な提案が可能になります。
  • いつもの開発フローで使える: 特別な操作は不要で、普段使っているコード補完やコード生成の機能が、Code Customization によって裏側でパワーアップするイメージです。
  • 手間いらずのマネージドサービス: index の作成や24時間ごとの自動更新は Google Cloud 側で行われるため、開発チームは運用負荷を気にすることなく、常に最新のコードベースに基づいた質の高いサポートを得られます。

つまり、Code Customization 機能を使うことで、Gemini は単に一般的なコードを提案するだけでなく、あなたのチームの「お作法」を理解した、よりパーソナルで実践的な開発アシスタントになってくれます。

実際に使ってみる

ハンズオンの前提条件

  • Gemini Code Assist Enterprise が有効化されている
  • 使用するエディタから Gemini Code Assist が使える状態になっている
  • Github のアカウントを持っている

使用するリモートリポジトリの前準備

Cloud Shell や Cloud Workstation (Google Cloud が提供するブラウザ型IDE) のターミナルで次の手順を実施します。

gh auth login
echo "プロンプトが表示されたら、通常は以下のように選択します:"
echo "  - What account do you want to log into?  => GitHub.com"
echo "  - What is your preferred protocol for Git operations? => HTTPS (または SSH、お好みで)"
echo "  - How would you like to authenticate GitHub CLI? Login with a web browser"
git clone https://github.com/ameer00/shiptrack customization-tutorial
cd customization-tutorial
git remote rm origin
gh repo create customization-tutorial --private --source=. --remote=origin -y && git push -u origin main

Developer Connect を構成する

Develper Connect とは?

Developer Connect は、GitHub や GitLab のプライベートコードリポジトリへの接続とリンクを容易にするサービスです。これにより、Gemini Code Assist はリポジトリへ安全にアクセスし、回答品質向上のための index を作成します。

この安全なアクセスの仕組みは、主に以下の2つの概念で理解できます。

  • 接続 (Connection): Google Cloud と、GitHub や GitLab といった外部ソースコード管理プラットフォーム間を連携させるブリッジ。

  • リンク (Link): 上記「接続」を介して、index 作成の対象となる個々のソースコードリポジトリを具体的に指定し、関連付けること。

手順

  1. まず Developer Connect ページに移動して、API を有効にします。

  2. 以下のコマンドを Cloud Shell で実行します。認証認可のプロセスが走るので、案内に従い進め、接続を作成します。

gcloud developer-connect connections create code-customization-tutorial \
    --location=asia-southeast1 \
    --github-config-app=DEVELOPER-CONNECT
  1. 以下のコマンドで正しく接続が作成されたかを確認します。
gcloud developer-connect connections describe code-customization-tutorial \
    --location=asia-southeast1
  1. 「リポジトリをリンク」から接続した GitHub (の指定したリポジトリ) とのリンクを作成します。

Index の作成と使用準備

index を作成する理由

リポジトリの全コードを生で Gemini に読み込ませるのは、コンテキストや速度の観点で非現実的です。リポジトリをすばやく解析して分析するため、Code Customization では index を使用し、Gemini に効率的にリポジトリを参考させます。

手順

  1. 環境変数を設定します。
export PROJECT_ID=<ご自身のプロジェクト ID >
export REGION=asia-southeast1
export INDEX_NAME=code-customization-tutorial-index
export REPOSITORY_GROUP_NAME=code-customization-tutorial-repository-group
export RESOURCE_PATH=<指定したリソースパス(*)>
  1. 次のコマンドを実行し、index を作成します。
gcloud gemini code-repository-indexes create $INDEX_NAME \
    --project=$PROJECT_ID \
    --location=$REGION
  1. リポジトリグループを作成します。
gcloud gemini code-repository-indexes repository-groups create $REPOSITORY_GROUP_NAME \
    --project=$PROJECT_ID \
    --location=$REGION \
    --code-repository-index=$INDEX_NAME \
    --repositories='[{"resource": "'"$RESOURCE_PATH"'","branchPattern": "main"}]'
  1. 目的のプリンシパルにグループへのアクセス権を付与します。--member の値は適宜書き換えてください。
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member='user:user_name@example.com' \
    --role='roles/cloudaicompanion.repositoryGroupsUser'

カスタマイズされたコードを生成してみる

それでは実際にいくつかの手順を試し、リモートリポジトリの内容を正しく参照できているかを確かめてみましょう。

リモートリポジトリのコードの補完

既存の関数内で補完を試す

  1. customization-tutorial/tmp/app.py を開きます。
  2. 51行目の package = session.query(Package).filter(Package.product_id == int(product_id)).first() を削除します。
  3. そのままpackage = session.query(p と入力し始めます。
  4. Gemini Code Assist が Package クラス (リモートリポジトリのみに存在する data_model.py で定義) をサジェストすることを確認します。
  5. 続けて .filter( と入力すると、 Package.product_id のような Package クラスの属性をサジェストするはずです。(もしくは、手順 4 の時点で一度にすべての補完を出力します。)

既存のオブジェクトのメソッド補完

  1. package オブジェクトが取得できた後の行 (例: if package: のブロック内) で、package. と入力します。
  2. リモートリポジトリの data_model.py で定義されている Package クラスの属性 (height, width, depth, weight, special_handling_instructions) やメソッド (to_dict) がサジェストされることを確認します。

リモートリポジトリのコンテキストに基づいたコード生成

  1. ファイル末尾へ移動: shiptrack-main/tmp/app.py を開き、ファイルの末尾、170行目付近の if __name__ == '__main__': ブロックの前にカーソルを移動してください。
  2. コメントによる指示: 以下のコメントを入力します。
# Gemini: Create a function named 'format_package_info'.
# It should take a 'Package' object (from data_model.py) as input.
  1. そのまま Ctrl + Enter を押すことで、コメント文を元にしたコードを生成します。
  • 確認事項: 生成された format_package_info 関数が、package という名前の引数を受け取り、その引数の属性(package.id, package.weight)に正しくアクセスして要求された形式の文字列を返却することを確認してください。これは、Gemini が data_model.py で定義された Package クラスの構造を理解していることを示しています。

    なお、Code Customization がなければ、data_model.py の Package クラスを認識できず、標準ライブラリや一般的な候補を提案します。

リモートリポジトリのコンテクストを含んだコードの説明

  1. Gemini の chat インターフェースに「data_model.pyについて説明して」のように聞いてみます
  2. リモートリポジトリの内容が RAG* されているかを確かめます。

おわりに

本記事では、チームが持つ独自の開発スタイルや共通ライブラリを Gemini Code Assist に “継承” するための強力な機能 「Code Customization」 について、その設定方法から実践的な活用例までを網羅的に解説しました。

ぜひ、本記事を参考にCode Customization 機能を活用し、皆さんのチームが持つ “秘伝のタレ” とも言える開発資産で Gemini のポテンシャルを解き放ち、生産性やコード品質をさらに向上させていただけたらと思います。

Appendix

サンプルリポジトリについて

Python (Flask) と Google Cloud SQL を使って、荷物のデータを追加・取得・更新・削除できるWeb API です。今回は特に以下の二つのファイルの中身を軽く理解しておくと、ハンズオンの理解が深まります。

  • data_model.py データベースに保存する荷物情報の構造 (高さ、幅、奥行き、重さ、特別な取扱説明など) を定義します。※リモートリポジトリにのみ存在。
  • tmp/app.py Python の Flask フレームワークを使用して Web サーバーを構築し、リクエストを受け付けます。

Index を手動で更新する

定期更新を待たずにすぐに index を更新したい場合、以下のコマンドで手動で index を更新することができます。

gcloud gemini code-repository-indexes repository-groups update $REPOSITORY_GROUP_NAME \
  --code-repository-index=$INDEX_NAME \
  --project=$PROJECT_ID \
  --location=$REGION \

Index するリポジトリグループに新規にリポジトリを追加する

上記のコマンドに --add-repositories フラグを付けることで、 Index 対象のリポジトリグループに新たにリポジトリを追加することができます。環境変数 $RESOURCE_PATH には新規に追加するリポジトリのリンクのリソースパスが値として入ります。

gcloud gemini code-repository-indexes repository-groups update $REPOSITORY_GROUP_NAME \
  --code-repository-index=$INDEX_NAME \
  --project=$PROJECT_ID \
  --location=$REGION \
  --add-repositories='[{"resource": "'"$RESOURCE_PATH"'", "branchPattern": "main"}]'

Index を削除する

以下のコマンドを実行することで、作成した index を削除することができます。

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

リモートリポジトリが本当に参照されているかを確認する

  1. Cloud Shell Editor の場合、左上のメニューの Terminal (Workstation の場合は、左上のハンバーガーメニュー > Terminal) からターミナルを開きます。
  2. ターミナル右部のセレクタから「Gemini Code Assist」を選択します。
  3. 様々なアウトプットが見れますが、Command + F で「RagStatus」という項目を検索してみましょう。
  4. RagStatus:RAG_FOUND のように表示されていれば、index 化されたプライベートリポジトリから関連情報が見つかり、提案に利用されたことが確認できます。

数に関する制約

  • コードリポジトリの index の数は、プロジェクトごとに1つ組織ごとに1つに制限されています。
  • index に登録できるリポジトリの最大数は 20,000 です。
  • 1 index あたりのリポジトリグループの最大数は 500 です。
  • リポジトリグループあたりのリポジトリの最大数は 500 です。
Google Cloud Japan

Discussion