Server(以下、LS)であるmetalsは主要なテキストエディタにプラグイン(拡張機能)を提供しています。https://scalameta.org/metals/docs/metalsの利用者はこれらをインストールすれば手軽にmetalsの機能を利用できますが、その反面これらを使わずにmetalsを利用するのはややハードルが高く、公式ドキュメントにも特に記載がありません。neovim向けにはnvim-metalsというプラグインを提供してくれています。neovimには組み込みのLSPクライアントがあり、nvim-metalsはそのクライアント用の設定などを持っています。neovim界隈ではnvim-lspconifigで各LSの設定をまとめて管理することが多く、nvim-metalsを使わなくてもnvim-lspconfigでmetalsの設定を1行追加すればmetalsが動きます。これだけではうまく動かない機能がありるため別途対応が必要です。https://github.com/neovim/nvim-lspconfignvim-metalsは様々な機能を持つフルスタックなプラグインなので、入れるだけでいろいろとうまく動きそうです(試してません)。いえ、このような機能モリモリのプラグインの利用はできるだけ避けたい人もいると思います。使いたくないのかを言語化するのは少し難しいのですが、ざっくりと言うなら以下です。他の既存プラグイン(利用中のプラグイン)と責務が被る責務過多なモジュールはバグりやすく修正大変なことが多い細かく挙動をカスタマイズするのが難しい、もしくはできない単純に、easyだがsimpleじゃないものが好きじゃないとりわけnvim-metalsに関しては、nvim-lspconfigのmetalsの設定と共存できないという制限があり、いろいろと不便に感じました。否定的な意見を書きましたが、この手のプラグインを使うかどうかは完全に個人の好みの問題です。問題なければ公式が提供しているnvim-metalsを使うのが手軽だと思います。この記事はフルスタックなプラグインを使いたくない人向けです。本題ここからは実際にmetalsをまともに使えるようになるまでの手順を周辺情報含めて書き連ねていきます。長いと思ったらコマンドや作業手順だけ適当にピックアップしてください。metalsのインストール公式のプラグインを使わない場合、まず最初につまずくのがmetalsのインストール方法です。ドキュメントには載ってませんし、調べてもほとんど出てきませんでした。scalaのエコシステムになれている人であれば直感で解決できるのかもしれませんが、私はscala初心者なため苦戦しました。結論としてはCoursierでインストールできました。CoursierはScala製ツールをインストール機能があるようです。web.CoursierはScalaアプリケーションおよびアーティファクトマネージャである。Scalaアプリケーションをインストールし、Scalaの開発環境を構築することができる。ウェブからアーティファクトをダウンロードし、キャッシュすることができる。nvim-lspconfigの設定この記事ではnvim-lspconfigの設定方法については解説しないので、よくわからない方は他の記事を参考にしてください。nvim-lspconfigのmetalsのドキュメントはこちらです。sbtの組み込みBSPを利用するように設定するこの取り組みで最も大変だった箇所です。metalsの諸々metalsはコード補完やコードジャンプのためにScalaプロジェクトをビルドします。いう仕組みだそうです。BSPについては以下の記事などを参照してください。https://build-server-protocol.github.io/docs/specificationhttps://blog.magnolia.tech/entry/2021/01/06/225117BSPに関しては全体的によく分かっていないので、この記事の内容を正しいものだと思わず雰囲気だけ感じ取ってください。metalsはデフォルトでbloopというBSPを使うようなのですが、手元のプロジェクトではこれがうまく動かずいろいろなトラブルが発生しました。https://scalacenter.github.io/bloop/もしかしたら、プロジェクトの構成によっては問題無く動くのかもしれません。その場合はこのセクションの対応は不要です。結論として、私の環境ではbloopではなくsbtの組み込みBSPを使うと解決しました。BSPを切り替える方法はMetalsの公式ドキュメントにあります。Codeもしくは公式提供のプラグインを前提として解説が書かれているため、あまり参考になりません。実行してね(超意訳)」とありました。なんとなくLSPっぽい雰囲気がします。Code向けの説明ですが、neovim向けの公式プラグインであるnvim-metalsにも対応するコマンドがありました。コマンドを実行しているようです。この関数をコンパクトなneovimコマンドにすると以下のようになります。引数の0は現在のバッファを指します。})neovimでsbtプロジェクトを最初に開いたときに、このコマンドを実行してください。プロジェクトのビルドが始まり、それが終われば補完やコードジャンプが使えるようになります。タイミング悪くLS起動中に実行すると動かないので数秒待ってから実行しましょう。一度実行したら次に開くときは不要です。Clientのluaインターフェースです。gitignoremetalsを使う場合は以下をgitignoreに登録しておくといいです。.metalsmetals.sbtリポジトリのgitignoreに登録しづらい場合は、ユーザーのグローバルなgitignoreかローカルのリポジトリ限定のgitignoreに登録しましょう。https://git-scm.com/docs/gitignore終わりに本記事ではnvim-metalsを使わずにnvim-lspconfigでmetalsを使う方法のとっかかりを解説しました。同じ要領で必要なコマンドや設定のみnvim-metalsから真似してくればいいはずです。一応基本的な機能は動くようになりましたが、nvim-lspconfigでは対応していない機能もあるので全機能を手軽に使いたいのであれば公式プラグインがいいかもしれません。公式プラグインがもう少しシンプルなら使いたかったのですが...少し愚痴ってしまいましたが、やはりLSPは凄いです。これがなかった時代と比べればかなり楽に対処できました。コード補完ツールやテキストエディタプラグインがありましたし、インターフェースや挙動がバラバラで対応が大変でした。BSPは今回始めて知りましたが便利そうなプロトコルですね。今後の発展が楽しみです。uplusバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。