目的:MacにScalaをインストールして、ビルドツールやIDEのプロジェクト作成などをやってみる。
Scalaのインストール
Macにscalaをインストールする。
JDKはあらかじめインストールしておく。
brewを使ってscalaをインストールする。
$ brew install scala $ brew install sbt
sbtはscala用のビルドツールでJavaにおけるAntみたいなやつ。
simple build toolの略らしい。
SBT
SBTを使ってみる。プロジェクトのディレクトリから作成する。
$ mkdir hello $ cd hello $ vi build.sbt
build.sbtに以下を書く。
name := "Hello" version := "1.0"
Scalaのソースを書く。ソースの位置はsrc/main/scalaに置くのが一般的なようだ。
$ mkdir -p src/main/scala $ vi src/main/scala/HelloScala.scala
object HelloScala { def main(args: Array[String]) :Unit = { println("Hello Scala") } }
実行してみる。
$ sbt compile $ sbt run [info] Set current project to hello (in build file:~/scala/projects/hello/) [info] Running HelloScala Hello Scala [success] Total time: 1 s, completed 2014/05/14 14:51:18
Javaも実行できる。
$ mkdir -p src/main/java $ vi src/main/java/HelloJava.java
Javaのソースを書く。
public class HelloJava { public static void main(String[] args) { System.out.println("Hello Java"); } }
実行するときに、どれを処理するか番号で選択する。
$ sbt compile $ sbt run [info] Set current project to hello (in build file:~/work/scala/projects/hello/) Multiple main classes detected, select one to run: [1] HelloJava [2] HelloScala Enter number: 1 [info] Running HelloJava Hello Java [success] Total time: 4 s, completed 2014/05/14 14:55:08
外部ライブラリであるjson4sを試してみる。
$ vi build.sbt
name := "Hello" version := "1.0" libraryDependencies += "org.json4s" %% "json4s-jackson" % "3.2.9"
build.sbtにライブラリの情報を追記する。
$ vi src/main/scala/JsonExample.scala
json4sのサンプルコード
object JsonExample extends App { import org.json4s._ import org.json4s.JsonDSL._ import org.json4s.jackson.JsonMethods._ case class Winner(id: Long, numbers: List[Int]) case class Lotto(id: Long, winningNumbers: List[Int], winners: List[Winner], drawDate: Option[java.util.Date]) val winners = List(Winner(23, List(2, 45, 34, 23, 3, 5)), Winner(54, List(52, 3, 12, 11, 18, 22))) val lotto = Lotto(5, List(2, 45, 34, 23, 7, 5, 3), winners, None) val json = ("lotto" -> ("lotto-id" -> lotto.id) ~ ("winning-numbers" -> lotto.winningNumbers) ~ ("draw-date" -> lotto.drawDate.map(_.toString)) ~ ("winners" -> lotto.winners.map { w => (("winner-id" -> w.id) ~ ("numbers" -> w.numbers))})) println(compact(render(json))) }
$ sbt compile
自動的に依存してるライブラリをダウンロードしてくれる。
JsonExampleを実行してみる。
$ sbt run [info] Set current project to hello (in build file:~/work/scala/projects/hello/) Multiple main classes detected, select one to run: [1] HelloJava [2] HelloScala [3] JsonExample Enter number: 3 [info] Running JsonExample {"lotto":{"lotto-id":5,"winning-numbers":[2,45,34,23,7,5,3],"winners":[{"winner-id":23,"numbers":[2,45,34,23,3,5]},{"winner-id":54,"numbers":[52,3,12,11,18,22]}]}} [success] Total time: 3 s, completed 2014/05/14 15:17:22
インタプリタっぽい仕組みのREPLもsbtから使えるようだ。
$ sbt console [info] Set current project to hello (in build file:~/work/scala/projects/hello/) [info] Starting scala interpreter... [info] Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_55). Type in expressions to have them evaluated. Type :help for more information. scala> import org.json4s._ import org.json4s._ scala> import org.json4s.jackson.JsonMethods._ import org.json4s.jackson.JsonMethods._ scala> parse(""" { "numbers" : [1, 2, 3, 4] } """) res0: org.json4s.JValue = JObject(List((numbers,JArray(List(JInt(1), JInt(2), JInt(3), JInt(4)))))) scala> parse("""{"name":"Toy","price":35.35}""", useBigDecimalForDouble = true) res1: org.json4s.JValue = JObject(List((name,JString(Toy)), (price,JDecimal(35.35))))
IntelliJ IDEAを使ってみる
IDEであるIntelliJ IDEAでプロジェクトを作成してみる。
IntelliJ IDEA 13をダウンロードしてインストールする。
http://www.jetbrains.com/idea/download/
Community Editionは無料なのでこれを使う。
IDEAをインストールしたら、設定からでscalaとsbtのプラグインをインストールする。
ディレクトリが自動的に生成されるので、src/main/scala/にJsonExample.scalaをソースに追加する。
実行する。エラーが出たらbuild.sbtをリフレッシュする。
楽ちんである。