BT

InfoQ ホームページ ニュース Microsoft、VS Codeの言語サーバープロトコルをオープンソース化

Microsoft、VS Codeの言語サーバープロトコルをオープンソース化

ブックマーク

原文(投稿日:2016/07/09)へのリンク

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

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。