ASEホーム サイトマップ 交通アクセス お問い合わせ chineese english
             
                                          
最近の技術情報  一覧

                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


 
トップページ > 技術情報

Simple-Build-Toolで始めるScala開発(第2回)

2011年11月24日

Scala
 

はじめに

 
 第二回目となりました本連載ですが、今回は Simple-Build-Tool を使用したJavaライブラリの依存関係の解決といった基本的なビルド定義方法について解説します。
 また、 Maven を使用した開発から移行する際に参考となるポイントについても解説します。 (本記事では sbt 0.11.1、 JDK 1.6.0_24 を使用しています。)

sbt による基本的なビルド定義方法

 

sbt でのビルド定義方法

 sbt でのビルド定義方法として、以下の2つの方法があります。

  1. ベースディレクトリ内の拡張子が .sbt のファイルに定義
  2. project ディレクトリ内の拡張子が .scala のファイルに定義

1. の方法は、基本的なビルド管理に必要な最低限の設定のみが できるようになっています。通常はこちらのみの使用で特に問題ありません。
2. の方法は、sbt をscalaコードによってさらにカスタマイズして使用したり、「プロジェクト」という 概念を使用してより便利にビルド管理ができるようになっています。

今回は 1. の .sbt ファイルを使用した基本的なプロジェクト管理について解説します。

※ sbt ではどちらか一方の方法だけ使用できるというわけではなく、両方同時に 使用することもできます。 2. の.scala ファイルを使用したプロジェクト管理については次回解説する予定です。

build.sbt ファイルを使用した sbt 設定方法

 

 長々と説明するよりも、実際の.sbt ファイルによる設定例を示した方がわかりやすいので、 以下では実際にプロジェクト管理を行いながら具体的に説明します。

プロジェクトディレクトリの構成

build.sbt ファイルは、プロジェクトディレクトリの直下に配置します。 プロジェクトディレクトリについては、前回の連載を参考にしてください。
build.sbt ファイルを追加したプロジェクトの構成は、以下のようになります。

.
├── build.sbt
├── bin
│      ├── sbt
│      ├── sbt-launch.jar
│      └── sbt.bat
└── src
        ├── main
        │      └── scala
        └── test
                └── scala

build.sbt ファイルの基本的な設定例

 build.sbt の基本的な設定例を以下に示します。

build.sbt
name := "sbt-sample"

version := "0.1"

scalaVersion := "2.9.1"

上記の設定で build.sbt を保存後に sbt を起動すると、プロジェクト名が sbt-sample 、プロジェクトのバージョンが0.1 、プロジェクト内でビルド時に使用される Scala のバージョンが2.9.1に設定されて起動されます。

※ sbt では内部的に Key と Value のペアでプロジェクトの設定を扱っています。 .sbt ファイル内では、 := メソッドでキーに結びついている設定を上書きすることができます。
 また、 .sbt ファイルで設定を行うためには、設定ごとに空行を1つ以上挟まなくてはいけないルールがあるので注意が必要です。

sbt を既に起動している場合、下記のように reload コマンドを行うことで、build.sbt などに書かれているプロジェクトの設定を読み込み直すことができます。

> reload

sbt によるライブラリ依存関係の解決方法

 続いて、プロジェクトで使用するライブラリの依存関係を解決する方法を解説します。
sbt では、ライブラリの依存関係を解決する方法として、以下の2つの方法があります。

  1. プロジェクトディレクトリの中にlibを作成し、その中に依存するライブラリの jar ファイルを配置する
  2. sbt の設定ファイルの中で libraryDependencies を設定する

1. の方法は、 Maven などのリポジトリに登録されていない独自ライブラリなどを使用する際に使用します。(ビルドの際、自動的にクラスパスが設定されます。)

※ただし、依存ライブラリに対してさらに依存ライブラリが存在する場合、全ての依存ライブラリを lib ディレクトリに配置する必要があるため、小規模な開発のみに限定されてしまうでしょう。

本記事では、2. の libraryDependencies を使用した方法を解説します。
この方法の場合、 Maven の設定で使用されている、POM(Project Object Model)形式のライブラリ依存解決方法がそのまま使用できます。そのため、Maven リポジトリ上に存在するJava ライブラリであれば、設定を書くだけで依存関係を解決することができます。

sbt によるライブラリ依存関係解決例(libraryDependencies設定)

 

例として、 scala-time というライブラリを利用して、現在から半年後の日時を出力するプログラムを作成していきます。

プロジェクトディレクトリの構成

プロジェクトディレクトリの構成は以下の通りです。
.
├── build.sbt
├── bin
│      ├── sbt
│      ├── sbt-launch.jar
│      └── sbt.bat
└── src
        ├── main
        │      └── scala
        │               └── Main.scala
        └── test
                └── scala

また、各ファイルの構成は以下の通りです。

build.sbt
name := "scala-time-sample"

version := "0.1"

scalaVersion := "2.9.1"

libraryDependencies ++= Seq(
  "org.scala-tools.time" % "time_2.9.1" % "0.5"
)
Main.scala
import org.scala_tools.time.Imports._
import DateTime.now

object Main extends Application {
  println(now + 6.month)
}

このプログラムを実行するため、 sbt を起動し、 run コマンドを実行します。
$ bin/sbt
> run
実行後、 2012-05-24T13:25:40.017+09:00 といった文字列が出力されます。

Maven を使用した開発から移行する際のポイント

 

ライブラリの依存関係解決方法の比較

maven では、pom.xml の dependencies 要素の中に記述することでライブラリの依存関係を解決します。以下に例を示します。

<dependencies>
  <dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>8.4-701.jdbc4</version>
  </dependency>
  <dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
  </dependency>
</dependencies>

上記のサンプルを sbt で設定する場合、以下のようになります。

libraryDependencies ++= Seq(
  "postgresql" % "postgresql" % "8.4-701.jdbc4",
  "c3p0" % "c3p0" % "0.9.1.2"
)

リポジトリ追加方法の比較

maven では、pom.xml の repositories 要素の中に記述することでライブラリ取得先のリポジトリを追加します。以下に例を示します。

<repositories>
  <repository>
    <id>maven.seasar.org</id>
    <name>The Seasar Foundation Maven2 Repository</name>
    <url>http://maven.seasar.org/maven2</url>
  </repository>
  <repository>
    <id>maven-snapshot.seasar.org</id>
    <name>The Seasar Foundation Maven2 Snapshot Repository</name>
    <url>http://maven.seasar.org/maven2-snapshot</url>
  </repository>
</repositories>

上記のサンプルを sbt で設定する場合、以下のようになります。

resolvers ++= Seq(
  "The Seasar Foundation Maven2 Repository" at "http://maven.seasar.org/maven2",
  "The Seasar Foundation Maven2 Snapshot Repository" at "http://maven.seasar.org/maven2-snapshot"
)

既存の pom.xml を使用して sbt の依存関係定義を行う方法

既に Maven でプロジェクト管理を行っている場合、以下を build.sbt に記述することで依存関係定義が取り込まれます。

externalPom()

また、pom.xml ではなく、別名で管理している場合は以下のように記述します。

externalPom(baseDirectory(_ / "custom-name.xml"))

まとめ

 

ここでは以下のことを解説しました

  • sbt を使用したJavaライブラリの依存関係の解決方法
  • sbt によるビルド定義方法の種類
  • build.sbt による基本的なビルド定義方法
  • Maven を使用した開発から移行する際に参考となるポイント

次回は、scala コードベースのビルド定義によって、より自由なプロジェクト管理を行う方法について解説します。


関連するエントリー

 
 
現在ページの上部へ戻る