Micronaut
- JVMベースのフルスタックフレームワーク。
- Java, Kotlin, Groovyが使える。
- SpringBootと比較して起動が早くメモリ消費も抑えられるらしい。
今回は環境構築とHelloWorldを返すAPIの作成まで行います。
Kotlinに触れてみたかったので言語はKotlinを使用します。
環境作成
Micronautをインストールします。
SDKMANを使用します。
SDKMANのインストール
$ curl -s "https://get.sdkman.io" | bash
Micronautのインストール
$ sdk install micronaut
$ mn --version
プロジェクトの作成
mn create-app
コマンドを使用する事でプロジェクトを作成します。
今回はhelloworld
プロジェクトを作成します。
$ mn create-app example.helloworld --lang=kotlin
| Application created at hogehoge/helloworld
オプションとして--lang=kotlin
を指定する事でkotlinでプロジェクトが作成されます。
作成したプロジェクトの中身はこちら。
$ tree helloworld
helloworld
├── README.md
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── micronaut-cli.yml
├── settings.gradle
└── src
├── main
│ ├── kotlin
│ │ └── example
│ │ └── Application.kt
│ └── resources
│ ├── application.yml
│ └── logback.xml
└── test
└── kotlin
└── example
└── HelloworldTest.kt
HelloWorldを返すAPIを作成
src/main/kotlin/example/controller/HelloController.kt
を作成します。
ちなみに配置はcontroller
以下でなくとも大丈夫です。
package example.controller
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
@Controller()
class HelloController {
@Get("/")
fun index(): String {
return "HelloWorld"
}
}
Graldeのrun
コマンドで実行します。
$ ./gradlew run
> Task :kaptKotlin
注意:Creating bean classes for 1 type elements
> Task :run
13:43:38.802 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 1980ms. Server Running: http://localhost:8080
localhost:8080
にアクセスしてみます。
$ curl -X GET http://localhost:8080/
HelloWorld
HelloWorld
が返却されました。
テスト
せっかくなのでController
のテストも用意します。
test/kotlin/example/controller/HelloController.kt
を用意します。
package example.controller
import io.micronaut.context.annotation.Property
import io.micronaut.http.client.HttpClient
import io.micronaut.http.client.annotation.Client
import io.micronaut.runtime.server.EmbeddedServer
import io.micronaut.test.annotation.MicronautTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import javax.inject.Inject
@MicronautTest
class HelloControllerSpec {
@Inject
lateinit var server: EmbeddedServer
@Inject
@field:Client("/")
lateinit var client: HttpClient
@Test
fun testHelloWorldResponse() {
val rsp: String = client.toBlocking()
.retrieve("/")
assertEquals("HelloWorld", rsp)
}
}
テストを実行します。
./gradlew test
次にやりたいこと
DB接続してみました。
Micronaut + Kotlin のプロジェクトにてMyBatisを使ってデータベースからデータ取得してみる