JSUG勉強会 2020その1 Spring x Kotlinに出席した際に取ったメモを共有します。
非常に簡易的ですが、少しでも参考になれば幸いです。
KotlinでSpring 完全理解ガイド (@ngsw_taro さん)
XXを使えばKotlinで簡単にSpring開発を始められる
Spring Initializr
Intellij IDEA(有償版)
Kotlinでもアノテーションを使ってbean登録やハンドラ定義
Kotlinはデフォルトで継承しないため、serviceクラスにopen修飾子をつける必要がある。
がKotlinのallopenプラグインやkotlin-springプラグインを用いれば、自動でopen扱いしてくれる。
ちなみにSpring Initializrで生成したプロジェクトには最初から設定されている。
バリデーションに注意が必要。
Javaの感覚で
class Body {
@NotNull val value: Int
}
と書くとバリデーションがかからない。
class Body {
@field:NotNull val value: Int?
}
こう書く。
Kotlin用DSLを使った比較的新しいbean登録やハンドラ定義
Bean Definition DSL
Router DSL
Linter
ktlint いわゆるLinter兼Formatter
Gradleプラグインがある。
IntelliJ IDEA用の自動設定もある。
WebFluxでKotlinのコルーチンが便利
Kotlinにはコルーチンがある。
Reactor対応のライブラリが公式である。
Ktorがいい感じ
・JetBrains公式
・非常に薄く、余分な機能は3rdパーティー任せ
・DSL
・ノンブロッキング
KotlinでもJunitを使ったテスト
Kotlin用の拡張関数 expectBodyを使う。
アサーションライブラリはAssertJを使っている。(もちろんKotlin対応)
メソッドチェーンで書いていく感じが気に入っている。
また、assertkが気になっている。
KotlinでモックするならMockKがいい感じ。
コルーチンの場合も対応。
おまけ:DBアクセスはどうしているか
JDBCテンプレートを使っている。
生SQLを書いて、クラスに地道にマッピングしている。
exposedもJetBrains製で良さそう。
Spring 5.2におけるKotlinサポート(@gumimin さん)
Spring 5.2からSpringの公式ドキュメントにKotlinのコードも追加された。
Router Functions
従来のアノテーションベースとは異なる新たなルーティング方法
WebFlux.fn → Spring 5から
WebMVC.fn → Spring 5.2から
Functionalなルーティング方法
MockMvc DSL
以前のメソッドチェーンよりもスッキリしてわかりやすい
@ConfigurationProperties
複数のプロパティへ一括でバインディング
Relaxed Bindingが効く
Boot 2.2.1から@ConstructorBindingでコンストラクタを通じimmutableで設定値を取得できる。
@Compornent や @EnableAutoConfigurationが必要になった。
コルーチン対応
コルーチンとは
・処理の中断/再開が容易な計算インスタンス
・計量スレッドみたいなもの
・async/awaitスタイルで記述できる
・スコープの概念により、コルーチン同士の依存関係を管理しやすい
・他のReactive Streamsに準拠したデータ型への変換モジュールが提供されている
WebFluxのコルーチン対応によってReactorではなくコルーチンの型を使用できるようになり、よりKotlinらしく、簡単に並列処理ができるようになった。
Reactiveにプログラミングできるとパフォーマンスがかなりよくなる。
おまけ
The State of Kotlin Support in Spring がオススメ動画
感想
KotlinでSpring Bootを書く際の注意点やコツのようなものがかなり学べて良かったです。
自分もSpring Initializrから始めていこうと思います。
また、Web Fluxについて単語は聞いたことがあるレベルだったので、もう少し概念を理解し、実際にJavaでも良いので書いてみようと思いました。
改めまして、登壇者・運営の皆様本当にありがとうございました。