emahiro/b.log

日々の勉強の記録とか育児の記録とか。

Claude Code の plugin で LSP と serena を入れる

Overview

Claude Code の plugin のなかで各種便利なツールが提供されてる中で自分が好んで使っている LSP ツールと serena が提供されていたので乗り換えました。

過去こんなエントリ書きましたがものの見事に数ヶ月で陳腐化しました笑

ema-hiro.hatenablog.com

ema-hiro.hatenablog.com

LSP に関する記事は以下が詳しいです。

blog.lai.so

自分が使ってる plugin

公式のプラグインclaude-code/plugins at main · anthropics/claude-code · GitHub で配布されています。
その中で自分が使っているのは以下です。

  • gopls-lsp
  • typescript-lsp
  • serena

現職でメインで使っているのが Go と TypeScript なのでそれぞれの LSP と Serena の公式 plugin が提供されていたのでこれを利用しています。
LSP の plugin は入れたら自動で使ってくれます。Claude Code の 2.0.76 (多分)あたりで LSP の enabling 設定が修正されて最新版では自動で LSP が使われるようになっているみたいです。挙動確認する限りは特別な設定なりプロンプトなしに LSP を利用してコードの探索等を進めてくれている(ように見えます。)

plugin 版 serena の設定

serena 入れてみるとわかるんですが、plugin をインターフェースとして local で python のプロセスを起動していてそれを Claude Code 内で MCP として利用している、という流れです。( grep serena してみると python のプロセスが起動してるのがわかります。)
このため plugin で serena をインストールをして Claude Code を利用するとデフォルト状態ではブラウザで serena の web アプリが起動します。

plugin で user scope に serena をインストールしたときには ~/.serena/serena_config.yml に serena の設定項目がある。これを編集することで plugin 版 serena の設定をコントロールできます。
自分は web 画面は立ち上がらなくていいので web_dashboard: false としました。

serena の activate/on-boarding の設定

これは Docker 経由で serena を local で起動していたときに少し理解が曖昧だった部分でもあるのですが、serena はプロジェクトで一番最初に起動するときに activate & on-boarding をする必要があります。Docker 経由で起動しているときは暗黙的にしてくれていたっぽいのですが、plugin 経由でも同様でした。
これに気づいたのは最近になってようやく git worktree ベースの並行開発を自分の作業の中で取り入れた際に、一度 on-boarding 完了したはずのプロジェクト(main ブランチでは on-boarding 完了済みだった)で serena が効いてないことがきっかけです。
git worktree は毎回利用するので、都度都度 serena の activate/on-boarding のプロンプトを作るのはめんどくさいので Claude Code の hooks に以下に on-boarding を登録しました。on-boarding 完了済み(.serena/memories が存在する)の場合には、自動で skip されるので Claude Code のセッション開始時にちょっと時間がかかりますが、一旦ワークアラウンドとして利用しています。

// 略
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "echo '[Serena自動実行指示] セッション開始時に以下を自動実行してください: 1. mcp__plugin_serena_serena__activate_project で現在のディレクトリ ('\"$PWD\"') をアクティブ化 2. mcp__plugin_serena_serena__check_onboarding_performed でオンボーディング状態を確認 3. 未実施の場合は mcp__plugin_serena_serena__onboarding を実行'"
          }
        ]
      }
    ],
  },

まとめ

gopls の有効化のために自前で serena を運用してるときは、最新の serena に追従するために都度イメージのビルドが必要だったのですが、plugin 経由で利用すると勝手に最新の serena を利用してくれるのでかなり助かっています。
そして Claude Code が道具としてどんどん充実化してくのが嬉しくて仕方ありません。