Scala入門記008 sbtでマルチプロジェクト その1

ご無沙汰してしまっていました。。。
しばらく前に下書きしたマルチプロジェクトの記事を清書してみました。


ある程度のプロジェクトであれば、複数のサブプロジェクトに分けて開発することも多くなります。
モジュールを分けたり、ビルド単位を分けたかったり事情は色いろあるとは思いますが、分けると色々便利だったりします。
そういうことでsbtのマルチプロジェクトを試してみたいと思います。

基本的に始める sbt - マルチプロジェクト・ビルドの内容から試してみます。
Scala入門記の目次はこちらです。

ビルドの定義

まずはビルド定義だけ作成してみます。
ディレクトリ構成はこんな感じです。

  • build.sbt
  • project
  • project1
    • build.sbt
  • project2
    • build.sbt

build.sbt

これは普通のsbtプロジェクトと同様です。
Scala入門記003 初めてのsbt - うさばかSE Blog3の時とnameだけ違います。

このプロジェクトを(一般的かはわかりませんが)ルートプロジェクトと呼びます。

name := "scala-sample-002"

version := "1.0"

scalaVersion := "2.10.3"

project1/build.sbt

「サブプロジェクト1」としてproject1というディレクトリを用意しました。
このビルド定義はproject1ディレクトリにbuild.sbtという名前で配置しました。
ルートプロジェクトと同様にnameだけが変えてあります。

name := "scala-sample-002-1"

version := "1.0"

scalaVersion := "2.10.3"

project2/build.sbt

「サブプロジェクト2」も同様にproject2というディレクトリを用意しbuild.sbtという名前で配置しました。
これもnameだけが異なります。

name := "scala-sample-002-2"

version := "1.0"

scalaVersion := "2.10.3"

project/Build.scala

順序が前後しましたが最後に本命のビルド定義ファイルです。
本当はこのファイルだけですべてが記述できるのですが、build.sbtとBuild.scalaと分けて徐々に慣れていく作戦です。

拡張子の通りこれはScalaプログラムです。

import sbt._

object ScalaSample002Build extends Build {
  lazy val root = Project(
    id = "scala-sample-002",
    base = file(".")
  ) aggregate(project1, project2)

  lazy val project1 = Project(
    id = "scala-sample-002-1",
    base = file("project1")
  )

  lazy val project2 = Project(
    id = "scala-sample-002-2",
    base = file("project2")
  )
}

root, project1, project2の3つのプロジェクトを定義しています。
aggregateというメソッドでrootにproject1とproject2を関連させている感じでしょうか。


IDE対応

マルチプロジェクトで気になるのが各IDEの対応状況です。
業務で使えるIDEを選ぶには重要な点になるかと思います。

Eclipse

まずはEclipseです。

sbt eclipse

Eclipseプロジェクトにしてインポートしてみたのがこのスクショです。

f:id:t_hachinohe:20140117020227p:plain

プロジェクトはmavenなどと同じように複数に分かれてそれぞれのプロジェクトになります。

残念ながら、なぜかEclipseではルートプロジェクトはインポートできませんでした。
Eclipse(正確にはsbteclipse?)がマルチプロジェクト対応しているかという判断はとりあえず保留ということにします。

IntelliJ IDEA

次はIntelliJ IDEAです。

sbt gen-ide

IntelliJ IDEAプロジェクトにして開いたのが次のスクショです。

f:id:t_hachinohe:20140117020519p:plain

Eclipseとは異なりこっちはとても良い感じです。
私の中でIntelliJ IDEAの評価が急上昇しました(^_^)


ソースコード

今回のソースはGitHubに「008」のタグでpushしてあります。
thachi/scala-sample-002 at 008 · GitHub


まとめ

今回はとりあえずsbtのマルチプロジェクトを作ってみました。
今のところIntelliJ IDEAの方が良い感じに感じます。
IDEの対応状況は比べて試しながら今後も評価していきたいと思っています。


Scala入門記の目次はこちらです。