little star's memory

競プロ、なぞなぞ、その他

Kotlinでサーバーサイドのお勉強 第1回 はじめてのMicronaut

競プロでKotlinを長く使っていたので、その知識を応用して何かやってみたくなった。KotlinといえばAndroid開発が有名だけど、サーバーサイドも盛り上がっているらしい。ということで、Kotlinでサーバーサイドの勉強をしてみる。

前にも似たようなことをこのブログでやっていたけど、消しちゃった。そのときはSpring Bootを使っていたけど、気分を変えて別のフレームワークを使ってみる。

というわけで今回はKotlinとMicronautを使って開発のまねごとをやってみる。

Micronautって何?

これがわからない。

公式サイトを読みましょう。

micronaut.io

準備

まずIntelliJ IDEAを立ち上げる。新規プロジェクトを選び、Micronautを選ぶ。これはUltimate限定かな?

言語はKotlin、ビルドシステムはGradle、テストフレームワークはKotestを選んだ。言語は言うまでもない。GradleとMavenの違いが素人すぎてよくわからない。KotestはKotlinのためのテストフレームワークらしいので、Kotlin好きとしては触ってみたい。

これができたら次の画面へ進む。

たくさんあってわからない。試しに動かすだけなので、今回は何も選ばずに進む。

しばらく待つと (13分くらい)、準備が整った。試しに動かしてみる。

動いているっぽい。勿論まだ何も書いていないので動くものはない。なので作っていく。

なにか作る

HelloController.ktというファイルを作り、中身を次のようにする。

package com.example

import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.Produces

@Controller("/hello")
class HelloController {

    @Get
    @Produces(MediaType.TEXT_PLAIN)
    fun index(): String {
        return "Hello World"
    }
}

これでビルドして、localhost:8080/helloにアクセスすると、「Hello World」と表示される。いいね。

@Produces(MediaType.TEXT_PLAIN)について補足。何も指定がなければJSONになるらしい。今回は普通の文字列なので、TEXT_PLAINを指定する。

もうちょっと遊ぶ

TEXT_PLAINの代わりにTEXT_HTMLにしてみる。

package com.example

import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.Produces

@Controller("/hello")
class HelloController {

    @Get
    @Produces(MediaType.TEXT_HTML)
    fun index(): String {
        return "<html>" +
                "<head>" +
                "<title>koboshi's homepage</title>" +
                "</head>" +
                "<body>" +
                "<h1>Hello World</h1>" +
                "</body"
    }
}

流石にHTML直書きは頭が悪いので、もっと賢い方法がありそう。

テスト

参考文献ではJUnitを使っていたが、これをKotestに変換する方法が分からなかった。教えて~。

まとめ

KotlinとMicronautでちょっと動くものを作った。

参考文献

これを見て作った。

guides.micronaut.io

公式サイトには他にも色々ある。気が向けばこれからも勉強していきたい。