MicrosoftはVS Codeが各種言語サーバーとの通信に使っているプロトコルをオープンソース化した。
Visual Studio CodeはMicrosoftが開発しているIDEで、150以上の言語をサポートしている。それを可能にするため、Monaco Editorには、構文チェック、エラー報告などコードを検証し、言語サーバー経由でIntellisenseやリファクタリングのサポートを提供するツールが含まれている。通常、サポートするプログラミング言語ごとにサーバーが1つある。Monacoとサーバー間の通信は、Language Server Protocol (LSP) によって行われる。Microsoftはこのプロトコルをオープンソース化した。
コード検証はリソース負荷の高い作業なので、言語サーバーは別プロセスで動いている。言語サーバーは様々なプログラミング言語で書くことができ、標準入力/標準出力経由で軽量なJSON-RPCベースのプロトコルを使い、エディタと情報をやりとりしている。このプロトコルはV8 debugger protocolにインスパイアされたものだとErich Gamma氏は書いている。彼は現在、MicrosoftのVisual Studioにコンピュータサイエンティストとして関わっている。
LSPはHTTPと似ていて、ヘッダーセクションとそれに続くJSON-RPCコンテンツセクションで構成される。以下にその一部を示す。
Content-Length: ...\r\n
\r\n
{
"jsonrpc": "2.0",
"id": 1,
"method": "textDocument/didOpen",
"params": {
...
}
}
ヘッダーには、コンテンツの長さとタイプを示す2つのフィールドを含めることができる。コンテンツは言語サーバーに送られたリクエスト、あるいはそれから受け取ったレスポンスを表す。このセクションはメッセージ、通知、コマンドを送信するのに使われる。言語サーバーはサポートするcapabilitiesを示すことで、コード検証に使える機能を提示することができる。異なる言語サーバーに同時に複数のリクエストを送っても、エディタがそれぞれの応答を区別できるよう、各パケットにはIDフィールドが含まれている。
LSPによって、エディタとそれが用いる言語サーバーが切り離されている。おかげで、1つのIDEで複数のサーバーを使ったり、このプロトコルをサポートする複数のIDEで言語サーバーを再利用したりすることが可能だ。Microsoftや他のベンダーは、すでにC++、CSS/LESS/SASS、JSON、PowerShell、Xtext、PHPなどの言語サーバーを開発している。Eclipse CheはLSPを採用しており、それを使ってC/C++、C#、Go、JSON、R、TypeScript、RAML、XMLのサポートを追加する予定だ。またRed HatはEclipse CheにJava言語サーバーを寄贈するという。現在のところ、C#、Haxe、Java、Node.js向けのSDKが用意されている。
Rate this Article
- Editor Review
- Chief Editor Action