IntelliJ IDEA へのインポート

目的

sbt を使ったビルドを IntelliJ IDEA にインポートしたい。

手順

IntelliJ IDEA は JetBrains社が開発した IDE で、Community Edition は Apache v2 ライセンスの元で公開されている。IntelliJ は sbt を含む多くのビルドツールと連携してプロジェクトをインポートする。

IntelliJ IDEA にビルドをインポートするには:

  1. Plugins タブから Scala プラグインをインストールする:
    IntelliJ
  2. Projects から build.sbt を含むディレクトリを開く:
    IntelliJ
  3. インポートが完了したら、Scala ファイルを開いてコード補完が動作することを確認する。

IntelliJ Scala プラグインは独自の軽量コンパイルエンジンでエラーを検出する。高速だが誤検出することもある。compiler-based highlighting に従い、IntelliJ を Scala コンパイラでエラーハイライトするよう設定できる。

IntelliJ IDEA のデバッガー

  1. IntelliJ は、コードにブレークポイントを設置できるデバッガーを持つ:
    IntelliJ
  2. ユニットテストを右クリックして「Debug '<test name>'」を選択すると対話的デバッグを開始できる。または、ユニットテスト近くのエディタ左側の緑の run アイコンをクリックしてもよい。テストがブレークポイントに達すると、変数の値を確認できる:
    IntelliJ

デバッガーセッションの操作方法の詳細は、IntelliJ ドキュメントのコードのデバッグを参照。

代替方法

IntelliJ IDEA のビルドサーバーとして sbt を使う(上級者向け)

IntelliJ にビルドをインポートするということは、実質 IntelliJ をビルドツール兼コンパイラとして使うことになる(compiler-based highlighting も参照)。多くのユーザーはその方式で満足しているが、コードベースによってはコンパイルエラーの一部が誤検出になる、ソースを生成するプラグインとうまく連携しないなど、sbt と同一のビルドセマンティクスでコーディングしたい、といった場合がある。幸い、現代の IntelliJ は Build Server Protocol (BSP) 経由で sbt を含む代替の「ビルドサーバー」をサポートしている。

IntelliJ で Build Server Protocol (BSP) を使う利点は、実際のビルド作業に sbt を使うことである。横で sbt セッションを起動していたようなプログラマーなら、二重コンパイルを避けられる。

Import to IntelliJ BSP with IntelliJ
Reliability ✅ Reliable behavior ⚠️ Less mature. Might encounter UX issues.
Responsiveness ⚠️
Correctness ⚠️ Uses its own compiler for type checking, but can be configured to use scalac ✅ Uses Zinc + Scala compiler for type checking
Generated source ❌ Generated source requires resync
Build reuse ❌ Using sbt side-by-side requires double build

IntelliJ で sbt をビルドサーバーとして使うには:

  1. Plugins タブから Scala プラグインをインストールする。
  2. BSP 方式を使うには、IntelliJ を終了し、既存の .idea ディレクトリがあれば削除する。
  3. ターミナルで sbt bspConfig を実行して .bsp ディレクトリを生成する。
  4. IntelliJ を開き、build.sbt ファイルを開く。プロンプトが表示されたら BSP project を選択する:
    IntelliJ
  5. インポートが完了したら、Scala ファイルを開いてコード補完が動作することを確認する:
    IntelliJ

一部のサブプロジェクトを BSP から除外するには、次のセッティングを使う:

bspEnabled := false
  • Preferences を開き、BSP を検索して「build automatically on file save」にチェックを入れ、「export sbt projects to Bloop before import」のチェックを外す:
    IntelliJ

コードを変更して保存すると(macOS では Cmd-S)、IntelliJ が sbt を呼び出して実際のビルドを行う。

詳細は Igal Tabachnik さんの Using BSP effectively in IntelliJ and Scala も参照。

sbt セッションへのログイン

We can also log into the existing sbt session using the thin client.

  • Terminal セクションで sbt --client と入力する: IntelliJ

これで IntelliJ が起動した sbt セッションにログインできる。その中で testOnly や他のタスクを、すでにコンパイル済みのコードに対して呼び出せる。