Serena
Serenaは、Claude CodeなどLLMのためのコーディングエージェントツールキットで、MCP(Model Context Protocol)という規格に則り、AIと連携するツールの1つ Serenaの最大の特徴は、セマンティック(意味的)コード解析機能です。これにより、コードの検索・編集がこれまで以上に確実で効率的になります。
LSP はコードの構文解析やシンボルの解決、コード補完などを提供するプロトコルで、Serena はこれを利用してコードベースの理解と操作を行います。これにより Serena は大規模で複雑なコードベースであっても適切なコンテキストを効率的に取得しタスクを実行できます。
これは人間が IDE を操作して関数の定義にジャンプしたり、シンボルを検索したりするのと同じような操作をコーディングエージェントに提供します。通常コーディングエージェントは関数の定義を探すだけでも関数名で検索や grep コマンドを使用してコードベース全体を検索し、多くのファイルを開いて確認をするため多くのトークンを消費してしまいます。Serena はキャッシュされたシンボルのリストから関数の候補を取得して検索するため、コンテキスト効率が良いわけです。
https://scrapbox.io/files/68a2af4afb4c86320c9c3e0f.png
RAGの最大の強みは、その柔軟性と速度にある。「決済処理のバグを修正したい」という漠然とした要求から、payment、billing、transactionといった関連コードを瞬時に発見できる。ドキュメントやコメントも含めて意味的に検索するため、正確な関数名を知らなくても目的のコードに辿り着ける。 しかし、RAG単体には構造的な理解という観点で限界もある。同じcalculateTotalという名前の関数が複数存在する場合、それらがどのような関係にあるのか、どれが本当の修正対象なのかを、意味的類似性だけでは判断しきれない。また、ある関数を修正したときの影響範囲を正確に把握することも難しい。
これはRAGが悪いということではない。RAGは「探索」のツールとして優秀だが、「構造解析」は別の技術の領域なのだ。
LSP(Language Server Protocol)は、VSCodeなどのIDEで「定義へジャンプ」や「すべての参照を検索」を実現している標準プロトコルである。実は2016年にMicrosoftがRed HatやCodeenvyと共に標準化した技術で、生成AIが登場するずっと前から存在している。RAGやMCPのようなAI時代の技術だと思われがちだが、もともとは人間の開発者のために設計されたものだ。LSPは、コンパイラに近いレベルでコードの構造を理解し、シンボルの定義と参照を正確に結びつける。
たとえば、特定のメソッドがどこで呼ばれているかを調べるとき、LSPは文字列検索ではなく、構文解析に基づいて正確な呼び出し箇所を列挙する。同じ名前でも、グローバル関数とクラスメソッドを区別し、スコープを正しく解釈する。これが構造的理解の本質だ。
ただし、LSPも万能ではない。動的言語での実行時の振る舞い、リフレクション、生成コードなど、静的解析では捉えきれない要素もある。LSPが提供するのは「静的に解決可能な範囲での高精度な解析」である。