LoginSignup
0
0

More than 3 years have passed since last update.

Micronaut + KotlinでHelloWorld

Last updated at Posted at 2020-11-07

Micronaut

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以下でなくとも大丈夫です。

HelloController.kt
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を用意します。

HelloControllerSpec.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を使ってデータベースからデータ取得してみる

参考

公式ドキュメント

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0