BlogBracken

FOR_MYSELF

Kotlin + KtorでKotlinサーバサイドの戸を叩く

Kotlinサーバサイドの戸を叩きます.

この記事は、大阪工業大学 Advent Calendar 2019 の25日目の記事です。

大まかに

Ktorを使ってブラウザ上にカウンタを表示します. 対象はKotlinを知らない人, 所要時間は15分くらいを目安にしています.

環境構築

JDK

始めに, 好きなJDKを好きな方法で導入してください. AdoptOpenJDK辺りがお勧めです.

IntelliJ IDEA

次に, IntelliJ IDEAをインストールします. EditionにはCommunityとUltimateの2つがありますが, 今回の用途ではどちらでも構わないためCommunityを選択します.

またArch Linux*1のユーザであれば, jetbrains-toolboxの導入をお勧めしています.

Ktor Plugin

IDEAをインストールした後, IDEAへKtorのプラグインを導入します. Ctrl + Alt + Sを押してIDEAの設定を開きPluginsの項目を選択, 上のタブからMarketplaceを選びktorと入力し, 出てきた項目のInstallをクリックします. f:id:brackenblack:20191224215246p:plain

インストールが終わると再起動するか聞かれるので, それに従いIDEAを再起動します.

構築

プロジェクトの作成

Ktorを選択 > TemplatingからKotlin DSLを選択 > あとは流れに従う f:id:brackenblack:20191225035338p:plain

プロジェクトが開いてからしばらく待ちます.

コードを書く

src/Application.ktへ以下のように記述します.

package <パッケージ>

import io.ktor.application.Application
import io.ktor.application.call
import io.ktor.html.respondHtml
import io.ktor.routing.get
import io.ktor.routing.routing
import kotlinx.html.body
import kotlinx.html.h2

fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)

@Suppress("unused") // Referenced in application.conf
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
    var count = 0

    routing {
        get("/") {
            call.respondHtml {
                body {
                    h2 { +"Count: ${count++}" }
                }
            }
        }
    }
}

実行

Application.ktを開いた状態でCtrl + Shift + F10で立ち上がります.

アクセスする

https://localhost:8080/ へアクセスするとカウンタが表示されていると思います.

雑感

  • アノテーション地獄から抜け出せて嬉しい.
  • SpringBoot以外のAltとして選ばれる程度にはもっと使われてほしい.
  • これにArrow-ktとか使うとより幸せになれるけれど, そこまでやるならScala + SpringBoot + Catsで良いなと思ったりした.
  • 作り始めのWIPですが, もっと規模の大きい例となるリポジトリは下にあります. もっとちゃんと雰囲気を掴みたい人はこれを読んで頂けると嬉しい.

github.com

*1:他のディストロは分からないけど恐らくおおよそにある