1bitもわからんけどKotlin (Ktor)してみる
kotlinを触ってみようと思うが
- kotlinを始め、最近のJVM系言語はろくに触ったことがない
- java7くらいの頃にJerseyとかTomcatとかは触ったことある、程度。ant, mavenあたりは知ってる
web系の人なのでフレームワークとしてKtorをチョイス。
公式のプロジェクトジェネレータがある。 https://start.ktor.io/
何もわからないのでNameだけ変更して作成。
手元にjava環境など無い。vscodeのRemoteContainerにて適当にjava環境を作る。
java11と15が選べたが、defaultになっている11をチョイス。LTSだしな。
devcontainer.jsonはshell指定の削除だけ実施してそのまま使う。
何をしたらいいのか全くわからないのだが、生成されたプロジェクトのファイルに一つだけ実行可能ファイルがある。 gradlew
生成されたコンテナ内でおもむろにそれを実行すると、Gradleが動き出したようなログが出る。
shellは戻ってきたが、なにやらdaemon化されたサーバプロセスが生成されたもよう。ポートが開いている。
vscodeがport forwardしてくれたのでブラウザで開く...が、ERR_EMPTY_RESPONSE
とのこと。流石に1文字もコード書いてないのでそんなもんか?
src/Application.kt
がメインというかエントリポイントのあるファイルのようだが...nettyのデフォルトのエントリポイント?が指定されているっぽいことはわかる。
package com.example
import io.ktor.application.*
import io.ktor.response.*
import io.ktor.request.*
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) {
}
...ひとまず公式チュートリアルっぽいものを見る; https://play.kotlinlang.org/hands-on/Creating HTTP APIs with Ktor/01_introduction
どうもさっき使ったプロジェクトジェネレータから始める想定のものではないっぽい。
このチュートリアルが前提?にしている初期環境のリポジトリを見ながらそれっぽくなんとかしてみる; https://github.com/kotlin-hands-on/creating-http-api-ktor
まずデフォルトで生成されているApplication.ktが既にjavaのディレクトリ構成(パッケージ構成のやつ)に沿っていないのだが。動いてるけど。javaのこのあたりはちょっとよくわからない。
上記リポジトリにそってそれっぽく置く。
これは完全にダメなので他の何かを探す。
プロジェクトを初期の状態に戻し、下記ブログを参考にして
fun Application.module(testing: Boolean = false) {
routing { get("/") { call.respondText("Hello, world!") } }
}
な感じにしたら一応hello worldはできた。求めていたのは完全にこれだった。
流石に1bitも知らないところから続けるにはかなり厳しいので出直す。
ここで得られた教訓としては
- java系プロジェクトは前提が非常に複雑なので、遠回りでもシンプルに始めるように頑張ったほうがいい(テンプレ生成に頼らない)
- 公式がそんな使いやすくない(RailsやVueなど公式が凄まじくに丁寧なやつと比べて)
java servletやgradleとかについてミニマルにちゃんと調べてこよう。