Scala入門記012 sbt new

こんにちは。
北海道にも短い夏がやってきました。
暑いうちに海に行ってバーベキューしたいですね。


さて、「Scalaを書こうかな」と思ってsbtプロジェクトを作るとき、build.sbtを書きますよね。
新しくファイルを追加して基本的な設定をコピペして、いつも使うプラグインを追加してプロジェクトの設定をし、設定が済んだらやっとコードを書き始めたりしているかもしれません。

そんな決まりきったプロジェクトの形をテンプレートとして公開し、テンプレートから新規にプロジェクトを作れるためのgiter8という仕組みがあります。
JavaプログラマにとってはMavenarchetypeと同様のものだと考えて良いと思います。


このgiter8の使い方を前から書こうと思っていたのですが、これがsbt0.13.13に公式に取り込まれてとても簡単に利用できるようになっていました。
今日はこの"sbt new"の使い方をまとめたいと思います。
Scala入門記の目次はこちらです。


sbt newについて

公式のドキュメントは http://www.scala-sbt.org/0.13/docs/ja/Hello.html です。

ドキュメントにある通り、sbt newはsbtの0.13.13以降が必要です。
新しく何かをインストール必要はなく、最新のsbtを使うだけで良くなったのはとっても楽ですね。


sbt newをまずは使う

何をするにもまずは使うことが大切です。
さっそくsbt newを使ってみます。

sbt newを呼ぶ

sbt newの使い方は簡単です。
コマンドラインで適当なディレクトリに移動し、

sbt new sbt/scala-seed.g8

と入力すると

name [My Something Project]:

プロジェクト名を聞かれます。

ここではこれに対して

name [My Something Project]: sbt-new-project

と入力してEnterを押すと以下のようなプロジェクトができました。

$ find sbt-new-project -type f
sbt-new-project/build.sbt
sbt-new-project/project/build.properties
sbt-new-project/project/Dependencies.scala
sbt-new-project/src/main/scala/example/Hello.scala
sbt-new-project/src/test/scala/example/HelloSpec.scala

上の3が設定ファイル、Hello.scalaがサンプルの実装、HelloSpec.scalaがサンプルのユニットテストですね。

project/Dependencies.scalaに依存関係が書いてありますね。
もしかしたら、こうやって分けて書くのが推奨されているのかもしれません。

できたプロジェクトを実行してみる

実行は

cd sbt-new-project

でプロジェクトのディレクトリに入って

sbt run

ですね。

ログがそこそこ出て、helloと表示されました。

$ sbt run
(省略)
hello

あとは好きなようにプログラムを書けばokですね。



テンプレートについて

今回使った sbt/scala-seed.g8 のテンプレートはもっともシンプルなものなのでこれだと自分で作っても対して変わらないです。
実用的なテンプレートはどうしたら良いでしょう。

PlayFrameworkの場合

ScalaフレームワークであるPlayFrameworkも以前はTypesafe Activatorというツールでプロジェクトを生成していたところが、今ではsbt newを使うようになっています。
※2.5系からみたいです。

詳しくはこちら。
https://www.playframework.com/documentation/2.6.x/NewApplication


他のテンプレートは?

まずは、使いたいプロダクトがテンプレーとを提供しているか確認ですね。


でも、githubでプロジェクトを探してみるのが早い気がしました。
https://github.com/search?l=Scala&q=.g8&type=Repositories


PlayFramworkのテンプレートもすぐ見つかります。
https://github.com/search?utf8=%E2%9C%93&q=.g8+playframework&type=Repositories



Myテンプレート

個人的には自分で自分が使いやすいテンプレートを1つは持っておくと良いと思います。
githubで良さげなテンプレートをforkして自分で好みのバージョンに変更し、必要なプラグインを入れておくのが一番使い勝手が良さそうに思います。


まとめ

sbt 0.13.13以降ではgiter8が取り込まれて、sbt newでテンプレートからプロジェクトが簡単に作れます。
テンプレートは探せば用意されているかもしれませんが、ない場合は自分で作ったりもできます。


ということで次回はsbt newのテンプレートについて記事にしようと思います。
Scala入門記の目次はこちらです。