Edited at

超sbt入門

More than 1 year has passed since last update.


前書き

僕はscala言語が大好きなのですが、今までsbtっていうものに触れたことがありませんでした。

「scalaにはsbtが必要や!」とか、

「sbt知らないとscala使えないで!」っていうお声をよく聞いたので、今回、ゴールデンウィークにかるーく調べてみました。


sbtって何や

ビルドツールです。

scalaのコードだけでも、scalacコマンドを使用したりすることでスタンドアローンのアプリケーションを生成することができるのですが、sbtを使ったほうが、モジュールやバージョン管理がしやすくなっちゃいます。

rubyでいうbundleみたいな感じかな??

ちなみに、僕が大好きなplayframeworkを動かしているactivatorコマンドさんもsbtのプロジェクトです。

なので、


$ activator run


というコマンドは、


$ sbt run


でも同じ動作になります。

正確には、activatorの中でsbtが動作しているイメージです。

sbtをwebアプリケーション向けにしたのがactivatorであり、

例えば、sbtには新しくwebアプリケーションのテンプレートを提供する仕組みはありませんが、activatorには備わっています。

つまり、


$ sbt new foobar-application


はできませんが、


$ activator new foobar-application


は実行可能です。

コンパイルなどをした場合は、同じようにtargetディレクトリに中間ファイルが生成されます。


どうやって使ったら良いんですか??

これは、サンプルのアプリケーションを用意するのがわかりやすいでしょう。

今回は、動作を確認することを目的にするので、最小のアプリケーションを開発します(同じみのHelloWorldです)。

まずは、sbtをインストールしましょう。

それぞれのOSにおけるインストールの仕方は、下記URLを参照下さい。

http://www.scala-sbt.org/0.13/tutorial/ja/Setup.html

僕はMacOSだったので、brewで一発でした。


$ brew install sbt


sbtが正常に動作することを確認したら、開発のための適当なディレクトリを生成します。

その中にbuild.sbtというファイルを作ります

build.sbtには、最低限、nameとversionだけ書けばオッケーです!


name := "demoProject"

version := "1.0"


一応、sbt本家のサイトでは次のようなディレクトリ構成が推奨されています。


src/
main/
resources/
<メインの jar に含むデータファイル>
scala/
<メインの Scala ソースファイル>
java/
<メインの Java ソースファイル>
test/
resources/
<テストの jar に含むデータファイル>
scala/
<テストの Scala ソースファイル>
java/
<テストの Java ソースファイル>
build.sbt

けど、別にこのディレクトリ構成は必須ではないので、

build.sbtとコンパイルしたいファイルを、同一階層に並べても問題ありません。

しかし、プロジェクトの規模が大きくなったりした場合は、

推奨されているディレクトリ構成のほうが、種類の違うファイル(scala, java, testコード など)をディレクトリごとに分けられるので、このディレクトリ構成が良いでしょう。

コンパイルするコード自体は、適当に次のようなものを用意しました。


object HelloWorld extends App {
println("Hello World!")
}

シンプルに、helloworldだけです。

前述した通り、このファイルの置き場所はどこでも大丈夫です。

では、実行してみます。

まずはコンパイルです。

アプリケーションのルートディレクトリで、次のコマンドを実行してください。


$ sbt compile


次に、runコマンドで実行できます。


$ sbt run



感想

scalaのコードをこんな感じでビルドできるのは強いなーって感じましたね。

scalaの強みは、javaVM上で、インタープリンタでも実行できて、コンパイルしてスタンドアロンでも動作するところにあると思うので、sbtを使えばより強力なコードを書けると思います。

scalacコマンドでは、どうしても複数のファイルをまとめて、同じプロジェクトでってなるときついので・・・。

次回は、少し複雑なscalaプロジェクトの作成にチャレンジしたり、

もう少し、sbtを掘り下げても面白いかなって思います。

今回は、本当にsbtの入門までにて、失礼します。

お気軽にレビュー、コメントお願いします。

今回のコードは僕のGitHubにて公開しています。

https://github.com/pukka/Sbt-demo-project

それでは、失礼します。