かわばんが

エンジニアの雑記

ウェブアプリケーションエンジニア java/spring/awsとか

「JSUG勉強会 2020その1 Spring x Kotlin」に参加しました

JSUG勉強会 2020その1 Spring x Kotlin」に参加しました。
会場に行く途中、Lodgeというコーワーキングスペースを通ったのですがとっても綺麗でした。
羨ましい。

lodge.yahoo.co.jp

普段Java×Springで開発していますが、今後kotlinを導入できたらと思い参加しました。
備忘録としてメモに残しておきます。

KotlinでSpring 完全理解ガイド 長澤 太郎さん (Ubie株式会社)

speakerdeck.com

Spring Initializerを使えばSpringで簡単に開発できる。

ビルドツールをgradleにするとスクリプトがkotlinで記述される。

アノテーションでbean登録やハンドラ定義ができる

問題1:Kotlinではデフォルトで継承を許可しない。
open修飾子をつけて許可する。(面倒、ダサい)
→allopenプラグインが公式である(kotlin-springプラグイン)
Spring Initializerで作れば最初から入ってるので意識しなくてOK。

問題2:バリデーションに注意
アノテーションがフィールドにかからない。
→@field: をつける
nullを代入できるかどうか定義できる。
→Intの後ろに?をつける。
kotlinにはプリミティブという概念がない。

kotlin用DSLを使って比較的あたらいいbean登録やハンドラ定義ができる

RouterDSLを使ってハンドラを簡単にかけるので便利。
ktlint Linter兼Fomatter おすすめ

WebFluxでkotlinのこルーチンという機能が便利

kotlinにはコルーチンがある。

kotlinでもJUnitを使ったテスト

JUnit5を普通に使える。
アサーションライブラリは何がいい?
→AssertJを使ってる。assertkが気になる。

kotlinでモックするならMockKがいい感じ

基本的なことは一通りできる。

番外:よくある質問

「DBアクセスはどうしてる?」
Ubie株式会社さんではJDBCテンプレート。生のSQL書いてマッピングしてる。

感想

Javaをやってきた人ならkotlin抵抗なく入っていけそうです。
環境は整ってきているのでらしいので、Better Javaとして取り組む価値はありそうだと感じました。

Spring 5.2におけるKotlinサポート 木原 快さん (ヤフー株式会社)

www.slideshare.net

Spring × Kotlin

Spring5で初めてkotlinをサポート
サーバーサイドkotlinが使われるきっかけになった。

どうやって始めるか

Spring Initializerを使う

Java <->Kotlin

コードスニペットにKotlinが追加された

WebMvc.fn

RouterFunctionとは
従来のアノテーションベースとは異なる新たなルーティング方法

Spring5.3から追加された @Configurationアノテーションを使って`Bean定義をしていく

MockMvcDSL

指定するパラメータが増えてきた時、すっきりするのでおすすめ

@ConfigurationProperties

Boot2.1
MutableでのBinding

Boot2.2.0
@ConstructorBindingでImmutable Binding
@ConstructorBindingのみでスキャン対象

Boot2.2.1
@ConstructorBindingでImmutable Binding
@ConfigurationPropertiesScan or @EnableAutoConfigurationが必要

Coroutines

Coroutinesとは処理の中断再開が容易な計算インスタンス。軽量スレットみたいなもの。 WebFluxでいくつかサポートが入った。 →kotlinらしく、より簡単に並列に処理できる

質疑応答

Javaプロジェクトにkotlinを導入する際の注意点は?
nullの部分とか仕様が異なるところがあるので、注意が必要。
考慮しないといけないことが増えるので、あまり混在させないほうがいいかもしれない。

・DBコネクション数についてなんか聞いてました。
聞きそびれました。。
コネクションプールが枯渇するような状況はまだない。って言ってた

・コルーチンの制約はありますか?
ブロッキングはなるべく呼び出さない方がいい。
スレッドに依存するライブラリを使うときとかは苦労する。 ログとか。

感想

自分のレベルでは少し難しかったので、メモにあまり自信がありません。。
実際に触って勉強してみます。