LSPサーバー
OpenCode は Language Server Protocol (LSP) サーバーと統合して、診断をエージェントへのフィードバックとして使用できます。
内蔵
OpenCode は一般的な言語用にいくつかの組み込み LSP サーバーを備えています:
| LSP サーバー | 拡張子 | 要件 |
|---|---|---|
| astro | .astro | Astro プロジェクトでは自動インストール |
| bash | .sh, .bash, .zsh, .ksh | bash-language-server を自動インストール |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | C/C++ プロジェクトでは自動インストール |
| csharp | .cs, .csx | .NET SDK がインストール済みであること |
| clojure-lsp | .clj, .cljs, .cljc, .edn | clojure-lsp コマンドが利用可能であること |
| dart | .dart | dart コマンドが利用可能であること |
| deno | .ts, .tsx, .js, .jsx, .mjs | deno コマンドが利用可能であること(deno.json/deno.jsonc を自動検出) |
| elixir-ls | .ex, .exs | elixir コマンドが利用可能であること |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | プロジェクトに eslint 依存関係があること |
| fsharp | .fs, .fsi, .fsx, .fsscript | .NET SDK がインストール済みであること |
| gleam | .gleam | gleam コマンドが利用可能であること |
| gopls | .go | go コマンドが利用可能であること |
| hls | .hs, .lhs | haskell-language-server-wrapper コマンドが利用可能であること |
| jdtls | .java | Java SDK (version 21+) がインストール済みであること |
| julials | .jl | julia と LanguageServer.jl がインストール済みであること |
| kotlin-ls | .kt, .kts | Kotlin プロジェクトでは自動インストール |
| lua-ls | .lua | Lua プロジェクトでは自動インストール |
| nixd | .nix | nixd コマンドが利用可能であること |
| ocaml-lsp | .ml, .mli | ocamllsp コマンドが利用可能であること |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | プロジェクトに oxlint 依存関係があること |
| php intelephense | .php | PHP プロジェクトでは自動インストール |
| prisma | .prisma | prisma コマンドが利用可能であること |
| pyright | .py, .pyi | pyright 依存がインストール済みであること |
| razor | .razor, .cshtml | .NET SDK と VS Code C# 拡張機能がインストール済みであること |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | ruby と gem コマンドが利用可能であること |
| rust | .rs | rust-analyzer コマンドが利用可能であること |
| sourcekit-lsp | .swift, .objc, .objcpp | swift がインストール済みであること(macOS では xcode) |
| svelte | .svelte | Svelte プロジェクトでは自動インストール |
| terraform | .tf, .tfvars | GitHub リリースから自動インストール |
| tinymist | .typ, .typc | GitHub リリースから自動インストール |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | プロジェクトに typescript 依存関係があること |
| vue | .vue | Vue プロジェクトでは自動インストール |
| yaml-ls | .yaml, .yml | Red Hat yaml-language-server を自動インストール |
| zls | .zig, .zon | zig コマンドが利用可能であること |
LSP はデフォルトで無効です。有効にすると、上記のファイル拡張子のいずれかが検出され、要件が満たされたときにサーバーが起動します。
仕組み
LSP が有効で opencode がファイルを開くと:
- 有効なすべての LSP サーバーに対してファイル拡張子を確認します。
- まだ実行中でなければ、適切な LSP サーバーを起動します。
ベストプラクティス
LSP は言語サーバーからの診断を提供することで、エージェントが問題を見つけて修正するのを助けます。これは一部のプロジェクトでは便利ですが、必ずしも全体としてプラスになるとは限りません。
言語サーバーは同期ズレを起こしたり、多大なメモリを消費したり、バージョンやプロジェクトによって挙動が異なったりして、エージェントのワークフローを遅くする可能性があります。多くのプロジェクトでは、エージェントに lint・typecheck・その他の診断 CLI ツールを直接実行させ、そうしたトレードオフなしでエラーをエージェントループにフィードバックする方が良いでしょう。これらのコマンドは AGENTS.md やスキルなどの指示ファイルに記録し、エージェントが何を実行すべきかを把握できるようにします。プロジェクトが言語サーバーからの追加フィードバックで恩恵を受けられるときに、LSP を有効にします。
Configure
OpenCode Config の lsp セクションを通じて LSP サーバーを有効化し、カスタマイズできます。
すべての組み込み LSP サーバーを有効にするには、lsp を true に設定します。
{
"$schema": "https://opencode.ai/config.json",
"lsp": true
} オブジェクトを使用して、組み込みを有効に保ちながら、上書きまたはカスタムサーバーの設定を行います。
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
} 設定された各 LSP サーバーエントリは、以下のプロパティをサポートします:
サーバーエントリには、サーバーを無効にする場合のみ command が必要です。
| プロパティ | 型 | 説明 |
|---|---|---|
disabled | boolean | この LSP サーバーを無効にする場合は true を設定します |
command | string[] | LSP サーバーを起動するコマンド |
extensions | string[] | この LSP サーバーが処理するファイル拡張子 |
env | object | サーバー起動時に設定する環境変数 |
initialization | object | LSP サーバーに送信する初期化オプション |
いくつかの例を見てみましょう。
Environment variables
LSP サーバーを起動するときの環境変数を設定するには env プロパティを使用します:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"command": ["rust-analyzer"],
"env": {
"RUST_LOG": "debug"
}
}
}
} 初期化オプション
initialization プロパティを使用して LSP サーバーに初期化オプションを渡します。これらは LSP initialize リクエスト中に送信されるサーバー固有の設定です:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"],
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
} LSP サーバーの無効化
lsp が省略された場合、すべての LSP サーバーは無効です。他の構成後にすべての LSP サーバーを無効にするには、lsp を false に設定します:
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
} 特定の LSP サーバーを無効にするには、disabled を true に設定します:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
} Custom LSP servers
コマンドとファイル拡張子を指定してカスタム LSP サーバーを追加できます:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
} 追加情報
PHP Intelephense
PHP Intelephense はライセンスキーによるプレミアム機能を提供します。ライセンスキーは、キーのみを記載したテキストファイルを以下の場所に配置することで提供できます:
- macOS/Linux の場合:
$HOME/intelephense/license.txt - Windows の場合:
%USERPROFILE%/intelephense/license.txt
ファイルには追加コンテンツなしでライセンスキーのみを含める必要があります。