窓を作っては壊していた人のブログ

この謎のブログタイトルの由来を知るものはもういないだろう

Metalsを使ってみた -VSCodeで快適なScala環境を求めて-

普段ScalaIntelliJを使って読んだり書いたりしています。 ですがIntelliJはモリモリとメモリを食べるので、他のエディタとの併用が貧弱な私のマシンでは非常に厳しいという問題がありました。 コードを読みたいだけの時にIntelliJを開くのをためらうほどです。

そこでずっと軽量なVSCodeScalaのコードをいい感じに見れるものないかなと探していました。 以前はensime を使っていたのですが、更新が止まりそれと同時に使わなくなりました。

当時それ以外の選択肢が見つかっていなかったので諦めていましたが、Metalsというプロジェクトを見つけました。

scalameta.org

現状自分がVSCodeを使ってScalaで開発するなら(実際には現時点まだまだRead向け?)、これ一択かなぁと思えるほど良かったので紹介します。

Visual Studio Code · Metals

詳しい内容は公式のDocumentを参照してください。

インストール方法は他のVSCodeの拡張を入れるのと同様、検索画面に Metals と入力するか、Scala (Metals) - Visual Studio Marketplace からダウンロードします。

インストール直後はMetalsの依存パッケージなどがダウンロードされるので回線状況によっては10分ほど放置する時間が出来そうです、待ちましょう。 インストール後 build.sbt のあるディレクリを開くとプロジェクトのimportうながすダイアログが表示されるのでimportしましょう。 ダイアログを拒否してしまった場合はコマンドパレットを開いて Metails: Import build します。

初回のimportでMetalsが依存しているBloopのダウンロードなども行われるため若干時間がかかりますが、これも待ちましょう。

ここまで済ませる快適なScalaリーディング環境が手に入ります。

例えばマウスオーバーでJavadocの内容が確認できたり、Macだとコマンドキーを押してマウスオーバーでピーク、クリックで定義ファイルへジャンプできたりといった、機能はもちろん

f:id:yamachu_co:20200413215939g:plain

コード補完もバッチリ行なってくれます。

f:id:yamachu_co:20200413220239g:plain

割と使えそうな感じではありますが、Run/Debug 出来るよと書いてあるけどAzure Functionsのリモートデバッグに今の所成功していません… この辺りは要調査タスクとして残しておきます。

また例えばIntelliJだと

val boolValue = true
boolValue match {
  case true => ???
  case false => ???
}

みたいに書くと、これは if で書き直すといいんじゃない?みたいにSuggestしてくれますが、もちろんそんなものはないし、Optimize importみたいなものもありません。 ガッツリVSCodeで開発するぞ、というユースケースには若干向かないんじゃないかなと思っています。

パッとどんなロジックだったかなとか読んで確認する、という場合には向くんじゃないでしょうか。