natural born minority
Webアプリを作りたくなりました(仕事ではないですが)。
となれば使うものを選ぶのですが…
(明日、仕事で使う=いわば生きるか死ぬかのメシのタネになる)自分が勉強したかったもの”だけ”をチョイス
しなければ、時間が掛かって死んでしまうわけです。
で考えると、
となるので「コレ全部同時に満たして開発できないか」を試みました。
大まかには以下。
gradle
コマンドが叩ける環境作るgradle init
build.gradle
を編集Application
,Controler
クラスを作る./gradlew bootRun
でSpringBootの起動を確認localhost:8080
に対するリクエストで動くの確認specs2
でテスト書く./gradlew check
でテストが回るのを確認上記から、「今回のキモ」だけ説明していきます。
build.gradle
を編集build.gradle
に以下の編集をします。
repositories {
jcenter()
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE")
}
}
apply plugin: 'scala'
apply plugin: 'application'
apply plugin: 'spring-boot'
dependencies {
compile 'org.scala-lang:scala-library:2.11.8'
compile 'org.springframework.boot:spring-boot-starter-web'
testCompile 'org.specs2:specs2-core_2.11:3.8.6'
testCompile 'org.specs2:specs2-junit_2.11:3.8.6'
}
Application
,Controler
クラスを作るソースフォルダを作ります。
mkdir -p ./src/main/scala
2つのScalaクラスファイルを作ります。
./src/main/scala/Application.scala
package なんでもいいです
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
@SpringBootApplication
class Application {
}
object Application extends App {
SpringApplication.run(classOf[Application], args: _*)
}
./src/main/scala/SampleController.scala
package なんでもいいです
import org.springframework.web.bind.annotation.{RequestMapping, RequestMethod, RestController}
@RestController
@RequestMapping(Array("/api/sample"))
class SampleController {
@RequestMapping(method = Array(RequestMethod.GET))
def data = "hoge"
}
localhost:8080
に対するリクエストで動くの確認上記のクラスを配置し終わったら、以下のコマンドを叩きます。
./gradlew bootRun
以下のURLをブラウザで確認します。
http://localhost:8080/api/sample
“hoge” と表示されれば成功です。
specs2
でテスト書くテスト用のソースフォルダを作ります。
mkdir -p ./src/test/scala
Specs2形式のScalaテストクラスファイルを作ります。
./src/test/scala/SampleControllerTest.scala
package なんでもいいです
import org.junit.runner.RunWith
import org.specs2.mutable.Specification
import org.specs2.runner.JUnitRunner
@RunWith(classOf[JUnitRunner])
class SampleControllerTest extends Specification {
"Scalaでテスト書けるかのテスト" should {
"RESTの返答が固定値に成る、たったそれだけな世界一簡単なテスト" in {
val sut = new SampleController
sut.data must equalTo("hoge")
}
}
}
あとは、
./gradle test
を実行し、 BUILD SUCCESSFUL
と表示されれば、「ScalaでSpecs2を使ったテスト可能な環境」はできています。
*.scala
ファイルのpackage
は省略(デフォルトパッケージ)してはいけません
./gradlew bootRun
がコケますかなり「普通じゃない」組み合わせかもしれないので、ここからの開発は茨の道かもしれません。
Gradle&Scalaの組み合わせは、カンファレンスなどで「sbtじゃなくgradleで…」とか聞きます。
ですがいまいちサンプルな日本語情報が無いので書いてみました。