コンテンツにスキップ

LSPサーバー

OpenCode は Language Server Protocol (LSP) サーバーと統合して、診断をエージェントへのフィードバックとして使用できます。


内蔵

OpenCode は一般的な言語用にいくつかの組み込み LSP サーバーを備えています:

LSP サーバー拡張子要件
astro.astroAstro プロジェクトでは自動インストール
bash.sh, .bash, .zsh, .kshbash-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, .ednclojure-lsp コマンドが利用可能であること
dart.dartdart コマンドが利用可能であること
deno.ts, .tsx, .js, .jsx, .mjsdeno コマンドが利用可能であること(deno.json/deno.jsonc を自動検出)
elixir-ls.ex, .exselixir コマンドが利用可能であること
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vueプロジェクトに eslint 依存関係があること
fsharp.fs, .fsi, .fsx, .fsscript.NET SDK がインストール済みであること
gleam.gleamgleam コマンドが利用可能であること
gopls.gogo コマンドが利用可能であること
hls.hs, .lhshaskell-language-server-wrapper コマンドが利用可能であること
jdtls.javaJava SDK (version 21+) がインストール済みであること
julials.jljulia と LanguageServer.jl がインストール済みであること
kotlin-ls.kt, .ktsKotlin プロジェクトでは自動インストール
lua-ls.luaLua プロジェクトでは自動インストール
nixd.nixnixd コマンドが利用可能であること
ocaml-lsp.ml, .mliocamllsp コマンドが利用可能であること
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelteプロジェクトに oxlint 依存関係があること
php intelephense.phpPHP プロジェクトでは自動インストール
prisma.prismaprisma コマンドが利用可能であること
pyright.py, .pyipyright 依存がインストール済みであること
razor.razor, .cshtml.NET SDK と VS Code C# 拡張機能がインストール済みであること
ruby-lsp (rubocop).rb, .rake, .gemspec, .ruruby と gem コマンドが利用可能であること
rust.rsrust-analyzer コマンドが利用可能であること
sourcekit-lsp.swift, .objc, .objcppswift がインストール済みであること(macOS では xcode)
svelte.svelteSvelte プロジェクトでは自動インストール
terraform.tf, .tfvarsGitHub リリースから自動インストール
tinymist.typ, .typcGitHub リリースから自動インストール
typescript.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .ctsプロジェクトに typescript 依存関係があること
vue.vueVue プロジェクトでは自動インストール
yaml-ls.yaml, .ymlRed Hat yaml-language-server を自動インストール
zls.zig, .zonzig コマンドが利用可能であること

LSP はデフォルトで無効です。有効にすると、上記のファイル拡張子のいずれかが検出され、要件が満たされたときにサーバーが起動します。


仕組み

LSP が有効で opencode がファイルを開くと:

  1. 有効なすべての LSP サーバーに対してファイル拡張子を確認します。
  2. まだ実行中でなければ、適切な 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 が必要です。

プロパティ型説明
disabledbooleanこの LSP サーバーを無効にする場合は true を設定します
commandstring[]LSP サーバーを起動するコマンド
extensionsstring[]この LSP サーバーが処理するファイル拡張子
envobjectサーバー起動時に設定する環境変数
initializationobjectLSP サーバーに送信する初期化オプション

いくつかの例を見てみましょう。


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

ファイルには追加コンテンツなしでライセンスキーのみを含める必要があります。