LoginSignup
1
2

More than 5 years have passed since last update.

HTTP4K を最小構成で動かす

Posted at

概要

Kotlin 製の Web アプリケーションフレームワーク HTTP4K を使った最小のアプリケーション開発について説明します。

HTTP4K とは?

サーバーサイドのアプリケーションを開発するための Kotlin 製フレームワークです。
Kotlin Conf 2018 のセッション資料だとサーバーレス環境向けのフレームワークという触れ込みですが、単にマイクロWebアプリケーションを開発するのにも使えます。
README を見ると、テストもしやすい設計になっているようです。

なぜ HTTP4K か?

Kotlin は Java のアプリケーションフレームワークを(ほぼ)そのまま使うことができるため、すでに実績のあるフレームワークを用いるという選択肢もあります。
ただ、その方法だと Java の記法上の制約や NonNull/Nullable の穴による意図しない不具合に注意する必要があり、Kotlin を使うメリットが減少しかねません。
フル Kotlin で開発されたアプリケーションフレームワークを使うことで、その問題は解消されます。

また、フル Kotlin のアプリケーションフレームワークはほかにもありますが、 HTTP4K は純粋にアプリケーション開発にフォーカスして開発されているので、
通常の Web アプリケーション開発のコンテクストで開発をすることができます。

一方で、プロトタイピング目的で小さい Web アプリケーションを Kotlin で開発するのであれば、Spark-Java & Spark-Kotlin という選択肢もあります。
そちらに比べると、HTTP4K は記述量がちょっと多くなると感じました。


使ってみる

Hello world

以下のコードで十分です。

import org.http4k.core.Method
import org.http4k.core.Request
import org.http4k.core.Response
import org.http4k.core.Status.Companion.OK
import org.http4k.routing.bind
import org.http4k.routing.routes
import org.http4k.server.SunHttp
import org.http4k.server.asServer

fun main(args: Array<String>) {
    routes("/hello" bind Method.GET to { _: Request -> Response(OK).body("hello!!") })
            .asServer(SunHttp(8000))
            .start()
}

……これで十分ですが、 import が結構多いので手軽感はやや薄いかもしれないです。

Gradle Application Plugin と組み合わせて使う

Java 用の Gradle Application Plugin を使う場合、また IDE に Kotlin の main メソッドを認識させたい場合、object クラスの main メソッドに @JvmStatic アノテーションを付けるとよいらしいです。

object Main {

    @JvmStatic
    fun main(args: Array<String>) {

あとは build.gradle を修正します。具体的には main メソッドのある object クラスの FCDN を mainClassName で指定します。

build.gradle
apply plugin: 'application'

mainClassName = "jp.toastkid.http4k.example.Main"

//...

これで gradle run を実行すればアプリケーションが起動するようになります。

Fat jar

Fat jar を作りたい場合は以下を追記してください。

build.gradle
jar {
    manifest {
        attributes 'Main-Class'   : mainClassName
    }
    destinationDir = projectDir
    from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}

これで $gradle jar を実行すると Fat jar が出力されます。 出力された Fat jar を使い、 $ java -jar http4k.example-0.0.1.jar を実行すれば、アプリケーションが起動します。

参考

1
2
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
1
2