エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

Kotlin Fest 2024 参加レポート

Kotlin Fest 2024

こんにちは! マルチデバイスチームの小林(@bakobox)とデジスマチームの荒谷(@_a_akira)と大和(@daiwahome0)です。

Kotlinに関する技術カンファレンス「Kotlin Fest 2024」が6月22日に開催されました!*1
エムスリーはひよこスポンサーとして協賛させていただき、弊社社員も何人か参加したので振り返りを行いたいと思います!
(Kotlin Festスタッフとして星川(@oboenikui)も参加していました)

ブース

弊社のブースでは、Kotlin(コトリン)にちなんで「エンジニア トリ診断」を出しました。 いくつかの質問に答えていくと10種類のトリに分類されるというもので、診断結果に対応したステッカーを配りました! 名札のプレートに入れてくださったり、懇親会で会話のネタになったりしていたみたいで良かったです!

トリのステッカーと弊社ブースの様子

ちなみにこのトリ達は弊社のデザイナーがKotlin Festのために作成してくれたものです。とてもかわいい!

また、WebページはCompose HTMLで実装しており*2 、リポジトリも公開されています。

github.com

セッション

聴講したセッションについて振り返っていきます。

まずは小林が聴いたセッションです。

もっとKotlinを好きになる! K2時代のKotlin Compiler Plugin開発

Kotlin Compiler Pluginの仕組みの解説と簡単なプラグインを実際に作ってみるという内容の発表でした。
実践の方では、@Greetableアノテーションをクラスに付けるとgreetメソッドを生やしてくれるプラグインの作成方法が紹介されました。
発表の最後に、発表者が作成されたback-in-time-pluginというプラグインが紹介されました。アノテーションを付けることによって状態の変化が追跡されるようになり、過去の状態に巻き戻すことが可能になるというもので、とても興味深かったです。
Kotlin Compiler Pluginを作ってみたい衝動に駆られました。

speakerdeck.com

Jetpack Compose: 効果的なComposable関数のAPI設計

Composable関数の引数をどうするか問題についての発表です。
他のコンポーネントに依存されやすいコンポーネントはより柔軟に対応できるように設計すべき・逆にそこまで使い回されないものはシンプルに設計すると良いという感じでした。
Composeではコンポーネントをステートレスにして、コンポーネントの外側で状態を管理することがよくありますが、そのコンポーネント内で閉じるような状態であればあえてステートフルにする選択肢もあるよということでした。そうするとプレビューが面倒になるという問題が出てきますが、それはprivateなステートレスコンポーネントとpublicなステートフルコンポーネント両方を用意すれば解決するという話を聞いてなるほどと思いました。

speakerdeck.com

K2のKotlin IDEプラグインの中を覗いてみよう♪

JetBrainsの方の発表です! なぜK2コンパイラを開発することになったのかを詳しく紹介していただけました。中の人から直接聴けるのは貴重です!
以前からコンパイラとIDEプラグインで解析エンジンを共通化していて、これはちょっと珍しいらしいです。両方を開発しているJetBrainsならではという感じがしますね。
解析をいくつかのフェーズに分割し、並列で動くようにしたとのこと。これにより、パフォーマンスが改善するようです。 たまに遭遇する「Syntax highlighting has been temporarily turned off in file ...」というエラーも改善するそうです...!
また最後に初出し情報としてKotlin Analytics APIの紹介がありました。Kotlinのコードを解析するライブラリで、コマンドラインツールとしても公開されるみたいです!

speakerdeck.com

2024年に公開するに相応しいKotlin Multiplatformライブラリを構築する

