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

                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


                 
 


 
トップページ > 技術情報 > Scala

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

2011年7月 5日

Scala
 
本連載では、Simple-Build-Tool(sbt)を利用した継続的インテグレーション等について扱います。 第一回目となる今回は、Simple-Build-Tool についての説明と、sbt 上での簡単な Scala コードのコンパイルと実行方法を紹介します。

ツール

  • Simple-Build-Tool 0.10.0
  • 言語:Scala または Java

ターゲット

  • Maven に疲れた人
  • 継続的インテグレーションに興味がある
  • 自動テストに興味がある
  • Scala コードを書けるようになりたい

Simple-Build-Tool (sbt) で何ができるのか?

 

ライブラリ依存関係の管理

Java プログラムを記述する際、Apache Maven という Java 用プロジェクト管理ツールを使用することで Maven リポジトリ上に配置されている pom.xml ファイルから Java ライブラリ間の依存関係を解決することができます。

sbt もその資産を利用して依存関係を解決しています。 Maven では冗長な XML 形式のファイルで依存関係を管理していますが、 sbt ではもっとスマートに記述することができます。(これについては次回解説します。)

実は Maven3 からは冗長な XML 形式ではなく、 Groovy 等を利用して DSL な形で POM が書けるようになっています。しかし、筆者の個人的な見解ではまだ冗長に感じます。 (参考)

対話型シェルによるコマンド実行

ソースコードのコンパイル、テスト等のコマンドを対話型シェルから実行できます。 また、設定ファイルも Scala コードで記述できるので、自分で好きなコマンドを定義できます。 また、ファイル変更検知によるコマンド実行もできるので、継続的なビルドやテストを行うことができます。

sbt は Scala 専用ビルドツールとして解説されることが多いですが、 Java ビルドツールとして使用できます。 Scala と Java コードの混ざっているプロジェクトであっても使用することができます。 ぜひこの機会に sbt を試してみましょう。

sbt を試してみよう

 

ダウンロード

2011/07/01 現在の sbt の最新バージョンは0.10.0です。
以下の URL からダウンロードします。
http://repo.typesafe.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/0.10.0/sbt-launch.jar

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

プロジェクト用のディレクトリを作成します。 ここでは ~/prog/sbtfirst というディレクトリを作成しました。
(以下、プロジェクトディレクトリと呼ぶことにします。)

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

プロジェクトディレクトリに以下の図の構成となるようディレクトリを作成します。

.
├── bin
└── src
       ├── main
       │      └── scala
       └── test
               └── scala

先ほどダウンロードした sbt-launch.jar はプロジェクトディレクトリ内の bin/ に移動させます。

sbt-launch.jar 起動用のスクリプトを用意

Windows 環境でもUnix 環境でも sbt を実行可能にするため、プロジェクトディレクトリ内に以下のファイルを用意します。

Unix 用 sbt 起動スクリプト

bin/sbt
#!/bin/sh
exec java -XX:MaxPermSize=256m -Xmx512M -Dfile.encoding=UTF-8 -jar `dirname $0`/sbt-launch.jar "$@"

また、スクリプトを実行可能にします。

$ chmod u+x bin/sbt

Windows 用 sbt 起動スクリプト

bin/sbt.bat
set SCRIPT_DIR=%~dp0
java -XX:MaxPermSize=256m -Xmx512M -jar "%SCRIPT_DIR%sbt-launch.jar" %*

ここまでの流れで、プロジェクトディレクトリ構成は以下のようになります。

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

sbt の実行

ターミナル(Windows ならコマンドプロンプト、Unix ならシェル)を起動し、プロジェクトディレクトリに移動します。
プロジェクトディレクトリで下記のコマンドを実行します。

Unix の場合

$ bin/sbt

Windows の場合

> bin\sbt

コマンドを実行すると、Scala のダウンロード等を自動的に行った後、対話的に文字が入力できるようになったと思います。
これで sbt での開発ができるようになりました。

sbt 0.10 では ~/local/bin などのディレクトリに配置することでインストールする方法を推奨していますが、プロジェクトのソースコードをバージョン管理システムで管理する上で、チェックアウト時に一発で環境が整う方が手順として楽になります。そのため、上記の手順のようにプロジェクトのファイル構成に含めてしまうことをお奨めします。

実際に sbt で開発をしてみよう

 

試しに先程起動した sbt で run とコマンドを打ってみましょう。
ソースファイルが無いため、"No main class detected."というメッセージが表示された思います。
(sbt を終了したい場合は exit コマンドで sbt を終了できます。)

ソースコードを書こう

以下の場所に Scala のソースファイルを作成します。

src/main/scala/HelloWorld.scala
object HelloWorld {
  def main(args: Array[String]) {
    println("Hello Scala World!")
  }
}

sbt を起動し、run コマンドを実行してみましょう。

> run

"Hello Scala World!" が表示されたことと思います。

継続的に実行してみよう

sbt はソースファイルの変更を検知し、コマンドを自動的に実行する機能があります。
コマンド名の前に ~(チルダ) を付けることで継続的に実行できるようになります。

> ~run

このコマンドを実行した状態で、先程のソースファイルを以下のように変更してみましょう。

src/main/scala/HelloWorld.scala
object HelloWorld {
  def main(args: Array[String]) {
    println("Hello SBT World!")
  }
}

この変更したコードを保存すると、自動的に run コマンドが実行されて "Hello SBT World!" が表示されたことと思います。
この機能はソースコードを変更するたびにいちいちコンパイルして実行する手間が省けたり、自動的にテストを実行するといった ことを可能にします。この機能は非常に開発者を楽にする仕掛けとなっていて、これだけでも sbt を使用する価値があるといってもいいでしょう。

頻繁に使用するコマンド一覧

頻繁に使用するコマンドを以下にまとめます。

コマンド処理内容
compileソースコードのコンパイル
runソースコードの実行
tesテスト実行
test-quickテスト実行(変更されたファイルのみ)
test-onlyテスト実行(引数で与えたクラスのみ)
consoleScalaのREPLを起動
docScalaDoc生成
clean成果物の削除
exitsbtの終了

表:頻繁に使用するコマンド一覧

まとめ

 

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

  • Simple-Build-Tool についての説明
  • sbt 上での簡単な Scala コードのコンパイルと実行方法

次回は、依存関係の解決などの基本的な設定方法について解説します。


関連するエントリー

 
 
現在ページの上部へ戻る