🚀 VS Code で を入手しましょう!

言語共通プロトコル

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

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

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 HatEclipse Cheチームのブログ記事、および GitHub の言語サーバープロトコルリポジトリにアクセスしてください。TypeScript および Node.js で実装された動作する言語サーバーのソースコードをステップ実行できる言語サーバーチュートリアルもあります。もちろん、任意の言語で言語サーバーを実装できます!

ハッピーコーディング!

The VS Code Team, @code