1.はじめに
最近,Google Cloud の Vertex AI Search や OpenAI の Assistants API など,RAG(検索拡張生成)を簡単に構築できるマネージドサービスが増えてきました.しかし,エンジニアとしてこれらのツールを使おうとした時,「かゆい所に手が届かない」 と感じる大きな課題が一つあります.
それは,「現在のコードしか見てくれない」 という点です.
開発現場で本当に知りたいのは,「このコードが何をしているか」だけでなく,「なぜこの変更が行われたのか(過去の経緯や議論)」 であることも多いと思います.しかし,一般的なマネージドサービスでは,最新の main ブランチのコードを検索することはできても,過去の Pull Request (PR) や Issue の議論まで紐付けて回答してくれるものは,高価な特化型SaaSを除いてほとんどありません.
そこで今回は,「マネージドサービスでは読み取れない "開発の文脈" まで理解する」 最強のGitHub RAGアプリケーションを,LlamaIndex と Gemini 3.0 を用いて自作しました.
以下のリポジトリにて,コードを公開しているので使用してみたい方いましたら,クローンしてぜひ利用してみてください!(Vertex AI,Google AI Studioともに対応しているため,気軽に使用してみてください!)
以下目次
1.はじめに
2.完成品
3.使用技術
4.使用方法
5.おわりに
6. 参考文献
2.動作デモ
実際に自作した既存アプリケーションのリポジトリである Linebotリポジトリ を参照しながら,「verfy_tokenというメソッドがどのような用途のために作成されたか」を質問してみました.
生成時では,プロンプトにもよりますが 5 ~ 10 秒ほどかかると思われます.また veryfy_token は「使用するIDトークンの検証」を行うメソッドなので,生成品質もよさそうです.
また,デモでは触れていませんがGithub のプルリクエスト(PR)の内容も参照することができるため,過去のPRからどのような意図で導入されたかも掘り下げることができます!
3. 使用技術
本アプリケーションの技術スタックについて解説します. 構成は大きく分けて,AIプラットフォーム,RAGフレームワーク,そして実行環境の3つのレイヤーから成ります.技術スタックとしては,以下のバージョン・構成を採用しました.
| カテゴリ | 技術スタック | バージョン / モデルID |
|---|---|---|
| LLM | Gemini 2.5 Pro | Model ID: gemini-2.5-pro
|
| Embedding | text-embedding-004 | Model ID: text-embedding-004
|
| RAG Framework | LlamaIndex | llama-index-core==0.14.8 |
| Vector DB | ChromaDB | chromadb==1.3.5 |
| AI Platform (Dev) | Google AI Studio | Lib: google-generativeai==0.8.5
|
| AI Platform (Prod) | Vertex AI | Lib: google-cloud-aiplatform==1.128.0
|
| Application | Python 3.12 | Python: 3.12-slim
|
| Infra | Docker / Docker Compose | Compose File: 3.12
|
以下では,AIプラットフォームとRAGプラットフォームについてもう少し詳細に説明します.
3.1 AIプラットフォーム(Vertex AI,AI Studio)
本アプリケーションでは,Google AI Studio と Vertex AI を環境変数一つで切り替えられます.
-
Google AI Studio:GoogleアカウントさえあればAPI Keyを取得し即座に,かつ制限付きではありますが無料で使用することができます.例えば,開発中や個人利用で用いる場合はこちらを使うことが多いかもしれないです.また,無料ではなく有料にはなってしまいますが,プランを変更すれば入力データを学習に利用されないようにすることもできます.
-
Vertex AI:Google Cloud 上で動作する企業向けプラットフォームです.IAMに権限管理やデータが学習に利用されない(ゼロデータリテンション)等のセキュリティ要件を無料で満たせます.GCPで動かすため,初期での導入負担 Google AI Studioと比較して重たいですが,個人的には追加で使用できる機能も多いのでこちらがおすすめです!
上記2つのバックエンドを,環境変数 USE_VERTEX_AI で切り替えることができます(Trueの場合は Vertex AI を利用,Falseの場合は Google AI Studio を利用)
3.2 RAGフレームワーク(LlamaIndex)
今回の開発において,RAG(検索拡張生成)のパイプライン構築に採用したのが LlamaIndex です.LlamaIndex は,LLMと外部データ(今回はGitHubリポジトリ)を接続するためのデータフレームワークであり,単なる「検索ライブラリ」以上の役割を果たしてくれます.
なぜ Vertex AI Search などの便利なマネージドサービスを使わずに LlamaIndex を選んだのか,費用以外の点で理由が2点あります.
-
GitHub連携の圧倒的な手軽さ
通常,GitHubのリポジトリをRAGのデータソースにする場合,「GitHub APIを叩いてファイルリストを取得し,各ファイルの中身をダウンロードし,テキストを抽出してクリーニングする…」という非常に面倒な前処理プログラムを自作する必要があります. しかし,LlamaIndex が提供する llama-index-readers-github を利用すれば,この複雑な工程がわずか数行のコードで完結します. 本プロジェクトでは,特定の拡張子(.py, .ts, .md など)を持つファイルだけをフィルタリングして読み込み,自動的にベクトル化する処理をこのローダーに任せることで,開発工数を大幅に削減できます.
また,LangChain でもRAGを構築することはでき,かつ Githubのリポジトリをデータソースにすることできますが,LangChainのGithubReaderでは,コードを読み込むことに特化しているためPRやIssueを読み込もうとすると追加で何行ものコードを書く必要が出てきます.そのため,LlamaIndexを用いたほうが手軽にGithubと連携することが可能になるのです.
-
マネージドサービスでは実現できない「変更の経緯」の理解
一般的なRAG系マネージドサービスは,最新の main ブランチのコードを検索することは得意ですが,「なぜこの変更が入ったのか?」という 過去の議論(PRやIssue) まで含めてインデックス化する機能は標準では提供されていないことが多いです. LlamaIndex では,コードだけでなく Issue や Pull Request のテキストデータも取得できるため,「現在の仕様」だけでなく「変更の意図」まで理解した,より深いコード解説Botを構築できます.この「痒い所に手が届く」柔軟性と,それを無料で実現できる点こそが,自作する最大のメリットです.
4.使用方法
このプロジェクトを使用する場合は,以下を事前に準備する必要があります.そのため,もし使用する場合は準備をお願いいたします.また,各工程を詳細にまとめてくれている方が多くいるので,取得の際には参考にしてみてください.
- 参照する Gihubリポジトリの Github Token
- Vertex AI APIを利用するための情報,もしくは AI Studio の Gemini API
4.1 .env ファイルの用意
上記のAPI類の取得が完了したら,まず以下の.envファイルを作成します.Google AI Studio関連を使用する場合は,USE_VERTEX_AI=Falseにすることを忘れずにしてください.また,Google AI Studio,Vertex AIは使用する方のみを入力するだけで十分です.
# 各環境変数(APIキー)
# Google AI Studio関連
GEMINI_API_KEY=your_gemini_apikey
GEMINI_REGION=your_gemini_region
# GCP設定
GOOGLE_APPLICATION_CREDENTIALS=/model/service-account.json
GCP_PROJECT_ID=your_gcp_project_id
GCP_LOCATION=your_gcp_location
# Vertex AI使用フラグ
USE_VERTEX_AI=True # Google AI Studioを使用する場合はFalse
# Geminiモデル名設定
GEMINI_FLASH_MODEL_NAME=gemini-2.5-flash
GEMINI_PRO_MODEL_NAME=gemini-2.5-pro
# Github関連の環境変数
GITHUB_TOKEN=your_github_token
GITHUB_REPO_OWNER=github_repo_ower_name
GITHUB_REPO_NAME=github_repo_name
GITHUB_BRANCH_NAME=github_branch_name
# Vector DBの保存先
CHROMA_DB_PATH=./vector_db
CHROMA_COLLECTION_NAME=supportbot_collection
4.2 Dockerコンテナの作成・起動
続いて,Dockerコンテナを作成し起動します.以下のコマンドを実行してください.
docker compose build --no-cache
docker compose run --rm model
上記のコマンドが正常に実行されるとコンテナの内部に入り,該当リポジトリにおけるRAGの構築が始まります.
4.3 プロンプトの入力
4.2の実行が終わると,プロンプトを入力できるようになります.以下の画面の > の部分にプロンプトを入力すると出力が得られます.
5.おわりに
今回は,Gemini と LlamaIndex を組み合わせて「無料から始められて,本番運用も見据えられる」 柔軟なRAGアプリケーションを構築しました.
マネージドサービスでは手の届きにくい 「プルリクエストやIssueの文脈理解」 まで,LlamaIndex のローダーを活用することでわずかなコード量で実現できました。「データの準備」の手間を極限まで減らしつつ,ここまで高機能な検索システムを無料枠で運用できる点でいろいろな人の一助になればと思ってます!
「自分の書いたコード,どうなってたっけ?」 「この変更,誰がどんな理由でマージしたんだっけ?」
そんな開発現場の"あるある"を解決する専属アシスタントとして,ぜひ皆さんもこの構成を試してみてください。
また,今回は検証用としてCLIツール形式で実装しましたが,次回は,これを実際にチーム開発で使える 「新人エンジニア支援 Slack Bot」 へと進化させる方法を紹介します.
最後までご覧いただきありがとうございました!
6.参考文献
LlamaIndex関連
Vertex AI関連

