はじめに
Roo Code、Cline、その他のAIコーディングアシスタントで「Codebase Indexing」機能を使ったことはありますか?
この機能を使うと、自然言語で「認証処理どこ?」と聞くだけで、関連するコードを瞬時に見つけ出せます。従来のgrep検索では「login」「auth」「認証」など複数の単語で検索する必要がありましたが、セマンティック検索なら一発です。
この魔法を実現するのがEmbeddingモデルとベクトルデータベース(Qdrant) の組み合わせです。
本記事では、日本語とコードの両方を扱う開発者向けに、最適なEmbeddingモデルを徹底比較します。
目次
- Embeddingとは何か?仕組みを図解で理解
- Qdrantの役割とアーキテクチャ
- Embeddingモデル完全比較表
- プロバイダー別おすすめモデル
- 日本語対応モデルの選び方
- コード検索に特化したモデル
- ローカルモデル(Ollama)の選択肢
- Roo Code での設定方法
- まとめ:用途別おすすめモデル
Embeddingとは何か?仕組みを図解で理解
テキストをベクトルに変換する
Embeddingとは、テキストを**数値の配列(ベクトル)**に変換する技術です。
┌─────────────────────────────────────────────────────────────────────┐
│ テキスト → ベクトル変換 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 「犬が走る」 │
│ ↓ │
│ [0.23, -0.45, 0.89, 0.12, -0.67, 0.34, ...] ← 1536〜3072次元 │
│ │
│ 「猫が歩く」 │
│ ↓ │
│ [0.21, -0.42, 0.85, 0.15, -0.63, 0.31, ...] ← 似た意味=似た数値 │
│ │
│ 「経済政策」 │
│ ↓ │
│ [-0.78, 0.56, -0.23, 0.91, 0.44, -0.12, ...] ← 違う意味=違う数値 │
│ │
└─────────────────────────────────────────────────────────────────────┘
重要なポイント: 意味が似ているテキストは、似たベクトル(数値配列)に変換されます。
ベクトル空間のイメージ
実際には1536〜3072次元ですが、2次元に簡略化すると:
↑ 次元2
│
│ ★「猫が寝る」
│ ★「犬が走る」
│
────────────────┼──────────────────→ 次元1
│
│
★「経済政策」
│
※ 近い位置にあるテキスト = 意味が似ている
Qdrantの役割とアーキテクチャ
Qdrantとは?
Qdrantはベクトルデータベースです。通常のデータベースが「完全一致検索」をするのに対し、Qdrantは「類似度検索」ができます。
┌─────────────────────────────────────────────────────────────────────┐
│ 通常のDB vs ベクトルDB │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 通常のDB(MySQL等) Qdrant(ベクトルDB) │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ ID │ 名前 │ 年齢 │ │ ID │ ベクトル │ │
│ ├────┼──────┼─────┤ ├────┼──────────────┤ │
│ │ 1 │ 田中 │ 25 │ │ 1 │ [0.2, -0.5, │ │
│ │ 2 │ 山田 │ 30 │ │ │ 0.8, ...] │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ 検索: WHERE 名前='田中' 検索: このベクトルに近いものは? │
│ → 完全一致のみ → 意味的に似たものを発見! │
│ │
└─────────────────────────────────────────────────────────────────────┘
Codebase Indexing の全体フロー
┌─────────────────────────────────────────────────────────────────────┐
│ Roo Code Codebase Indexing 全体フロー │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 【Phase 1: インデックス作成(初回のみ)】 │
│ │
│ ソースコード │
│ src/ │
│ ├── auth.ts ─┐ │
│ ├── api.ts │ Tree-sitter で │
│ ├── utils.ts ├─ 関数・クラス単位に分割 │
│ └── components/ ─┘ (チャンク化) │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ チャンク1: function login() { ... } │ │
│ │ チャンク2: class UserService { ... } │ │
│ │ チャンク3: async function fetchAPI() ... │ │
│ └──────────────────────────────────────────┘ │
│ │ │
│ ▼ Embedding API │
│ ┌──────────────────────────────────────────┐ │
│ │ ベクトル1: [0.23, -0.45, ...] │ │
│ │ ベクトル2: [-0.12, 0.78, ...] │ │
│ │ ベクトル3: [0.56, 0.34, ...] │ │
│ └──────────────────────────────────────────┘ │
│ │ │
│ ▼ Qdrant に保存 │
│ ┌──────────────────────────────────────────┐ │
│ │ Qdrant (Vector DB) │ │
│ │ ベクトル + メタデータ(ファイル名、行番号) │ │
│ └──────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 【Phase 2: 検索(日常的に使用)】 │
│ │
│ ユーザー: 「認証処理どうなってる?」 │
│ │ │
│ ▼ Embedding API │
│ クエリベクトル: [0.21, -0.43, ...] │
│ │ │
│ ▼ Qdrant で類似検索(コサイン類似度) │
│ ┌──────────────────────────────────────────┐ │
│ │ 類似度スコア順: │ │
│ │ 1. auth.ts (0.92) → login()関数 │ │
│ │ 2. middleware.ts (0.85) → authCheck() │ │
│ │ 3. user.ts (0.78) → validateToken() │ │
│ └──────────────────────────────────────────┘ │
│ │ │
│ ▼ Roo Code が関連コードを取得・回答 │
│ │
└─────────────────────────────────────────────────────────────────────┘
Embeddingモデル完全比較表
クラウドAPI モデル
| プロバイダー | モデル名 | 次元数 | MTEB | MIRACL | コード特化 | 日本語 | 価格 (1M tokens) |
|---|---|---|---|---|---|---|---|
| OpenAI | text-embedding-3-large | 3072 | 64.6% | 54.9% | △ | ✅ 良好 | $0.13 |
| OpenAI | text-embedding-3-small | 1536 | 62.3% | 44.0% | △ | ○ | $0.02 |
| Mistral | Codestral Embed | 1024 | - | - | ⭐ 最強 | △ | $0.05 |
| Mistral | mistral-embed | 1024 | 77.8% | - | △ | ○ | $0.10 |
| Voyage | voyage-code-3 | 1024 | - | - | ⭐ 優秀 | △ | $0.06 |
| Voyage | voyage-3 | 1024 | 67.3% | - | ○ | ○ | $0.06 |
| Voyage | voyage-multilingual-2 | 1024 | - | 66.1% | △ | ✅ 優秀 | $0.12 |
| Cohere | embed-v4.0 | 1024 | 66.3% | - | ○ | ✅ 良好 | $0.10 |
| text-embedding-004 | 768 | ~63% | ~45% | △ | ○ | 無料 | |
| Jina | jina-embeddings-v3 | 1024 | 65.5% | - | ○ | ✅ 優秀 | $0.02 |
| Jina | jina-embeddings-v4 | 1024 | 66.2% | - | ○ | ✅ 優秀 | $0.02 |
ローカルモデル(Ollama)
| モデル名 | 次元数 | MTEB | メモリ | 速度 | 日本語 |
|---|---|---|---|---|---|
| mxbai-embed-large-v1 | 1024 | 64.68% | 1.2GB | 高速 | △ |
| nomic-embed-text | 768 | 53.01% | 0.5GB | 超高速 | △ |
| bge-large-en-v1.5 | 1024 | 63.98% | 1.4GB | 中速 | △ |
| Qwen3-Embedding-8B | 4096 | ~65% | 8GB | 中速 | ✅ 優秀 |
| nomic-embed-code | 768 | - | 0.5GB | 超高速 | △ |
プロバイダー別おすすめモデル
1. OpenAI(バランス型・おすすめ)
┌─────────────────────────────────────────────────────────────────────┐
│ OpenAI Embedding モデル │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ⭐ text-embedding-3-large(おすすめ) │
│ ├── 次元数: 3072(最大) │
│ ├── MTEB: 64.6% │
│ ├── MIRACL: 54.9%(日本語含む多言語で大幅改善) │
│ ├── 価格: $0.13 / 1M tokens │
│ └── 特徴: 汎用性最高、日本語+コード両対応 │
│ │
│ text-embedding-3-small(コスト重視) │
│ ├── 次元数: 1536 │
│ ├── MTEB: 62.3% │
│ ├── MIRACL: 44.0% │
│ ├── 価格: $0.02 / 1M tokens(6.5倍安い) │
│ └── 特徴: コスト重視だが性能も十分 │
│ │
└─────────────────────────────────────────────────────────────────────┘
選び方:
- 日本語コメント多め → text-embedding-3-large
- コスト最優先 → text-embedding-3-small
2. Mistral(コード特化で最強)
┌─────────────────────────────────────────────────────────────────────┐
│ Mistral Embedding モデル │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ⭐ Codestral Embed(コード検索最強) │
│ ├── 次元数: 1024 │
│ ├── コード検索: OpenAI, Voyage, Cohereを上回る │
│ ├── 価格: $0.05 / 1M tokens │
│ └── 特徴: コード検索に特化、実世界タスクで最高性能 │
│ │
│ mistral-embed(汎用高精度) │
│ ├── 次元数: 1024 │
│ ├── 精度: 77.8%(汎用モデルで最高クラス) │
│ ├── 価格: $0.10 / 1M tokens │
│ └── 特徴: 汎用タスクで最高精度 │
│ │
└─────────────────────────────────────────────────────────────────────┘
選び方:
- コード検索重視 → Codestral Embed(2025年5月リリース、最新)
- 日本語コメントは少ない → Codestral Embed で十分
3. Voyage AI(コード+多言語の両立)
┌─────────────────────────────────────────────────────────────────────┐
│ Voyage AI Embedding モデル │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ voyage-code-3(コード特化) │
│ ├── 次元数: 1024 │
│ ├── 価格: $0.06 / 1M tokens │
│ └── 特徴: コード検索に特化(Codestralに次ぐ性能) │
│ │
│ ⭐ voyage-multilingual-2(多言語特化) │
│ ├── 次元数: 1024 │
│ ├── MIRACL: 66.1%(多言語で最高クラス) │
│ ├── 価格: $0.12 / 1M tokens │
│ └── 特徴: 日本語コメント+多言語ドキュメント向け │
│ │
└─────────────────────────────────────────────────────────────────────┘
選び方:
- 英語コードのみ → voyage-code-3
- 日本語ドキュメント多め → voyage-multilingual-2
4. Google Gemini(無料で始めるなら)
┌─────────────────────────────────────────────────────────────────────┐
│ Google Embedding モデル │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ⭐ text-embedding-004(無料!) │
│ ├── 次元数: 768 │
│ ├── MTEB: ~63% │
│ ├── 価格: 無料(Google AI Studio) │
│ └── 特徴: 無料で十分な性能、入門に最適 │
│ │
│ 注意点: │
│ - 無料枠はデータが学習に使用される可能性あり │
│ - 商用利用は有料プラン推奨 │
│ │
└─────────────────────────────────────────────────────────────────────┘
5. Jina AI(コスパ最強+多言語)
┌─────────────────────────────────────────────────────────────────────┐
│ Jina AI Embedding モデル │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ⭐ jina-embeddings-v3(おすすめ) │
│ ├── 次元数: 1024(可変) │
│ ├── コンテキスト: 8192トークン(長文対応) │
│ ├── 言語: 94言語対応(日本語優秀) │
│ ├── 価格: $0.02 / 1M tokens(最安クラス) │
│ └── 特徴: OpenAI、Cohereを上回る性能でコスト1/6 │
│ │
│ jina-embeddings-v4(最新・マルチモーダル) │
│ ├── 次元数: 1024 │
│ ├── 特徴: テキスト+画像のマルチモーダル対応 │
│ └── 用途: ドキュメント検索、画像検索の統合 │
│ │
└─────────────────────────────────────────────────────────────────────┘
6. Cohere(エンタープライズ向け)
┌─────────────────────────────────────────────────────────────────────┐
│ Cohere Embedding モデル │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ embed-v4.0 │
│ ├── 次元数: 1024 │
│ ├── MTEB: 66.3% │
│ ├── 多言語: 100+言語対応 │
│ ├── 価格: $0.10 / 1M tokens │
│ └── 特徴: ノイズデータに強い、エンタープライズ向け │
│ │
└─────────────────────────────────────────────────────────────────────┘
日本語対応モデルの選び方
MIRACLベンチマーク(多言語検索)での比較
┌─────────────────────────────────────────────────────────────────────┐
│ MIRACL ベンチマーク(日本語含む18言語) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ voyage-multilingual-2 │
│ █████████████████████████████████████████████████ 66.1% ← 最強 │
│ │
│ text-embedding-3-large (OpenAI) │
│ ███████████████████████████████████████░░░░░░░░░░ 54.9% │
│ │
│ text-embedding-3-small (OpenAI) │
│ ████████████████████████████░░░░░░░░░░░░░░░░░░░░░ 44.0% │
│ │
│ text-embedding-004 (Google) │
│ ██████████████████████████░░░░░░░░░░░░░░░░░░░░░░░ ~45% │
│ │
│ text-embedding-ada-002 (OpenAI旧) │
│ ████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 31.4% │
│ │
└─────────────────────────────────────────────────────────────────────┘
日本語特化モデル
| モデル | 特徴 | 用途 |
|---|---|---|
| Ruri (るり) | 日本語に特化した学術モデル | 日本語ドキュメント検索 |
| Qwen3-Embedding | 中国語・日本語で強い | ローカル運用可能 |
| multilingual-e5-large | オープンソースで多言語 | 無料で日本語対応 |
コード検索に特化したモデル
コード検索ベンチマーク(2025年最新)
┌─────────────────────────────────────────────────────────────────────┐
│ コード検索性能ランキング(2025年) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 1位: Codestral Embed (Mistral) ⭐⭐⭐⭐⭐ │
│ └── 実世界のコード検索タスクで最高性能 │
│ │
│ 2位: voyage-code-3 (Voyage) ⭐⭐⭐⭐ │
│ └── コード特化で安定した性能 │
│ │
│ 3位: Cohere embed-v4.0 ⭐⭐⭐⭐ │
│ └── コードにも対応した汎用モデル │
│ │
│ 4位: text-embedding-3-large (OpenAI) ⭐⭐⭐ │
│ └── 汎用性高いがコード特化ではない │
│ │
│ 5位: nomic-embed-code (ローカル) ⭐⭐⭐ │
│ └── 無料・ローカルでコード特化 │
│ │
└─────────────────────────────────────────────────────────────────────┘
ローカルモデル(Ollama)の選択肢
プライバシー重視・オフライン環境向け
# Ollama でEmbeddingモデルをインストール
ollama pull nomic-embed-text # 軽量・高速
ollama pull mxbai-embed-large # 高精度
ollama pull qwen3-embedding # 日本語対応
Ollamaモデル比較
| モデル | メモリ | 速度 | 精度 | 日本語 | おすすめ用途 |
|---|---|---|---|---|---|
| nomic-embed-text | 0.5GB | ⚡超高速 | ○ | △ | 軽量・入門 |
| mxbai-embed-large | 1.2GB | ⚡高速 | ◎ | △ | バランス型 |
| bge-large-en | 1.4GB | ○ 中速 | ◎ | △ | 英語特化 |
| Qwen3-Embedding-8B | 8GB | ○ 中速 | ◎ | ✅ | 日本語重視 |
ローカル運用のメリット・デメリット
┌─────────────────────────────────────────────────────────────────────┐
│ ローカル vs クラウド │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ローカル(Ollama) クラウド(OpenAI等) │
│ ✅ 完全無料 ✅ 高精度 │
│ ✅ プライバシー保護 ✅ 設定簡単 │
│ ✅ オフライン動作 ✅ メンテ不要 │
│ ❌ GPUメモリ必要 ❌ 有料 │
│ ❌ 精度はやや劣る ❌ データ送信必要 │
│ │
└─────────────────────────────────────────────────────────────────────┘
Roo Codeでの設定方法
Step 1: Qdrantのセットアップ
ローカルDocker(推奨・無料):
docker run -d \
--name qdrant \
--restart unless-stopped \
-p 6333:6333 \
-v qdrant_data:/qdrant/storage \
qdrant/qdrant
Qdrant Cloud:
- https://cloud.qdrant.io/ でアカウント作成
- クラスター作成
- URL と API Key を取得
Step 2: Roo Code設定
- Roo Code パネルを開く
- チャット入力欄右下のデータベースアイコンをクリック
- 以下を設定:
| 項目 | 設定値 |
|---|---|
| Embedder Provider | 選択したプロバイダー |
| API Key | 取得したAPIキー |
| Model | 選択したモデル |
| Qdrant URL |
http://localhost:6333 または Cloud URL |
| Qdrant API Key | ローカルは空欄 / Cloudは取得したキー |
- Save and Start Indexing をクリック
ステータス確認
- 🟢 緑: インデックス完了
- 🟡 黄: インデックス中
- 🔴 赤: エラー
- ⚪ 灰: 未設定
まとめ:用途別おすすめモデル
最終推奨表
| 用途 | 第1候補 | 第2候補 | 理由 |
|---|---|---|---|
| 日本語+コード(バランス) | text-embedding-3-large | jina-embeddings-v3 | MIRACL 54.9%で日本語強い |
| コード検索特化 | Codestral Embed | voyage-code-3 | コード検索ベンチマーク最強 |
| 日本語ドキュメント重視 | voyage-multilingual-2 | jina-embeddings-v3 | MIRACL 66.1%で多言語最強 |
| 無料で始める | text-embedding-004 | nomic-embed-text | 完全無料 |
| ローカル運用 | mxbai-embed-large | Qwen3-Embedding | プライバシー保護 |
| コスパ重視 | jina-embeddings-v3 | text-embedding-3-small | $0.02/1M tokens |
筆者の選択
私は text-embedding-3-large を使用しています。
理由:
- 日本語コメント・ドキュメントが多い(MIRACL 54.9%)
- コードも十分に検索できる
- OpenAI APIは安定・高速
- 3072次元で詳細なセマンティック表現
- データが学習に使用されない(有料API)
参考リンク
- Roo Code Codebase Indexing ドキュメント
- Qdrant Cloud
- Google AI Studio
- MTEB Leaderboard
- Ollama Embedding Models
この記事は2025年12月時点の情報です。Embeddingモデルは日々進化しているため、最新のベンチマークを確認することをおすすめします。