はじめに
この記事はフリューAdvent Calendar 2022の24日目の記事となります。
フリュー株式会社スマートフォンゲーム部で、Webサーバーエンジニアをしている山根です。
これまで担当してきた開発では、主にScalaを使って開発を行ってきていました。
そしてこの度、Scalaではなく、Kotlinを使った開発を行うことにしました。
Scalaを変えた理由
Scalaを使ってきた背景としては、
- 静的型付け言語、関数型言語という点
- Scalaを扱えるエンジニアがそこそこいる
といった感じで、使っていました。
ただ、エンジニア内で今後もScalaを使い続けるのか議論した際に、
- 他言語を使いたい!
- Scala2からScala3への変更点が多い
- エンジニアの母数が少ない など...
といった意見が多々あり、Scala以外の言語を使うことになりました。
言語選定
Scalaと同様の静的型付け言語である TypeScript, Kotlin から選定しました。
参考にしたベンチマーク
(https://programming-language-benchmarks.vercel.app/kotlin-vs-javascript より引用)
ベンチマークを参考にすると、
どちらを選択しても、そこまで問題にはならなさそうです。
そこで、Frameworkを含めてざっくり評価をしてみました。
メンテナンス性 | 速度・パフォーマンス | インフラ費用 | 人気度 | 周辺ライブラリ(Framework等) | 社内利用度 | |
---|---|---|---|---|---|---|
Scala + PlayFramework※ | 10 | 10 | 10 | 10 | 10 | 10 |
TypeScript + Nest.js | 5 | 8 | 8 | 15 | 10 | 8 |
Kotlin + Ktor | 8 | 10 | 10 | 18 | 10 | 16 |
※評価基準として10としています。
ベンチマークや評価結果からKotlinを使ってみることになりました。
コード比較
ちょっとだけScala, Kotlinのコードを見比べてみます。
Scala: Option型 vs Kotlin: Null許容型
Scala
val test1: Option[String] = Some("str")
val test2: Option[String] = None
val test3: String = test1.getOrElse("")
Kotlin
var test1: String? = "str"
var test2: String? = null
var test3: String = test1 ?: ""
Scala: Tuple型 vs Kotlin: Pair型orTriple型
Scala
val test1: (Int, String) = (1, "one")
val test2: (Int, Double, String) = (1, 1.0, "one")
Kotlin
val test1: Pair<Int, String> = Pair(1, "one")
val test2: Triple<Int, Double, String> = Triple(1, 1.0, "one")
Scala: match case vs Kotlin: when
Scala
object Color extends Enumeration {
type Color = Value
val Red, Blue, Pink = Value
}
def str(color: Color): String = {
color match {
case Color.Red => "赤色"
case Color.Blue => "青色"
case _ => "その他"
}
}
Kotlin
enum class Color {
Red,
Blue,
Pink;
}
fun str(color: Color): String {
return when (color) {
Color.Red -> "赤色"
Color.Blue -> "青色"
else -> "その他"
}
}
ざっと見比べると、当然書き方は異なりますが、
Kotlinの学習はしやすい印象を受けます。
Framework等の構成
Kotlinを使って開発するに当たり、FrameworkやORM、DIを以下のようにしました。
項目 | 内容 | ドキュメント等 |
---|---|---|
Framework | Ktor | https://ktor.io/docs/welcome.html |
ORM | Exposed | https://github.com/JetBrains/Exposed |
DI | Koin | https://insert-koin.io/docs/reference/koin-ktor/ktor |
Ktor
ちょっとだけKtorの紹介をすると、
IntelliJ IDEAやKotlinなどの作成者であるJetBrainsが提供している純Kotlin製のFrameworkです。
サーバー側およびクライアント側のアプリケーションを作成でき、JVM、Kotlin/Nativeなどの複数のプラットフォームをサポートしているようです。
また、「Simple and fun」と自負しているように、
軽量で拡張性が高く、それゆえに楽しいということのようです。
まとめ
ScalaからKotlinに変えてみましたが、全く問題なさそうです。
また、Kotlin+Ktorは、すごく楽しいそうな印象を受けました。
まだまだ使い始めたばかりですが、
色々と勉強しながら、やっていきたいと思います!