古好佑輔
2025.1.31
こんにちは、エンジニアの古好です。
yamoryではバックエンドにJVM言語を採用しており、その中でもKotlinをメインの言語に採用しています。
yamoryのリポジトリは基本的にはモノレポになっており、リポジトリの言語の割合をみるとKotlinが全体の40%以上を占めています。yamoryは元々Scalaをメインに採用していたこともあり、まだScalaのコードもいくらか存在しますが、徐々にKotlinへの置き換えを行っています。
yamoryのサーバーサイドはKotlin + Spring Bootを採用しています。
Kotlinは、Androidのアプリ開発で使用する言語と認知している方も多いかもしれませんが、サーバーサイド開発に導入するスタートアップや大手テック企業が増えています。
Kotlinを採用している主な理由としては以下の2つがあります。
KotlinはJavaとの完全互換があり、JavaとKotlinのコードの混在も容易です。
また、Kotlinは同じJVM言語であるScalaやClojureと比較しても比較的学習コストが低い言語です。実際にKotlinは未経験でもJava経験したことがある方が新規にプロジェクトに参画してきても、違和感なく受け入れられています。
Kotlinは標準ライブラリが充実しており、その中でも特に多用するCollectionの機能がとても充実しています。Java 8以降はStream APIが実装され機能が充実していますが、Kotlinではさらに強力になっています。
map, filter, forEach などJavaでもよく使われるものは揃っており、JavaのStream APIに比べてシンプルに書くことができます。
Java、Kotlinで同様のコードを書くと以下のようになります。
// Java
var words = Arrays.asList("Java", "Kotlin");
var filteredWords = words.stream()
.filter(s -> s.startsWith("Ja"))
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(filteredWords); // [JAVA]
// Kotlin
val words = listOf("Java", "Kotlin")
val filteredWords = words
.filter { it.startsWith("Ja") }
.map { it.toUpperCase() }
println(filteredWords) // [JAVA]
これだけみてもKotlinの方がシンプルに書けることがわかると思います。
Javaではコレクションを効率的に操作するためには、それらを逐一Stream APIに変換する必要がありますが、Kotlinでは変換する必要がなくコレクションに対する操作が直接かつ容易に行えます。
Spring Bootについて調べると大抵Javaを使用している例が多く、Spring BootのドキュメントもほとんどJavaのコードしか掲載されていないため、コードをそのまま流用できないケースが大半です。JavaからKoltinコードへの変換はIntelliJ IDEAが行ってくれるためあまり困ることはありませんが、変換されたコードが常に正常に動作するということはないので注意する必要があります。
私自身yamoryに加入するまではKotlinを全く触ったことがなく、最初は不安でしたが、シンプルであり学習コストが低く比較的すぐに慣れることができたため非常に良い言語だと思います。
まだまだyamoryのコアな部分はScalaで書かれている箇所が残っており、Scala未経験者にはとっつきにくい部分もありますが、いずれはすべてのScalaコードをKotlinに書き換えていきたいです。
もしこの記事を読んでyamoryの開発に興味を持った方がいらっしゃいましたら、ぜひカジュアルにお話してみませんか?
© Assured, Inc.