こちらは荒谷が聴いたセッションです。
スポンサーブースでたまたまスピーカーのAtsushi Enoさんに声をかけて頂き、私のブログを紹介しようとしているとのことだったので拝見しました。 私自身もKotlin Multiplatformのライブラリを公開しているのですが、最初期はJetBrains側からの公式発表もなかったので、Gradle自体のソースコードを分析するか同じようなことをしているリポジトリを探して真似するかしかありませんでした。
今はJetBrainsがテンプレートを作ってくれたり、Atsushi EnoさんがMaven Centralへの上げ方を記事にしてくれているので、昔よりは圧倒的にハードルが下がっています。
このセッションの内容と合わせてみなさんもライブラリを公開しましょう!

speakerdeck.com

話は変わりますが、Kotlin Multiplatform対応のライブラリがまだ数個しかなかった頃、自分のメモ代わりに作っていたリポジトリに今となってはKotlin Multiplatform対応のライブラリが不思議と集まってくるようになりました。 もしKotlin Multiplatformを使いたい方や、ライブラリを作ったよ! という方は気軽にプルリクをくれると嬉しいです。
最近はメンテが疎かになっていて申し訳ないのですが、会場で「とても興味があります!!」と言ってくださったひなりん さんにContributorとして入って頂いたので、今までよりは更新頻度が上がると思います。期待

github.com

CommitログからKotlinの開発を可視化する

こちらも荒谷が聴いたセッションです。
KotlinリポジトリのCommitログからKotlinの開発を可視化するというセッションで、今までにない切り口がとても面白いなと思いました!
前職では2015年のKotlinのバージョンがまだM11(マイルストーン11)あたりからそれなりの規模の新規AndroidアプリをフルKotlinで作成し始め、Kotlinの歴史を一通り追ってきたので、懐かしさを感じられました。技術的な話も面白いですが、こういったセッションを通じて、個人では思いつかない発想を得られるのがカンファレンスの魅力だと思います。

speakerdeck.com

まだ JUnit を使ってるの? kotest を使って快適にテストを書こう

最後に大和が聴いたセッションの紹介です。
私が携わったシステムでは、JavaからKotlinにリプレースしたものや最初からKotlinで書かれたものが入り乱れており、Testing FrameworkはJUnit5で統一されていますがその他のライブラリが揃っていませんでした。
(Mockito vs MockK, AssertJ vs AssertK vs kotlin.test, etc.)
そんな状況もあり、今回情報収集のため拝聴しました。

今回紹介された機能の中で個人的に面白いと感じたのは次の2つでした。

  • Clue: 失敗したときにオブジェクト全体をいい感じにロギングできそう
  • Arb: 境界値テストをいい感じに書ける可能性がありそう

他にも多くの機能が紹介されているので、テストを楽にできないか検証してみます。

まとめ

5年ぶりのオフライン開催ということで大変盛り上がったカンファレンスでした!
前回のオフライン開催ではAndroidで使われている方が多く参加者もモバイル寄りの方が多かったと思いますが、今回は普段サーバーサイドKotlinを書いているよという方も多く見受けられ、KMPを使っているまたは興味があると話してくれる参加者が増えているのが印象的でした。
時代と共にKotlinがいろいろなところで使われるようになっていて嬉しいですね!

後日、エンジニアトリ診断の制作秘話を河合(@vaaaaanquish)と池奥(@Selria1)がまとめてくれるみたいなので期待しましょう。

Have a nice Kotlin! 🐦

We're hiring !!!

エムスリーでは、Kotlinが好きなエンジニアを募集しています!

アプリのBFFサーバーとデジスマ診療ではサーバーサイドをKotlinで実装しており、他のサービスでも一部でKotlinが採用されています。 全てのAndroidアプリはKotlinで書かれていて、KMPは複数サービスで部分的に導入をしており、新規開発では初めからKMPを導入しビジネスロジックをフルで共通化していたりします!

興味のある方は次のリンクから応募お待ちしております。

jobs.m3.com

*1:https://www.kotlinfest.dev/kotlin-fest-2024

*2:Kotlin/Wasmの方も検討されましたが、WebKitがWasm GC未対応でiOSで表示できないため断念