酢豚が美味しかった。 by HIRAOKA,Yasunobu
初心者ぺちぱーがGitHubでScalaレッスンを始めたぞ。今回はScalaの標準的なビルドツールであるsbtの使い方の続き。クロスビルドとか、設定に使う演算子みたいなメソッドとか、継続ビルド(continuous build)とか、そのへんの話。
Cross-building and library dependencies setting
前回はほぼマニュアル通りの設定ファイルを書いてみた。これにもう少し設定を追加してみよう。
Getting-Started/Cross-buildingによると、crossScalaVersions
を指定しておくと、クロスビルドできるようだ。Scalaカンファレンスで聞いた話だと、バイナリーバージョンが違うと、ライブラリが使用できないらしいので、もしGitHubなんかでライブラリ開発をするような場合は、クロスビルドしておかないと対応可能なはずのバージョンで使用出来ない、なんてことになってしまうのかもしれない。
2.9.0以降のバージョンとScalaTestをbuild.sbtに追加してみよう。
2.10.0を外しているのは、コンパイル後のコードがtarget/scala-2.10
というディレクトリに生成されるから、という理由。2.10以降でバイナリーバージョンが同じになったから? 2.9までは、target/
以下にscala-2.9.2
とかscala-2.9.1
みたいなディレクトリに分かれている。
同じディレクトリに生成されるので、2.10.0と2.10.1を設定していると、+ compile
したときに、ファイル変更が無くても毎回コンパイルされてしまう。+ test
でも同じく、毎回コンパイルされた後にテストが実行される。2.10.1だけにすると、ファイル変更がなければコンパイルは一度だけになった。
なので、2.10系は最新版だけいれておけば良さそうな気がする。
libraryDependencies
には見慣れない演算子みたいなメソッドが使われている。これは後で説明。この設定の意味は、scalaVersion
に応じて、使用するライブラリ(ここではScalaTest)を変更する、というものだ。実は、ScalaTestの場合、デフォルトケースだけで設定しても問題なかったが、設定方法は2.10かどうかで分けて書いてあったので、これにならって設定した。
では、クロスビルドしてみる。タスクの前に+
を付けるとcrossScalaVersions
で設定した各バージョンでタスクが実行されるようだ。
Setting manner
More Kinds of Settingと、harrah / xsbtには、設定に使えるメソッドの説明が記載してあった。
Refresher
:=
上書き
新しい設定値を設定する。または、既存の設定値を上書きする。
Appending to previous values
+=
1つ追加(他の設定値は使用しない)
++=
Seqを追加(他の設定値は使用しない)
既存の設定に設定値を追加する。上書きされない。
Appending with dependencies
<+=
1つ追加(他の設定値を使用)
<++=
Seqを追加(他の設定値を使用)
他の設定値を使用して、設定値を追加する。上書きされない。依存する設定値は1つでも複数でもいいらしい。
Transforming a value
~=
現在の設定値を変換
Computing a value based on other keys' values
<<=
他の複数の設定値を使用して、設定を変更する
Getting-Started/More Kinds of Settingを読むと、依存する複数の設定値を使用して、設定値を決めることができるようだ。しかし、harrah / xsbtを読むと、他の全てのメソッドはこの<<=
で書けるらしい。新規の設定値の場合はどうなるんだろうか。このへんがまだよく分かってない。
Continuous build
Continuous build and testには~
をタスクの前に付けると、ファイル変更を検知してタスクを実行できるという記載がある。
To speed up your edit-compile-test cycle, you can ask sbt to automatically recompile or run tests whenever you save a source file.
Make a command run when one or more source files change by prefixing the command with ~. For example, in interactive mode try:
> ~ compile
Press enter to stop watching for changes.
You can use the ~ prefix with either interactive mode or batch mode.
なので、ファイル変更の度にテストを実行する場合は、~ test
となる。クロスコンパイルする場合は、~ + compile
でいけた。
Conclustion
これでsbtを使って複数バージョンでテストしたり、依存ライブラリを管理できるようになったんじゃないか!?やったね!まとめ!
- クロスビルドの設定と実行方法
- 依存ライブラリの設定
- ファイル変更を監視して特定のタスクを実行する方法
Reference