この記事は「Visual Studio Code Advent Calendar 2018」2日目のエントリです。昨日は@tempakyousukeさんの「僕の考えた最強のキーバインドチートシート(VSCode)」でした。
最近、Javaを書くときは**Visual Studio Code(以降、VS Code)をIDEとして利用しています。一番の理由は軽量**という点で、機能的にはまだまだEclipse、IntelliJ IDEA、NetBeansに届かない部分がありますが、最低限の機能は備えています。また、Visual Studio IntelliCodeがJavaに対応するなど、新しい機能開発も盛んで、今後が期待できます。
使っている中で**「そういえば、なんでVS CodeでJavaのデバッグとかできるんだろう?拡張機能の中ってどうなっているの?」とふと疑問が沸いてきたので調べてみました。その中ではじめてLSP(Language Server Protocol)やDAP(Debug Adapter Protocol)**を知り、Eclipse JDT Language ServerやEclipse LSP4Jなるものがあることにたどり着きました。日本語の情報があまりなかったのでまとめてみます。
Visual Studio Codeの拡張機能(Extensions)
VS Codeは拡張機能(Extensions)によって様々な用途に使えます。Javaの開発をする場合も拡張機能を使います。
https://marketplace.visualstudio.com/VSCode
VSCodeの拡張機能の構成は次のページで解説されています。
https://code.visualstudio.com/docs/extensions/overview
プログラミング言語の拡張機能を作る場合に重要なのが**Language ServerとDebug Adapterの2つで、それぞれLSP(Language Server Protocol)とDAP(Debug Adapter Protocol)**として、Microsoftが中心となって仕様を定めています。
LSP(Language Server Protocol)
LSPはMicrosoftが2016年6月27日にサンフランシスコで開催されたRed Hat Summit and DevNationでRed Hat、Codenvy1と仕様を発表したものです。オートコンプリートや定義への移動、参照検索などを提供するLanguage Serverとエディタ/IDEとの間でやりとりするためのプロトコルで、JSON-RPCベースとなっています。日本語の記事としては、「language server protocolについて (前編)」がかなり詳しいです。
実装は一覧でまとまっていて、Javaは現在2つ掲載されています。
DAP(Debug Adapter Protocol)
DAPはデバッガの機能を抽象化したプロトコルで、DAPを利用することで次のような共通化を図ることを狙いとしています。
実装はLSP同様に一覧でまとまっていて、Javaは現在「Debugger for Java」があります。
Java Extension PackでEclipse JDT Language ServerやDebugger for Javaが入る
VSCodeでJavaの開発を行う場合、いくつかの選択肢がありますが、Microsoftが出しているJava Extension Packを使うのが最もポピュラーな方法です。
https://code.visualstudio.com/docs/java/extensions
Java Extension Packをインストールすると次の4つの拡張機能がインストールされ、LSPやDAPの実装を使う環境が整います。
一番上の「Language Support for Java(TM) by Red Hat」はEclipse Foundationで開発しているEclipse JDT Language Serverを提供するもので、次の4つのパッケージをもとに成り立っています。
- Eclipse LSP4J…LSPのJava向けの実装
- Eclipse JDT…JDTはJava Development Toolsの略語でコード補完などの機能を提供
- M2Eclipse…Mavenのサポート
- Buildship…Gradleのサポート
個人的にはEclipse FoundationがLSPを出しているのが非常に興味深いです。先日JJUGのナイトセミナーでEclipse Foundation代表のMike MilinkovichさんがJakarta EEの話をされたのですが、その前段でEclipseなどIDEについて話した際に「LSP知ってる人?」と聞いていたのですが(ほとんど手があがりませんでしたが…)、VSCodeの裏側に関わっていたのですね。
今回のアドベントカレンダーに向けてLSP4Jを少し触ってみようと思ったのですが、時間が足りず…。以下の記事でとても詳しく書かれていたので、興味ある方は是非お試しください。
LSP4JでLanguage Server Protocol入門
EclipseページでLSP4JとJDTのActive Member Companiesをみるとそれぞれ次のようになっていました。
どちらもTypeFoxが入っていて、LSP4JのProject Lead2名(Miro Spönemann,Sven Efftinge)もTypeFoxの人でした。どんな会社なんだろうと調べたら、IDEなどの開発ツール等に力を入れている企業で、GitHubOnline IDE Gitpodを出している会社なのですね。サイトをみてたらEclipse Theiaというのがあって、かなり良さそうだなと思ったのですが意外と日本語情報が少ない…この辺りも調べてみたいです。
最後少し脱線してしまいましたが、VSCodeでJava開発がなぜできるのか?について調べてみました。
-
2017年5月にCodenvyはRed Hatによって買収され、そのRed Hatは今年IBMに買収されたので、現在はIBM配下…? ↩