エディターと sbt だけで Scala をコーディングすることも可能ですが、今日のほとんどのプログラマーは、統合開発環境(略して IDE)を使用しています。Scala で人気のある IDE は、Metals と IntelliJ IDEA の 2 つであり、どちらも sbt ビルドと統合されています。
Metals は、Scala 用のオープンソースの言語サーバーであり、VS Code や LSP をサポートする他のエディターのバックエンドとして機能できます。Metals は、ビルドサーバープロトコル(BSP)を介して sbt を含むさまざまなビルドサーバーをサポートします。
VS Code で Metals を使用するには
build.sbt
ファイルを含むディレクトリを開きます。Cmd-Shift-P
)を実行し、「Metals:ビルドサーバーの切り替え」を選択し、「sbt」を選択します。次の設定を使用して、BSP から一部のサブプロジェクトをオプトアウトします。
bspEnabled := false
コードを変更して保存する(macOS では Cmd-S
)と、Metals は sbt を呼び出して実際のビルド作業を実行します。
インタラクティブデバッグセッションをナビゲートする方法の詳細については、VS Code ドキュメントのデバッグページを参照してください。
Metals は sbt をビルドサーバーとして使用していますが、シンクライアントを使用して同じ sbt セッションにログインすることもできます。
sbt --client
と入力しますこれにより、Metals が開始した sbt セッションにログインできます。そこでは、すでにコンパイルされたコードで testOnly
やその他のタスクを呼び出すことができます。
IntelliJ IDEA は JetBrains によって作成された IDE であり、Community Edition は Apache v2 ライセンスに基づいてオープンソースです。IntelliJ は、プロジェクトをインポートするために sbt を含む多くのビルドツールと統合されています。これは、BSP アプローチよりも信頼性が高い可能性がある、より従来のアプローチです。
ビルドを IntelliJ IDEA にインポートするには
build.sbt
ファイルを含むディレクトリを開きます。IntelliJ Scala プラグインは、独自に軽量のコンパイルエンジンを使用してエラーを検出しますが、高速ですが、不正確な場合があります。コンパイラベースの強調表示によると、IntelliJ はエラー強調表示に Scala コンパイラを使用するように構成できます。
インタラクティブデバッグセッションをナビゲートする方法の詳細については、IntelliJ ドキュメントのコードのデバッグページを参照してください。
ビルドを IntelliJ にインポートするということは、コードを作成している間、IntelliJ をビルドツールおよびコンパイラとして効果的に使用していることを意味します(コンパイラベースの強調表示も参照してください)。多くのユーザーはこのエクスペリエンスに満足していますが、コードベースによっては、コンパイルエラーの一部が誤っている可能性があり、ソースを生成するプラグインではうまく機能しない可能性があり、一般的に sbt と同じビルドセマンティクスでコードを作成したい場合があります。ありがたいことに、最新の IntelliJ は、ビルドサーバープロトコル(BSP)を介して sbt を含む代替のビルドサーバーをサポートしています。
IntelliJ で BSP を使用する利点は、実際のビルド作業に sbt を使用することです。そのため、sbt セッションをサイドで起動していたプログラマーであれば、二重コンパイルを回避できます。
IntelliJ にインポート | IntelliJ での BSP | |
---|---|---|
信頼性 | ✅ 信頼性の高い動作 | ⚠️ まだ成熟していません。UX の問題が発生する可能性があります。 |
応答性 | ✅ | ⚠️ |
正確性 | ⚠️ 型チェックには独自のコンパイラを使用しますが、scalac を使用するように構成できます | ✅ 型チェックには Zinc + Scala コンパイラを使用します |
生成されたソース | ❌ 生成されたソースは再同期が必要です | ✅ |
ビルドの再利用 | ❌ sbt を並行して使用するには二重ビルドが必要です | ✅ |
IntelliJ で sbt をビルドサーバーとして使用するには
Cmd-Shift-P
)を入力して、「既存のソースからプロジェクトをインポート」を見つけますbuild.sbt
ファイルを開きます。プロンプトが表示されたら、BSP を選択します次の設定を使用して、BSP から一部のサブプロジェクトをオプトアウトします。
bspEnabled := false
コードを変更して保存する(macOS では Cmd-S
)と、IntelliJ は sbt を呼び出して実際のビルド作業を実行します。
詳細については、Igal Tabachnik の IntelliJ および Scala での BSP の効果的な使用も参照してください。
シンクライアントを使用して、既存の sbt セッションにログインすることもできます。
sbt --client
と入力します これにより、IntelliJ が開始した sbt セッションにログインできます。そこでは、すでにコンパイルされたコードで testOnly
やその他のタスクを呼び出すことができます。
Neovimは、LSPを標準でサポートするVimのモダンなフォークであり、Metalsのフロントエンドとして設定できます。
MetalsのメンテナーであるChris Kipp氏は、Neovimで包括的なMetalsサポートを提供するnvim-metalsプラグインを作成しました。nvim-metalsをインストールするには、Chris氏のlsp.luaを参考に、$XDG_CONFIG_HOME/nvim/lua/
の下にlsp.lua
を作成し、好みに合わせて調整してください。たとえば、プラグインセクションをコメントアウトし、vim-plugなどの選択したプラグインマネージャーを使用して、リストされたプラグインをロードしてください。
init.vim
では、以下のようにファイルをロードできます。
lua << END
require('lsp')
END
lsp.lua
に従って、g:metals_status
がステータスラインに表示されるはずです。これはlualine.nvimなどを使用して実現できます。
:MetalsInstall
を実行します。:MetalsStartServer
を実行します。gD
を使用します(正確なキーバインドはカスタマイズ可能です)。Ctrl-O
を使用します。K
を使用します。<leader>aa
を使用します。:cnext
や:cprev
などのコマンドを使用して、エラーや警告をナビゲートできます。<leader>ae
を使用します。<leader>dt
を使用してコードにブレークポイントを設定します。K
)でビルドされていることを確認し、次に「デバッグ続行」(<leader>dc
)してデバッガーを開始します。プロンプトが表示されたら「1: RunOrTest」を選択します。<leader>dK
)で変数の値を調べることができます。<leader>dc
)を実行します。詳細については、nvim-metalsを参照してください。
シンクライアントを使用して、既存の sbt セッションにログインすることもできます。
:terminal
と入力して、組み込みターミナルを起動します。sbt --client
と入力します。Neovim内であっても、タブ補完などは問題なく動作します。