Emacs 29のEglotでScalaとKotlin開発が可能に
Emacs 29でLanguage Server Protocol (LSP)クライアントのEglotが標準搭載されたことで、JVM言語の開発環境が大きく変わろうとしている。軽量で高速なEglotを使用することで、従来のように重厚なIntelliJ IDEAに依存せず、Scala、Kotlin、Javaの開発が可能になった。
Emacs 29はEglotを組み込みのデフォルトLanguage Server Protocol (LSP)クライアントとして採用した。Eglotは軽量で高速であり、Emacsの哲学に厳密に準拠している。従来、JVM言語、特にScalaやKotlinでの開発にはIntelliJ IDEAが標準とされてきたが、IntelliJ IDEAは8GB+のRAMを頻繁に消費する大規模で単一構造のJavaアプリケーションである。
Eglot設定とJVM言語サポート
著者はheks-emacs設定の一部として本番環境対応のEglot構成を使用しており、日々の業務でScalaおよびKotlin(および一部Java)を使って開発している。Metals言語サーバーは-Xmx4Gおよび-XX:+UseZGCなどのJVMチューニングフラグで設定でき、Bloop JVMプロパティではヒープサイズ4GBが設定される。Kotlin言語サーバーは--stdioオプション付きのintellij-serverを使用できる。
Metals言語サーバーは推論型とパラメータ型のインレイヒントに対応している。一方、Kotlin LSPは依存関係をトラバースする際にファイル参照をjar:///path/to/library.jar!/File.kt形式で返す。このJAR URI形式への対応にはjarchiveパッケージが機能する。
開発環境構築とNix Flakes
著者はグローバルなJDK インストールに代わってNix flakesを使用して分離された開発環境を構築している。Kotlin開発用flakeにはktfmt、ktlint、kotlin、jdk25、nil、just、yaml-language-serverが含まれる。Scala開発用flakeにはscala_2_13、jdk25、metals、sbt、scalafmt、scalafix、scala-cli、yaml-language-server、coursierが含まれている。
著者はdirenvと.envrcファイルを使用してflake設定を読み込んでいる。eglot-javaパッケージはEclipse JDT LSのワークスペース設定を提供する。なお、Metals意味的リフレッシュの無効化により、Metalsの起動に関する問題が解決される可能性がある。
この記事は元記事の事実のみに基づいて自動生成されました。
出典
jointhefreeworld.org「Emacs Eglot for Scala and Kotlin (JVM)」https://jointhefreeworld.org/blog/articles/emacs/emacs-eglot-scala-kotlin/index.html