3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

フリューAdvent Calendar 2022

Day 24

ScalaからKotlinに変えた話

Last updated at Posted at 2022-12-23

はじめに

この記事はフリュー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は、すごく楽しいそうな印象を受けました。
まだまだ使い始めたばかりですが、
色々と勉強しながら、やっていきたいと思います!

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?