Serenaで実装時トークン使用を最大推定90%削減
なぜSerenaを使うべきか?
Serenaの核となる部分はLanguage Server Protocol (LSP) が使われていることでしょう。Vibe CodingではSerenaを使うことで、事前に各言語に応じてプロジェクト内をAST解析し、関数、クラス、変数の位置を記憶したシンボルテーブルを作ることで、インデックスとして活用することが可能なのです。
SerenaはPythonで開発されており以下の_index_project
がindex作成部に相当。
Claude Code, Codexなどの各種ツールでは処理ごとのContextに上限があり、上限に達するとContextの内容を圧縮して処理を再開するので、Serenaでインデックス機能を使うことで毎回の圧縮上限を拡張しつつ、結果としてトークン使用を抑えた効率的な実装が可能だと考えられます。
実際著者が直近でやってみた実際のAPI開発では、Serenaを使うことで、推定最大90% と数値的にも、大きなトークン削減をすることができました。
Claude Codeで実践(前提
以下のような状況下で実践をしてみました。
・LSPでサポートされているTypeScriptでの開発前提
・png, jpg形式の画像をS3にUploadできるAPIを作成する
・実装はもちろん、テストコードまで実装
・一般的なClean Architecture を使用
・Clean Architectureで実装されたAPIが既存コードベースに十分あるものとする
Claude Codeで実践(結果
Serenaを使わない場合と使う場合でトークン使用の比較推定をした場合、
上記のAPI実装でトータル推定、最大90%のトークン削減できた。
以下、Claude Codeの推定結果:
従来手法での推定トークン消費:
- 関連ファイル全読み込み(20-30ファイル):
~120,000トークン
- テストファイル全読み込み(複数ファイル):
~60,000トークン
- 実装調査のための周辺コード読み込み:
~80,000トークン
推定合計: 約260,000トークン
Serena使用での実際の消費:
- find_symbolでピンポイント実装確認:
~8,000トークン
- get_symbols_overviewで構造把握:
~3,000トークン
- search_for_patternで関連実装検索:
~5,000トークン
- 最小限のRead使用: ~15,000トークン
実際の合計: 約31,000トークン
考察
Vibe Coding開発のボトルネックとして、本記事でも挙げたContextの上限によるCompactionとそれに伴う思考・実装のレベルの低下があるので、Serenaは有力な解決策になりえ、特に最大9割程度のトークンが削減できた ことは、Serena Indexが効いていることを強く感じさせるものでした。
Discussion