SerenaとClaude Codeをつなげるといい感じになる理由を調べてみた。

要約
ちまたで話題のSerenaとClaude CodeをMCPでつなげると、なぜClaude Codeの動きがよくなるのか?README+複数の資料からSerenaの設計思想および解決したいことを読み解いてみた。LSPの簡単な解説もあり。
アイキャッチ画像

Serenaってなんだろう

「Claude Codeを使っているなら、Serenaも使うといいぞ」

Xの投稿を見てから、使っているSerena。確かに動きがいいかもしれない。ただ、なんとなくでいれているので私はその仕組みがよくわかりません。

そして、やはりAI界隈。数日も立たないうちにSerenaを解説する記事が増えてきました。そのうち、Zenn記事やコムテさんがピックアップした記事を読んでみたものの、よくわかりません。

そこで、SerenaとClaude Codeをつなげるとなぜいい感じになるのか?調べてみることにしました。

本稿ではSerenaの具体的な技術解説はしません。

SerenaとClaude Codeをつなげるといい感じになる理由

結論から言えば、Claude CodeがLanguage Server Protocol(LSP)+αを使ってコードを理解できるようになるからとわかりました。

LSPとは?

Claude Codeがいい感じになる立役者、LSPとはなんなのでしょうか。これは2016年にMicrosoftが標準化したプロトコル、約束事です。主にコードの構造を正確に理解し、シンボル間の関係を把握します。

ここでの「シンボル」とは、

  • 関数名
  • 変数名
  • クラス名
  • メソッド名
  • プロパティ名
  • 定数名

など名前がついているもの全般を指します。

例えば、LSPがuser.getName()を見たとき、「userは Userクラスのインスタンスで、getNameはそのクラスの5行目に定義されているメソッドで、string型を返す」情報を把握します。LSPは人間がコードを読む理解プロセスを機械的に再現しています。

SerenaがClaude CodeにLSPを提供するため、Claude Codeの動きがよくなる=いい感じになる、という理屈でした。

よくある質問

Q:そもそも、なぜSerenaは開発されたの?

その回答はSerenaのREADMEにありました。

IDE-based tools often use a RAG-based or purely text-based approach, which is often less powerful, especially for large codebases.

README.md:760-761

直近、CursorやWindsurf、Devinなどの主要AIコーディングツールはコード把握においてRAGを推しています。Serenaはそれに対するアンチテーゼとして開発、公開されたのかもしれません。

RAG (Retrieval-Augmented Generation)は、大規模言語モデル(LLM)の回答精度を向上させるための技術、LLMによるテキスト生成に、外部情報の検索を組み合わせることで、回答精度を向上させます。

ちなみにClaude CodeはLSPもRAGも実装されておらず、代わりにAnthropic独自のエージェント検索を使いコードを把握しています。そのアプローチについて、Serenaは次を主張しています。

効率性に関する言及(11-12行目)

You can think of Serena as an IDE for a coding agent. With it, the agent no longer needs to read entire files, perform grep-like searches or string replacements to find and edit the right code.

トークン効率の改善について (39-40行目)

A demonstration of Serena efficiently retrieving and editing code within Claude Code, thereby saving tokens and time. Efficient operations are not only useful for saving costs, but also for generally improving the generated code's quality.

コンテキストの節約に関する指摘(687-690行目)

Moreover, Serena is instructed to be frugal with context (e.g., to not read bodies of code symbols unnecessarily), but we found that Claude is not always very good in being frugal (Gemini seemed better at it).

要はClaude Codeのアプローチは非効率と言っているわけです。事実SerenaはClaude Codeの基本ツールであるファイル作成、読み込み、シェル実行などを除外した上で、LSPベースのセマンティック操作に特化させた実装になっています。

セマンティック(Semantic)とは、「意味論的な」「意味に関する」を表す単語で、プログラミングにおいては、表面的な形式ではなく、その背後にある意味や概念を扱うことを指します。

公式ドキュメントおよびClaude Codeで確認したところ、「LSPもRAGありません」とハッキリ示しました。

Claude CodeはLSPもRAGない
Claude Desktopからの回答

SerenaのLSPとRAGの比較

SerenaはClaude Codeの足りない機能を補いつつも、主要AIコーディングエージェントのCursor、Windsurfの強烈なRAG推しに対するアンチテーゼと解説しました。ただ、SerenaのREADMEはLSPの優位性を強調するものの、RAGの具体的な技術的問題点を解説していません。

そこでSerena、従来LSP、RAGのアレコレを調べることにしました。その結果が次です。

アプローチの比較

比較項目Serena のアプローチアプローチ
コード理解の基盤ASTとシンボルテーブル(構造を保持)ベクトル埋め込み(構造を平坦化)
シンボル解決名前空間とスコープを正確に理解文字列の類似性で判断
依存関係追跡find_referencing_symbolsで正確に追跡チャンク分割で関係性が失われる
メモリ効率必要な部分だけ読み込み(include_body=false)全体をベクトル化して保持
プロジェクト切り替えactivate_projectで即座に切り替え再インデックスが必要
インクリメンタル更新ファイル変更を即座に反映バッチ処理での再インデックス

AST (Abstract Syntax Tree / 抽象構文木)とは、ソースコードの構文構造を木構造で表現したデータ構造を指します。

Serenaが示した従来LSPにある問題の解決策

問題領域従来LSPの課題Serenaの解決策RAGの状況
AI統合エディタ向けでAIには不向きMCPでAIに最適化AIネイティブなものの低精度
トークン効率全文読み込みが前提段階的読み込み(概要→詳細)関連チャンク全て取得
マルチプロジェクトプロジェクトごとにプロセス起動プロジェクト切り替え機能プロジェクト区別なし
メモリ永続化セッション終了で消えるメモリ機能で知識保持ベクトルDBに永続化

Serenaが示すパフォーマンス

評価軸Serena従来LSPRAG
シンボル検索精度100%(名前空間考慮)100%60-75%
初期化時間数秒(オンデマンド)数分(全体解析)数時間(ベクトル化)
メモリ使用最小限(段階的読み込み)1-4GB(全体保持)数GB(ベクトルDB)
更新反映即時即時バッチ処理待ち
クロスファイル解析✅ 正確✅ 正確❌ チャンク境界で断絶

クロスファイル解析とはファイル間の依存関係や相互作用を含めた分析を指します。

Serenaから見たRAG決定的な違い

観点Serena/LSPRAG
同名シンボルの識別utils.process@file1 vs utils.process@file2 を区別すべて同じに見える
型情報の保持LSP経由で保持失われる
リファクタリング安全性全参照箇所を特定見逃しのリスク高
実行パスの理解制御フローを追跡可能不可能

まとめ

SerenaとClaude CodeをMCPで接続するとClaude Codeの動きがよくなるのは、MCP経由でAIにLSP+αを使えるようなるからでした。本当にただそれだけで変わるのは驚きでした。

また何かしらのGithubリポジトリを使うときは、Deepwikiを使いつつREADMEから思想設計を探るのはいいかもしれませんと気づいたので、今後は習慣づけられるようにしたいトコです。

Explore More
関連記事はありません。