2
1

More than 3 years have passed since last update.

【メモ】JSUG勉強会 2020その1 Spring x Kotlin

Posted at

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でも良いので書いてみようと思いました。

改めまして、登壇者・運営の皆様本当にありがとうございました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1