最近3日前くらいにKotlinをはじめて完全に理解しました。
よろしくお願いします。
※Kotlin文法はこちらの記事をご参照ください。
30分で覚えるKotlin文法
Scalaはほとんど絶滅した感じで、世はやっぱりJavaかと思う昨今ですが
そういやKotlinが居たなーと思いサーバーサイドのKotlin + SpringBoot
の
現状を調べてみました。
2022年現在(6月) VSCode + Kotlin
・コード補完があんまり効かない。
・デバッグがよくわからない。
・私はIntelliJ Ultimateユーザです。
という致命的な状態であることに絶望しました。
俺たちが本当に欲しかったのは言語の説明ではなく
いい感じにモダンな言語の開発フィーリングであって
VSCodeでキラキラした感じに開発できる環境なのです。
Goでいいじゃん。
そうなんですけど、WEB界最強のFWであるSpringBootでサーバを創りたいんです。
VSCode + Java
でいいじゃん。
最近のJava(VSCode)はかつての隆盛を思わせる無敵の環境になりつつありますが
なにせJava。書きっぷりが冗長すぎる。
そこでJavaとScalaの良さを合わせていい感じにモダナイズされたKotlinですよ。(10年前)
では、さっそくアンサーを記します。
Spring initializer > gradle > kotlin
でプロジェクトを作成してください。
Kotlin + SpringBoot
まではネットに情報があると思います。
dependencies {
...
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testImplementation("org.junit.jupiter:junit-jupiter")
testImplementation("org.junit.jupiter:junit-jupiter-api")
testImplementation("io.mockk:mockk:+")
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude(module = "junit")
exclude(module="junit-vintage-engine")
exclude(module = "mockito-core")
}
}
dependencies {
...
// ↓そりゃそうですよね。
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
@RestController
class SampleController {
@GetMapping("/")
fun getHello() :String {
return "Hello Kotlin"
}
}
@SpringBootTest (
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
class SampleControllerTests {
@Autowired
lateinit var restTemplate: TestRestTemplate
@Test
fun index() {
val entity = restTemplate.getForEntity<String>("/", String::class.java)
Assertions.assertEquals(HttpStatus.OK, entity.statusCode)
}
}
"configurations": [
{
"type": "kotlin",
"request": "attach",
"name": "Kotlin Attach",
"hostName": "localhost",
"projectRoot": "${workspaceFolder}",
"port": 5005,
"timeout": 30000
}
]
ここまで準備できたらターミナルからgradleでデバッグできます。
基本リモートデバッグです。
$ ./gradlew bootRun --debug-jvm
5005リッスンが出てくるので、launch.jsonで設定したやつをアタッチしてください。
Listening for transport dt_socket at address: 5005
次にJUnitのデバッグですが、こちらもリモートデバッグします。
VSCode + Java
はここが強力で、もうJavaでいいじゃんと思ってしまいますが。
$ ./gradlew test --tests "*Tests" --info --debug-jvm
はい、コントローラのデバッグは出来るのですが、JUnit側のソースはデバッグできません。
そこは気合でなんとかしましょう。
KotlinTestとかだとできるんですかね。。
ひとまずこれでKotlinでWebAPIを作成できる環境が整ったと思います。