1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JetBrains Context で Claude と Codex に同じコードベース知識を持たせる

1
Last updated at Posted at 2026-08-07

はじめに

前回は JetBrains Central CLI で Claude と Codex を使ってみた で、2つのエージェントを1つの JetBrains ログインにまとめました。どちらを動かすか、いくら使ったかを1箇所で管理できるようになりました。

今回は、その2つに同じコードベースの知識を持たせます。JetBrains Context という機能を使います。

エージェントに聞くたびに、grep のキーワードを当てる作業が発生します。

spring-petclinic で「同じ名前のペットを二重登録させない処理」を探すとします。実際のコードには result.rejectValue("name", "duplicate", "already exists") と書かれているので、duplicate で grep すれば当たります。ただし、その単語を思いつくには先にコードを読んでいる必要があります。

エージェントも同じことをします。当たるまで grep を何度か撃ち、開いたファイルを全部会話に積み上げていきます。またClaude Code で一度やった探索は、Codex に切り替えたらにゼロからやり直しになります。

この記事は、Windows で JetBrains Context を実際に入れて、spring-petclinic で試した記録を書きます。

JetBrains Context とは

コーディングエージェント向けの「リポジトリインテリジェンス層」として2026年7月に発表された機能です。リポジトリを事前に読み込んで、エージェントが意味でコードを探せる状態にしておきます。

grep は文字列が一致するかどうかだけを見ます。duplicate を探せば duplicate と書かれた行しか出ません。

セマンティックインデックスは、コードを意味の近さで配置し直したものです。コードの断片を数値の座標(ベクトル)に変換して保存します。
このとき、似た意味を持つコードが近い座標に置かれます。図書館の本を、タイトルの五十音順ではなく内容の近さで並べ直すようなものです。

検索するときは、クエリの文章も同じルールで座標に変換し、近くにあるコードを返します。
インデックスに保存されるのはこの座標であって、ソースコードそのものではありません(詳細は後述します)。

公式の説明では、エージェントがアクセスできるのはコードだけでなく、API、依存関係、テスト、実装パターンが含まれます。

Search helps agents find files. JetBrains Context helps agents discover relevant repository knowledge.

出典: https://www.jetbrains.com/context/

要点

項目 内容
対応 エージェント Claude Code、OpenAI Codex、Junie、その他 ACP 互換エージェント
使える場所 JetBrains IDE、JetBrains Air、VS Code など
対応言語 Java、Kotlin、Python、JavaScript、TypeScript、Rust、C++ ほか
規模 120万ファイルのリポジトリで検証済み(公式 FAQ)
提供状況 Early Access
費用 JetBrains AI サブスクリプション(AI Free を含む)があれば追加費用なし

IDE を起動していなくても、ターミナルだけで完結します。

Central との関係も FAQ に書かれています。

JetBrains Context is part of the JetBrains Central offering. For the current early access, however, JetBrains Central connectivity is not required.

出典: https://www.jetbrains.com/context/

Central の一部でありながら、今は Central に接続していなくても単体で導入できます。

導入

Windows では PowerShell で以下を実行します。

irm https://download.jetbrains.com/jetbrains-context/release/download-jbcontext.ps1 | iex

macOS / Linux はこちらです。

curl -fsSL https://download.jetbrains.com/jetbrains-context/release/download-jbcontext.sh | bash

インストール後、認証とエージェント設定を行う前に、エージェントの設定ファイルをバックアップしておくことをすすめます。次の手順で実行する setup-agent は、各エージェントの設定ファイルを直接書き換えるためです。

$stamp = Get-Date -Format yyyyMMdd-HHmmss
foreach ($d in @(".claude", ".codex", ".ai", ".junie")) {
    $src = Join-Path $env:USERPROFILE $d
    if (Test-Path $src) { Copy-Item $src "$src.bak-$stamp" -Recurse }
}

~/.claude.json(MCP サーバーの登録先)も書き換わるので、あわせて控えておくと安心です。

Copy-Item "$env:USERPROFILE\.claude.json" "$env:USERPROFILE\.claude.json.bak-$stamp"

準備ができたら認証と設定に進みます。

jbcontext login
jbcontext setup-agent

setup-agent は対話形式で、対象エージェントとスコープを選べます。

Configure JetBrains Context for:
  1) [x] Claude Code
  2) [x] OpenAI Codex
  3) [x] IntelliJ ACP Agents
  4) [x] Junie CLI

Scope:
  5) (*) User    - install into ~/.<agent>/ (applies to all projects)
  6) ( ) Project - install into ./.<agent>/ (this project only)

image.png

前回の Central CLI と同じで、エージェントごとの設定ファイルを自分で書く必要はありません。

インデックス作成は23秒

spring-petclinic(Java + Thymeleaf、約3.5万行)で jbcontext index を実行します。

jbcontext index

結果

Indexing completed. Total clusters: 17, new clusters: 17

所要23.4秒、インデックスサイズは1,350KB でした。jbcontext status で確認できます。

Index: code-blocks
  - revision b3ee2c53e76e  created 2026-08-04 12:03  clusters 17  size 1350KB
    branches origin/main, origin/gradle-remove-redundancies

増分インデックスなので、2回目以降は変更分だけが処理されます。

何が送信されるのか

社内で使う前に確認されるであろう点なので、先に書いておきます。以下の引用はすべて公式ドキュメントの Data privacy セクションからです。

