BT

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

| 作者: Abel Avram フォローする 10 人のフォロワー , 翻訳者 笹井 崇司 フォローする 0 人のフォロワー 投稿日 2016年7月20日. 推定読書時間: 3 分 |

原文(投稿日: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

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

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

このスレッドのメッセージについてEmailでリプライする

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

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT