2026年現在のScalaの現在地

2026年現在のScalaは、「尖った実験的言語」でも「終わった言語」でもありません。実務で使い続けるチームがはっきり存在し、その一方で“誰にでも勧められる標準言語”の座からは離れた、落ち着いた成熟期にあります。Scala 3への移行が一巡し、良くも悪くも「Scalaを選ぶ理由」が以前より明確に問われるフェーズに入ったと言えます。

2026年現在のScalaを一言で言うと

Scalaは「型を使って設計を固定する言語」として成熟しました。Scala 2時代のように、書けることをすべて書く文化から、意図を読みやすく表現する方向に寄っています。これはScala 3の文法や型機構の影響が大きいです。

Scala 3前提の基本的な書き方

まず、2026年現在のScalaでは次のようなコードが「普通」になります。

case class UserId(value: Long)
case class UserName(value: String)

case class User(
  id: UserId,
  name: UserName
)

このように、プリミティブ型をそのまま使わず、小さな型を作って意味を表現する書き方が一般的です。2026年現在のScalaでは、この設計を「やりすぎ」と感じる現場は減っています。

enumによるドメイン表現

Scala 3のenumは、2026年現在では実務で普通に使われています。

enum UserStatus:
  case Active
  case Suspended
  case Deleted

Javaのenumと比べて、Scalaのenumはパターンマッチと非常に相性が良いです。

def canLogin(status: UserStatus): Boolean =
  status match
    case UserStatus.Active    => true
    case UserStatus.Suspended => false
    case UserStatus.Deleted   => false

2026年現在、この書き方は「Scalaらしいが読みにくい」とは見なされにくくなっています。

型によって「間違えられない」設計

Scalaが今も評価されている理由は、設計を型で固定できる点です。

case class Price(value: BigDecimal)
case class Quantity(value: Int)

def totalPrice(price: Price, quantity: Quantity): BigDecimal =
  price.value * quantity.value

もし引数の順序を間違えようとすると、コンパイルが通りません。2026年現在のScalaでは、この「間違えられない」設計を重視するチームが残っています。

given / using による依存の明示

Scala 3のgiven / usingは、2026年現在ではDIの軽量な代替として使われることがあります。

trait Clock:
  def now(): Long

given systemClock: Clock with
  def now(): Long = System.currentTimeMillis()

def currentTime(using clock: Clock): Long =
  clock.now()

このコードは、依存関係を隠しすぎず、テスト時には差し替えられるというバランスを取っています。2026年現在のScalaでは、この程度の抽象化が現実的な落とし所とされています。

Scalaを使って失敗しやすいコード例

逆に、2026年現在でも警戒される書き方もあります。

def process[A, B, C, D](a: A)(f: A => Either[B, Option[C]]): Either[D, Option[C]] =
  ???

型だけで意図を表そうとしすぎると、読む側の負担が急激に上がります。2026年現在のScala界隈では、このようなコードは「賢すぎる」として敬遠されがちです。

> Scalaは「書ける」ことと「保守できる」ことが別だと理解されるようになりました。

2026年現在のScalaとJavaとの違いをコードで見る

Java的な設計をScalaにそのまま持ち込むと、冗長になります。

class UserService:
  def createUser(name: String): Unit =
    println(name)

2026年現在のScalaでは、より関数的な形が好まれます。

def createUser(name: UserName): Unit =
  println(name.value)

ここで重要なのは、短さではなく「意図が型で伝わるか」です。

Scalaを選ぶときの現実的な注意点

Scalaは2026年現在でも強力ですが、学習コストは依然として高めです。特に、型の設計意図を共有しないと、次のような問題が起きます。

  • 一部の人しか理解できないコードが増える
  • 修正が怖くなり、変更を避けるようになる

これを防ぐには、「どこまで型で表現するか」をチームで合意する必要があります。

2026年現在のScalaはどんな立ち位置か

コードで見てきた通り、Scalaは「設計を型に閉じ込めたい現場」に向いています。一方で、スピード重視・人の入れ替わりが激しい環境では、オーバースペックになる可能性があります。

まとめ:結局どうすればいいか

2026年現在のScalaは、目的が明確な場合に選ぶ言語です。複雑なドメインを安全に扱いたいなら、今も有力な選択肢です。ただし、Scalaを選ぶなら「このコードを他人が読めるか」を常に基準にすべきです。Scalaは魔法の言語ではなく、設計力がそのまま結果に表れる言語だと言えるでしょう。