Serenaについてなんとなく理解してみた
私の会社では最近Claude CodeのMaxプランを全エンジニアが使えるようになりました。ありがたい…!
このClaude Codeをもっと便利に使うために色々と改善をする一環として、Serenaを自分で導入してみました。
ただ入れてみたはいいものの、Serenaって何をしてくれるんだ?という状態だったので、この記事で軽く整理してみようと思います。
Serena MCP とは?
SerenaはOraios AIが開発しているオープンソースのMCPサーバーです。
まず何なのか公式ドキュメントの和訳から、、、
-
🚀 SerenaはLLMをコードベースで直接動作するフル機能のエージェントに変えることができる、強力なコーディングエージェントツールキットです。
他のほとんどのツールとは異なり、特定のLLM、フレームワーク、またはインターフェースに縛られていないため、さまざまな方法で簡単に使用できます。 -
🔧 Serenaは、IDEの機能に似た、必須のセマンティックコード検索および編集ツールを提供します。
これは、シンボルレベルでコードエンティティを抽出し、リレーショナル構造を利用します。
既存のコーディングエージェントと組み合わせることで、これらのツールは(トークンの)効率を大幅に向上させます。
セマンティックコード検索?シンボルレベル? まあ、強力なコーディングエージェントツールキットなのでしょう、、、
このままではちょっとよくわからないので、僕なりの解釈を書いて便利だぞって説明していきます。
※ 導入方法は公式ドキュメントを他の方が書かれた記事等あるので見てください!(Serenaの公式ドキュメント)
テキストではなく「シンボル」でコードを理解する
通常、LLMはコードを**ただのテキスト(文字列の塊)**として読んでいます。
人間が文章を読むように、上から下へと文字を追っているだけです。
しかし、プログラミングにおいて重要なのはテキストそのものよりも、構造です。
-
function getUser()はどこで定義されているのか? -
Userクラスはどんなプロパティを持っているのか? - この変数はどこで参照されているのか?
こういった「構造としての繋がり」を理解するには、テキストレベルではなくシンボルレベルでの理解が必要になります。
LSP (Language Server Protocol) とは?
Serenaは LSP (Language Server Protocol) の仕組みが用いられています。
これは普段私たちが VSCodeなどのエディタで恩恵を受けている「定義へ移動」や「変数のリネーム」、「補完」などを実現している裏側の仕組みらしいです。
SerenaはLSPの力を使って、コードを単なる文字列としてではなく、**「関数AがクラスBを呼んでいて、その戻り値はCである」といった意味のある単位(シンボル)**として解析します。
つまり、LLMにIDEのような地図を持たせる -> 「シンボルレベルでの理解を行う」ということであるようです。
セマンティックコード検索とは?
次に「セマンティックコード検索」についてです。
Serenaを用いないClaude Codeの検索は、キーワードが一致するかどうかを見る**テキスト検索(grep検索)**になります。
たとえばsaveというコードを探したい時、ソースコード内にsaveというコメントや関数名がなければヒットしません。persistやcommitという名前で書かれていたら見つけられません。
一方で、セマンティック検索は、言葉の意味や文脈をベクトル化して検索します。(優秀!)
これにより、**「データの保存処理を知りたい」**と検索すれば、たとえその単語が含まれていなくても、意味的に近いPersistenceManagerやcommitTransactionといったコードを見つけ出すことができます。
Serenaの良さ
Serenaは、この 「シンボルレベルの構造理解(LSP)」 と 「セマンティック検索」 を両方持っています。
単にそれっぽいコードを探してくるだけでなく、「この関数の定義元はここで、使われている場所はあそこで...」というコードの繋がりを把握した上で、LLMに情報を渡すことができます。
Serenaの効果としては
- プロジェクト理解の精度向上
- トークン消費の大幅削減
- (理解精度向上しているのであれば、LLMの返答も速くなるのかな?たぶん...)
実際にSerenaを導入してみたところ、Claude Codeのトークン消費量が削減されたことを肌で感じています。
プロジェクトの規模が大きくなるほど、AIに読み込ませるべきコンテキスト量は膨大になりがちです。Serenaを使えば、今必要な情報だけをピンポイントで抽出できるため、無駄なトークンを消費せずに済みます。
無料で利用できるので、ぜひ試して見てください🙌
Discussion