OpenCode LSP サーバー設定
OpenCode は言語サーバープロトコル(LSP、Language Server Protocol)と深く統合されており、LSP サーバーを介して LLM にコード診断やエラー通知などのリアルタイムフィードバックを提供し、AI がコードベースをより正確に理解・操作できるようにします。
簡単に言うと、LSP サーバーは OpenCode に「コードを読み取る」能力を持たせるコンポーネントであり、VS Code でコード補完やエラー通知を提供するプラグインに似ています。ファイルに構文エラーや型の不一致があると、LSP サーバーはこれらの診断情報を LLM にフィードバックし、より正確な修正を行えるようにします。
動作原理
OpenCode の LSP 統合は全自動で、手動による操作は不要です。OpenCode がファイルを開くと、以下のフローが順に実行されます:
打开文件 │ ▼ 读取文件扩展名(如 .ts、.py、.go) │ ▼ 与所有已启用的 LSP 服务器进行匹配 │ ├── 匹配成功且服务器已运行 → 直接使用 │ └── 匹配成功但服务器未运行 → 自动启动对应 LSP 服务器
プロセス全体はバックグラウンドで静かに完了し、LSP サーバーが起動すると、現在のセッションに対して診断情報を継続的に提供します。
組み込み LSP サーバー
OpenCode には主要言語の LSP サーバーサポートが組み込まれており、対応するファイル拡張子が検出され、対応する要件を満たすと、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 以上)がインストールされている必要があります |
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依存関係 |
ruby-lsp |
.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コマンドが利用可能 |
OpenCode に LSP サーバーを自動ダウンロードさせたくない場合は、環境変数OPENCODE_DISABLE_LSP_DOWNLOADをtrueに設定すると自動ダウンロードを無効化できます。詳細は文末の説明を参照してください。
LSP サーバーの設定
LSP 関連の設定はopencode.jsonのlspフィールドに記述します。ほとんどの場合、設定は不要で LSP は自動的に有効になりますが、動作をカスタマイズする必要がある場合、各 LSP サーバーは以下の設定項目をサポートしています:
| プロパティ | 型 | 説明 |
|---|---|---|
disabled |
boolean |
に設定するとtrueその LSP サーバーを無効化できます |
command |
string[] |
LSP サーバーを起動するコマンド(配列形式。最初の要素は実行可能ファイル名、残りは引数) |
extensions |
string[] |
その LSP サーバーが処理を担当するファイル拡張子のリスト |
env |
object |
サーバー起動時に注入する環境変数。キーは変数名、値は変数の値 |
initialization |
object |
LSP のinitializeハンドシェイクフェーズでサーバーに送信する初期化オプション。内容はサーバーごとに異なります |
1、環境変数の設定(env)
を使用してenvプロパティで LSP サーバー起動時に環境変数を注入します。デバッグログの有効化や、実行時に必要なパスの指定によく使用されます:
例
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug" // rust-analyzer の debug レベルログを有効にし、LSP の問題を調査しやすくする
}
}
}
}
2、初期化オプションの設定(initialization)
initializationLSP サーバーにサーバー固有の設定を渡すために使用します。これらのオプションは LSP ハンドシェイク(initializeリクエスト)フェーズで一度に送信され、その後のサーバーのすべての動作に影響します:
例
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
// TypeScript LSP に相対パスインポート(./utils など)を優先するよう指示
// 絶対パス(/src/utils など)や tsconfig.json で設定されたパスエイリアスではなく
}
}
}
}
}
初期化オプションは LSP サーバーによって異なります。たとえばtypescriptのオプションはgoplsとは完全に異なります。使用前に該当する LSP サーバーの公式ドキュメントを確認し、無効な設定を渡さないようにしてください。
LSP サーバーの無効化
1、すべての LSP サーバーを無効化する
LSP 機能がまったく不要な場合は、lsp全体をfalseに設定すると、すべての LSP サーバーを一度に無効化できます:
例
"$schema": "https://opencode.ai/config.json",
"lsp": false // すべての LSP サーバーをグローバルに無効化。コード診断が不要な環境や、ネットワーク・リソースが制限された環境に適しています
}
2、特定の LSP サーバーを無効化する
特定の LSP サーバーだけを無効化して他は残したい場合は、そのサーバーに対して個別にdisabled: true:
例
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true // TypeScript LSP のみ無効化。他の言語の LSP サーバーには影響しません
}
}
}
カスタム LSP サーバーの追加
使用している言語が組み込みサポートリストにない場合は、commandとextensionsを指定して任意の LSP サーバーを手動で追加できます。そのサーバーが標準の LSP プロトコルに従い、--stdioモード(標準入出力での通信)をサポートしていれば問題ありません:
例
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": { // カスタムキー名。任意に命名可能。設定内でこのサーバーを識別するために使用
"command": ["custom-lsp-server", "--stdio"], // 起動コマンド:最初の要素は実行可能ファイル名、
// 残りの要素はそれに渡す起動引数
// --stdio は標準入出力で OpenCode と通信することを示す
"extensions": [".custom"] // その LSP サーバーが処理するファイル拡張子を指定
}
}
}
また、カスタム LSP サーバーに環境変数と初期化オプションを同時に設定することもできます。組み込みサーバーとまったく同じ書き方です:
例
"$schema": "https://opencode.ai/config.json",
"lsp": {
"my-lang-server": {
"command": ["my-lang-server", "--stdio", "--log-level", "warn"],
"extensions": [".mylang", ".ml2"], // 複数のファイル拡張子を同時にバインド可能
"env": {
"MY_LSP_HOME": "/usr/local/my-lang" // サーバープロセスに必要な環境変数を注入する
},
"initialization": {
"formatOnSave": true // そのサーバーのドキュメントで定義された初期化オプションを渡す
}
}
}
}
補足説明
PHP Intelephense ライセンス
PHP Intelephense は無料版と有料のプレミアム版を提供しています。プレミアム版はライセンスキーでロックを解除し、インポート整理、コード折りたたみ、呼び出し階層の表示などの拡張機能が含まれます。ライセンスを購入した場合は、キーを以下のパスのテキストファイルに単独で書き込むだけで自動的にアクティベートされ、追加の設定は一切不要です。
| OS | ライセンスファイルのパス |
|---|---|
| macOS / Linux | $HOME/intelephense/license.txt |
| Windows | %USERPROFILE%/intelephense/license.txt |
ライセンスファイルにはライセンスキーそのものだけを含めてください。余分なスペースや改行など、他の内容を追加しないでください。追加するとアクティベーションに失敗する可能性があります。
自動ダウンロードの無効化
OpenCode は、対応するファイル拡張子を検出すると、デフォルトで必要な LSP サーバーをネットワークから自動的にダウンロードします。ネットワークが制限された環境にいる場合や、LSP ツールを完全に手動で管理したい場合は、以下の環境変数を設定することで自動ダウンロードを無効にできます。
# Linux / macOS:临时禁用(仅当前终端会话有效) export OPENCODE_DISABLE_LSP_DOWNLOAD=true # Linux / macOS:永久禁用(写入 shell 配置文件) echo 'export OPENCODE_DISABLE_LSP_DOWNLOAD=true' >> ~/.bashrc source ~/.bashrc # Windows(PowerShell:仅当前会话) $env:OPENCODE_DISABLE_LSP_DOWNLOAD = "true"
無効にすると、OpenCode は LSP サーバーを自動的にダウンロードしなくなりますが、システムにプリインストールされている LSP ツールは引き続き正常に検出して使用できます。
その他の拡張機能