LSP サーバー
OpenCode は LSP サーバーと統合します。
OpenCode は Language Server Protocol(LSP)と統合し、LLM がコードベースと対話するのを支援します。診断情報を使用して LLM にフィードバックを提供します。
組み込みサポート
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 | .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(バージョン 21 以上) がインストールされていること |
| 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 依存関係がインストールされていること |
| 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 releases から自動インストール |
| tinymist | .typ, .typc | GitHub releases から自動インストール |
| 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 サーバーは自動的に有効になります。
注意:
OPENCODE_DISABLE_LSP_DOWNLOAD環境変数をtrueに設定することで、LSP サーバーの自動ダウンロードを無効にできます。
動作の仕組み
opencode がファイルを開くと:
- ファイル拡張子を有効なすべての LSP サーバーと照合します。
- まだ実行されていない場合、適切な LSP サーバーを起動します。
設定
opencode 設定の lsp セクションで LSP サーバーをカスタマイズできます。
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}各 LSP サーバーは以下をサポートしています:
| プロパティ | 型 | 説明 |
|---|---|---|
disabled | boolean | true に設定して LSP サーバーを無効化 |
command | string[] | LSP サーバーを起動するコマンド |
extensions | string[] | この LSP サーバーが処理するファイル拡張子 |
env | object | サーバー起動時に設定する環境変数 |
initialization | object | LSP サーバーに送信する初期化オプション |
いくつかの例を見てみましょう。
環境変数
env プロパティを使用して、LSP サーバー起動時に環境変数を設定:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}初期化オプション
initialization プロパティを使用して、LSP サーバーに初期化オプションを渡します。これらは LSP initialize リクエスト時に送信されるサーバー固有の設定です:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"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
}
}
}カスタム LSP サーバー
コマンドとファイル拡張子を指定してカスタム 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/licence.txt - Windows:
%USERPROFILE%/intelephense/licence.txt
ファイルにはライセンスキーのみを含め、他のコンテンツは含めないでください。