Overview
LLM でのコーディングの補助ツールとして serena を利用しているなかで、サンプルそのままで利用しても gopls が機能してなかったので、自前で gopls (& golang) を同梱したイメージを作って利用している、という話です。
docker 経由の方法は以下のブログにワンライナーのスクリプトが書いてあり、自分はこちらを利用しています。
Docker イメージのビルド方法
FROM ghcr.io/oraios/serena:latest RUN apt-get update && apt-get install -y --no-install-recommends golang gopls ca-certificates git curl && rm -rf /var/lib/apt/lists/*
これは serena の 設定ドキュメント に書かれている内容です。
Go
(requires installation of gopls)
この Dockerfile をベースにイメージをビルドします。
自分は $HOME/.serena を切ってこの中に Dockerfile をおいています。
理由は serena は起動後の各種ファイルを .serena 二格納することとと、自分は $HOME 直下で Claude Code や Gemini を起動してファイルの探索とかすることも多く $HOME はすでに LLM 向けにカスタマイズしているからです。
# ./serena 配下で docker buildx build --platform=linux/arm64 -t emahiro-serena .
ビルドされたら mcp の設定ファイルに記載します。(claude は mcp.json、 gemini は settings.json に記載します。)
{ "mcpServers": { "serena": { "command": "docker", // podman で置き換えも可 "args": [ "run", "--rm", "-i", "--network", "host", "-v", "${プロジェクトルートへの絶対PATH}:/workspaces/projects", "localhost/emahiro-serena", "serena", "start-mcp-server", "--transport", "stdio", "--context", "ide-assistant", "--project", "/workspaces/projects" ], "env": {} } } }
ポイントはカスタムイメージを利用する場合 ${プロジェクトルートへの絶対パス} を指定します。
ここは参照してるブログには $(pwd) という LLM の CLI ツールを起動するパスの絶対パスが自動的に入るようになっていて、便利だなと思ったのですがどうもカスタムイメージを利用したコンテナだとアクセスができなかったので仕方なく絶対パスを利用しています。
ここな必ずなにか解決策がありそうなので調べてみようと思います。
余談: Claude Code は自前で Language Server Protocol 対応してきた
自分が serena を使ってる理由の一つがコーディングエージェントの IDE 化のためなのですが、先日のアプデで Claude Code は自前で LSP のサポートをしてきてました。
Added LSP (Language Server Protocol) tool for code intelligence features like go-to-definition, find references, and hover documentation
LSP を使えるか/使えないかでコーディングエージェントの動きは全くと言っていいほど変わってくるのは痛感してるので、これを外部ツールに頼らず自前でサポートするというのは正しい進化のように感じます。
まだ動きが不安定なようですが、本業の業務では Claude Code を利用してるので多分 serena は使わなくなります笑