出典: https://www.jetbrains.com/help/jetbrains-console/getting-started-with-jetbrains-context.html

保存されるのはコードのベクトル表現で、ソースコードそのものではありません。

JetBrains Context stores vector representations of your code rather than the raw source.

実際に保存される項目は4つです。ベクトル埋め込みに変換されたコードチャンク、ファイルパス、チャンクのオフセット(元ファイル内の位置)、リポジトリIDとリビジョンIDです。

保持期間は、最後に検索されてから14日です。

JetBrains Context retains stored data for 14 days after it was last searched, while searching the index resets this period. There is currently no option to extend retention without searching or re-indexing.

検索するたびに期間がリセットされます。学習に使わないことも明記されています(The stored data is never used for model training.)。

シンボル名を使わずに検索する

コード側の単語を使わずに聞いてみます。

jbcontext search "stop an owner from registering two pets that share the same name"

上位4件の結果

image.png

1. File: src/main/java/.../owner/PetController.java
     140| // checking if the pet name already exists for the owner
     141| if (StringUtils.hasText(petName)) {
     142|     Pet existingPet = owner.getPet(petName, false);
     143|     if (existingPet != null && !Objects.equals(existingPet.getId(), pet.getId())) {
     144|         result.rejectValue("name", "duplicate", "already exists");

2. File: src/test/java/.../owner/PetControllerTests.java
     199| void processUpdateFormWithDuplicateName() throws Exception {

3. File: src/main/java/.../owner/PetController.java
     110| if (StringUtils.hasText(pet.getName()) && pet.isNew()
     110|         && owner.getPet(pet.getName(), true) != null) {
     111|     result.rejectValue("name", "duplicate", "already exists");

4. File: src/test/java/.../owner/PetControllerTests.java
     121| void processCreationFormWithDuplicateName() throws Exception {

クエリには duplicaterejectValuealready exists も入れていません。コードと共通する単語は owner pet name 程度です。それでも実装本体を返しました。

grep で同じ結果を得るには、先に duplicate という語がコードで使われていることを知っている必要があります。知らない状態から探せるかどうかが違いです。

同じインデックスを Claude Code と Codex の両方が参照します。片方のエージェントで作ったインデックスを、もう片方がそのまま使えます。

clone していないリポジトリを検索する

--git-remote-url を指定すると、ローカルに存在しないリポジトリを検索できます。

jbcontext search --git-remote-url "https://github.com/apache/kafka" `
  "consumer group rebalance protocol coordinator"
1. File: clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java
    1631| /* test-only classes below */
    1632|     RebalanceProtocol getProtocol() {

Kafka は clone していません。jbcontext repos を見ると、apache/kafka、apache/spark、akka、arrow-kt など主要な OSS が JetBrains 側で事前にインデックスされていました。依存ライブラリの内部実装を追いたいだけのために巨大リポジトリを clone する作業がなくなります。

なお repos の一覧では、これらの更新日が2026年1月になっていました。最新コミットの内容とは限らない前提で使うのがよさそうです。

導入前に効果を見積もれる

jbcontext analyze を実行すると、ローカルに残っている Claude Code / Codex / Junie の過去セッションを読んで、コード探索にどれだけ時間を使っているかと、削減見込みを試算してくれます。

jbcontext analyze

私の環境では118タスクが対象になりました。

image.png

コード探索がエージェント作業時間の25%、1タスクあたり約105秒でした。そのうえでトークン25%減、コスト17%減という試算が出ています。

読み方の注意が2つあります。ひとつは、これが実測ではなく投影だということです。出力の最終行に Estimation based on ultimate-swebench evaluation とあるとおり、SWE-bench 評価から得た係数を、自分のセッション構成に当てはめた推定値です。もうひとつは Time & resolution ≈ unchanged の行で、速くなるのは探索であってタスク全体の所要時間ではありません。

それでも、導入前に自分の環境の数字を出せる点は実務的です。他社事例ではなく自分のログから出した数値を持っていけます。

最初に決めておくとよいこと

setup-agent の既定はユーザースコープで、全プロジェクトに適用されます。加えて SessionStart と SessionEnd のフックが入り、セッション開始時に自動でインデックスが走ります。

今回は対象を1プロジェクトに絞りました。

jbcontext setup-agent --agent=CLAUDE --scope=PROJECT --auto --non-interactive

自動インデックスを止めたい場合は --no-session-hooks を付けます。後から個別に外すこともできます。

jbcontext remove-agent --agent=CLAUDE --scope=USER --hooks --non-interactive

--hooks --skills --instructions --mcp --subagents と粒度が分かれているので、必要なものだけ残せます。
プロジェクトスコープを選ぶ場合、設定がリポジトリの中に置かれる点は意識しておいてください。

まとめ

Claude Code で突き止めた場所を、Codex に切り替えるたびにもう一度探させている人にはいかがでしょうか。特に、依存ライブラリの内部実装をエージェントに追わせる場面がある人は、clone なしの検索だけでも入れる価値があるのではないでしょうか。

JetBrains AI サブスクリプションは AI Free でも対象で、Early Access 中は追加費用なしで使えます。ライセンスの相談は弊社 NATTOSYSTEM でも承っています。

ナットウシステムからのお知らせ

弊社は JetBrains 製品に関するご質問、ご相談等を受け付けております。弊社のXまたはメールでご連絡ください。

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?