💨

Serenaで実装時トークン使用を最大推定90%削減

に公開

なぜSerenaを使うべきか?

Serenaの核となる部分はLanguage Server Protocol (LSP) が使われていることでしょう。Vibe CodingではSerenaを使うことで、事前に各言語に応じてプロジェクト内をAST解析し、関数、クラス、変数の位置を記憶したシンボルテーブルを作ることで、インデックスとして活用することが可能なのです。

SerenaはPythonで開発されており以下の_index_projectがindex作成部に相当。
https://github.com/oraios/serena/blob/main/src/serena/cli.py#L451

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