VSCodeでSpringBoot+Kotlinの環境を整えてみる
はじめに
VSCode で SpringBoot + Kotlin の開発が可能なのか調べるために簡単なログイン機能と WebAPI を実装し確かめてみた結果をまとめます。
結論としてはゴリゴリ開発するのは難しいと思いました。
確かめるために作ったプロジェクト
ちなみに... IntelliJ を使わない理由
Kotlin を書く際に一番いいツールは間違いなく IntelliJ だと思います。開発元が同じですし。
IntelliJ の無料版では Kotlin/Java はサポートされているのですが、他の言語がサポートされていません。
フロントエンド(Vuejs/React + TypeScript)とサーバーサイド(SpringBoot + Kotlin)を同時に記述していく開発スタイルを取りたいので、どちらもそこそこにかける VSCode を使いたいのです。
有料版の IntelliJ を買えば全て解決ですね
拡張機能について
VSCode で Spring Boot + Kotlin を書くに当たって、以下の拡張機能をインストールしています。
有効に使えなかったものも含まれています。
fwcd.kotlin
VSCode 用の Kotlin の拡張機能です。
下記のツールを利用して、VSCode 上でシンタックスハイライトやデバッグ実行をできるようにしてくれます。
詳しい検証結果は後述。
vmware.vscode-boot-dev-pack
Spring Boot の Java 用の拡張機能のセットです。
何らかの機能は使えるかと思いましたが、何も動かなかったです。
vscjava.vscode-gradle
Gradle 用の拡張機能です。
Activity Bar (VSCode の左端のアイコンが並んでいるところ)から、Gradle のタスクを実行できるようにしてくれます。
今回はbuild.gradle.kts
のように Kotlin で設定を記述しましたが、問題なく認識してくれました。
拡張機能経由のbootJar
で作成した jar も実行することができました。
vscjava.vscode-java-pack
Java 用の拡張機能です。
Kotlin と Java の連携も確かめたかったのですが、VSCode + Kotlin の時点で思ったより上手くいかず調査を断念 ...
検証ポイント
デバッグ実行できる
fwcd.kotlin
の機能でできます。
VSCode の実行機能と連携してくれますが、ビルドはしてくれないので実行前にgradle build
する必要があります。
実行前にビルドするように workspace ファイルに設定を加えることで特に意識しなくてもいいようにしました。
workspace の設定について
"tasks": {
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "./gradlew build -x test",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"close": true
}
},
]
}
"launch": {
"version": "0.2.0",
"configurations": [
{
"type": "kotlin",
"request": "launch",
"name": "Launch",
"projectRoot": "${workspaceFolder}",
"mainClass": "com/example/demo/DemoApplicationKt",
"preLaunchTask": "build" // ここ!
}
],
"compounds": []
},
また、ファイル名と一致しているクラスでないとブレークポイントをセットしてもプログラムを止めることができませんでした。
(最初はそういうものなのかと思ったのですが、IntelliJ ではファイル名とクラス名が一致していなくてもプログラムが止まったので拡張機能のバグでしょうか)
以下、余談。
Kotlin は初心者なのですが、ファイル名とクラス名を一致させるべきものなのでしょうか?
IntelliJ でもファイル名とクラス名が一致している時にはファイル名から拡張子の kt が省略される機能がありましたし。
フォーマットできる
できます。
fwcd.kotlin
の機能の一つです。
フォーマッターにはktfmtを使用しています。
コード補完される
fwcd.kotlin
の機能でコード補完されますが、不安定さがありました。
ライブラリのクラスはコード補完時に import 文も書いてくれましたが、自前で作ったクラスはコード補完されない時がありました。
ホットリロードされる
可能です。
VSCode の拡張機能ではなく、spring-boot-devtoolsライブラリにて、コードのビルド後にアプリケーションを再起動してくれます。
一つ注意が必要なのはあくまでビルド後なので、自らビルド(gradle なら gradle build
)し class ファイルを更新しないとホットリロードされません。
(当たり前の話といえばそうなのですが、VSCode + Spring Boot + Java 環境ではコード保存後に自動ビルドしてくれるようになっていて Kotlin 環境では自前でビルドしないといけないのに気付けず苦戦しました)
テストメソッドが実行できる
できるといえばできるのですが期待通りというほどではなかったです。
もちろん、Gradle にてテストメソッドを実行することはできます。
どうせならTest Runner for Javaのように VSCode のTesting API
と連携し、テストメソッドを GUI から実行させたいところです。
これは Kotlin にて同等の機能を有する拡張機能がないのでできませんでした。
まとめ
「はじめに」にも少し書きましたが、LSP・デバッガが VSCode で使えるのでコーディングはできますが開発者体験がいいとはいえない印象でした。
もう少し拡張機能が強化されて痒い所に手が届くようになれば十分開発できるのかなと思います。
Discussion