に参加して、VS Code の AI 支援開発について学びましょう。

言語のための共通プロトコル

2016年6月27日 The VS Code Team, @code

Visual Studio Codeは、使用するプログラミング言語に関係なく、すべての開発者のためのエディターです。ツールにバンドルされている言語やマーケットプレイスの拡張機能を含め、150以上の言語をサポートしています。また、VS Codeのオープン開発にも取り組んでおり、VS Codeを動かすコンポーネントを公開し、オープンソース化しています。最も注目すべきコンポーネントの1つはMonacoエディターですが、VS Codeを動かすもう1つのテクノロジーは、誰でも「言語サーバー」を実装することで、新しいプログラミング言語のサポートをVS Codeに追加できるオープンなJSONベースのプロトコルです。

any developer any language any tool

どんな言語でも、どんなツールでも

本日、サンフランシスコで開催されたDevNationカンファレンスで、Red HatとCodenvyとともに、この言語サーバープロトコルが業界全体のツール作成者や言語プロバイダーによって採用されていることを発表しました。言語作成者にとって、これは、TypeScript開発者やC#開発者(OmniSharp経由)が現在得ている体験と同様に、さまざまな開発ツールやオペレーティングシステムで、自らの言語に対する強化されたツール体験を意味します。また、VS Code以外のツールであっても、開発者はどんなツールでもお気に入りのプログラミング言語で一貫した編集体験を得ることができます。

仕組み

Visual Studio Codeは、多くのプログラミング言語に豊富な言語サポートを提供しています。特定のプログラミング言語のサポートは、その言語を深く理解している言語サーバーによって提供されます。VS Codeはこれらのサーバーと通信して、「エラーと警告」、「リファクタリング」、「定義へ移動」などの豊富な編集機能を実現します。

language server protocol

ここでは、ツールと言語サーバーが通常の編集セッション中にセマンティック情報をどのように通信できるかの例を示します。

  • ユーザーがツールでファイル(ドキュメントと呼ばれる)を開きます。ツールは言語サーバーにドキュメントが開かれたこと(didOpen)、およびそのドキュメントに関する情報がツールによってメモリ内で維持されていることを通知します。

  • ユーザーが編集を行います。ツールはサーバーにドキュメントの変更(didChange)を通知し、プログラムのセマンティック情報は言語サーバーによって更新されます。これが行われると、言語サーバーはこの情報を分析し、見つかったエラーと警告(diagnostics)をツールに通知します。

  • ユーザーがシンボルに対して「定義へ移動」を実行します。ツールはサーバーにdefinitionリクエストを送信します。サーバーは定義を含むドキュメントのuriとドキュメント内のrangeで応答します。この情報に基づいて、ツールは対応するドキュメントを定義位置で開くことができます。

  • ユーザーがドキュメント(ファイル)を閉じます。ツールからdidClose通知が送信され、ドキュメントがメモリ内になく、代わりにファイルシステムによって(つまり、ファイルシステムに)維持されていることを言語サーバーに通知します。

この通信は、JSON-RPCを介して行われ、通常のセッション中に何度も発生します。

language server sequence

このアーキテクチャにより、VS Codeは複数の言語サーバーと対話でき、それぞれが任意の言語(ツールが実装された言語とは独立して)で実装でき、共通のJSONベースのプロトコルを利用している限り、さまざまな機能をサポートできます。

また、特定の言語サーバーを一度実装すれば、さまざまなツールがそれを利用できるようになります。そのため、Codenvyがプロトコルを採用し、次世代Eclipse IDEであるEclipse Cheに追加したこと、およびRed Hatがプロトコルを利用する任意のツールが利用できるJava用のスタンドアロン言語サーバーを公開するために取り組んでいることは、非常に喜ばしいことです。

オープン仕様

このプロトコルの完全な仕様は、公開GitHubリポジトリで入手でき、プロトコルが現在までにどのように進化してきたかの履歴も入手できます。より多くの言語やツールに採用され続けるにつれて、Red Hat、Codenvy、その他オープンソースコミュニティのパートナーとともに、プロトコルをサポートし、進化させていく予定です。他のオープンソースプロジェクトと同様に、誰でもリポジトリで質問したり、問題を報告したり、プルリクエストを送信したりできます。

次は何が来るか

これはほんの始まりに過ぎません。OmniSharp(C#)、JSON、C++、xText、JavaFX、Rなどのプログラミング言語のコミュニティは、将来的に自らの言語用の言語サーバーをリリースすることを約束しています。言語サーバー、エディター、SDKを含むプロトコル実装の完全なリストは、GitHubリポジトリで入手できます。

詳細については、ブレイクアウトセッションを見るRed HatおよびEclipse Cheチームのブログ記事をチェックする、そしてGitHubの言語サーバープロトコルリポジトリにアクセスしてください。TypeScriptとNode.jsで実装された動作する言語サーバーのソースコードをステップ実行できる言語サーバーウォークスルーもあります。もちろん、言語サーバーは任意の言語で実装できます!

ハッピーコーディング!

The VS Code Team, @code

© . This site is unofficial and not affiliated with Microsoft.