プログラミング言語

Scala

Martin Odersky / 2004年登場

JVM 上で関数型とオブジェクト指向を高い水準で融合した言語。型システムが強力で、大規模データ処理(Apache Spark)やバックエンドで使われる。

3つの要点
TL;DR
  1. 関数型と OOP を融合した強力な JVM 言語。
  2. Apache Spark などビッグデータ処理の基盤。
  3. 関数型で堅く大規模データを扱うなら Scala。

基本情報

仕様と特徴

Scala のロゴ
製品・技術の概要ScalaJVM 上で関数型とオブジェクト指向を高い水準で融合した言語。型システムが強力で、大規模データ処理(Apache Spark)やバックエンドで使われる。
型付け
静的強い型付け強力な型推論)
実行方式
JVM+ Scala.js / Native)
パラダイム
関数型 + オブジェクト指向の融合
登場
2004年Martin Odersky
この言語の強み
関数型 + OOP を高い水準で融合強力な型システムと表現力
活躍する領域
ビッグデータ処理Apache Spark)大規模バックエンド / 関数型で堅い設計

選定ガイド

選定ポイント

採用する理由と、事前に受け入れるべきトレードオフを分けて確認します。

採用に向く条件

選ぶ理由

  1. 関数型 + OOP を高い水準で融合
  2. 強力な型システムと表現力
  3. Spark などビッグデータ基盤で実績

事前に確認する条件

考慮すべき点

  1. 学習コストが高い
  2. コンパイルが遅め
  3. 書き方の自由度が高く統一が要る

向いている用途

こんな用途に向く

ビッグデータ処理(Apache Spark)大規模バックエンド関数型で堅い設計

詳しい解説

もっと詳しく

どんな言語か

Scala は、関数型プログラミングとオブジェクト指向を一つの言語で融合させた JVM 言語です。2004 年に Martin Odersky が公開しました。Java と同じ仮想マシン上で動き、既存の Java 資産を活かしつつ、より簡潔で安全な書き方ができることを狙っています。

横にスクロール

sbt と scalac が Scala 3 ソースから TASTy と JVM バイトコードを生成し、JVM が読み込んで JIT・GC とともに実行する経路、および Java 相互運用、given、Future
Scala 3 は実行用の JVM バイトコードと、型情報を保つ TASTy を同時に生成します。given の候補はコンパイル時に選ばれ、Future の処理は ExecutionContext へ渡されるため、公開型・クラスパス・スレッドプールを境界として設計します。

強力な型システムと表現力

Scala の核心は、表現力の高さと厳密な型システムの両立です。値が書き換わらないイミュータブルなデータと関数の組み合わせを基本に、副作用の少ないコードを簡潔に書けます。

// データを変換して合計する(関数型らしい連結)
val total = List(1, 2, 3, 4)
  .filter(_ % 2 == 0)  // 偶数だけ残す
  .map(_ * 10)         // 各要素を10倍
  .sum

型を細かく表現できるため、誤った使い方をコンパイル時に弾きやすいのが強みです。

仕組み・特徴

  • JVM 上で Java と相互運用: 既存の Java ライブラリをそのまま呼べ、資産を活かせる。
  • 関数型+OOP の融合: 高階関数・パターンマッチ・代数的データ型(case class/sealed trait)と、クラス・トレイトによる OOP を両立。
  • 強い型と抽象化: 型推論、暗黙の変換/given(型クラス的な抽象)など、ライブラリ設計に強い機能を持つ。Scala 3 で構文と型システムが整理された。
  • 並行・分散: Akka(アクターモデル)や、後述の Spark など、大規模処理のエコシステムが厚い。

得意・不得意

  • 得意: 大規模なデータ処理。分散処理基盤 Apache Spark は Scala で書かれており、ビッグデータ分野で広く使われる。堅牢な大規模システムにも向く。
  • 不得意: 手軽さ。多機能ゆえ記述の選択肢が多く、小さなスクリプトには大げさになりがち。コンパイルは遅め。

Java / Kotlin との違い

観点ScalaJavaKotlin
基盤JVMJVMJVM ほか
志向関数型+OOP・高い抽象OOP・堅実簡潔な OOP・実用重視
型システム非常に強力標準的実用的
代表分野データ基盤(Spark)企業システム全般Android・サーバー

つまずきやすいところ

学習コストとビルド待ち

関数型の概念と豊富な機能が重なり、他人のコードが暗号のように見えることもあります。チームでは使う機能の範囲を決めると読みやすさを保てます。コンパイルが遅めでビルド待ちがテンポを乱すため、インクリメンタルビルドやモジュール分割で緩和します。

総じて Scala は、関数型と OOP を強力な型システムで融合した JVM 言語で、Spark を中心とするデータ基盤や堅牢な大規模システムで選ばれます。

言語選定

Scalaを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

ビッグデータ処理(Apache Spark)

比較で見る軸

型付け: 静的・強い型付け(強力な型推論) / 実行方式: JVM(+ Scala.js / Native) / パラダイム: 関数型 + オブジェクト指向の融合

導入後に効く点

強力な型システムと表現力

先に潰すリスク

学習コストが高い

数字・仕様の読み方
型付け
静的・強い型付け(強力な型推論)
実行方式
JVM(+ Scala.js / Native)
パラダイム
関数型 + オブジェクト指向の融合
登場
2004年
Martin Odersky

判断チェックリスト

  • 自社の用途が「ビッグデータ処理(Apache Spark) / 大規模バックエンド」に近いか確認する。
  • 強みである「関数型 + OOP を高い水準で融合」が本当に評価軸になるか確認する。
  • 注意点の「学習コストが高い」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

ビッグデータ処理(Apache Spark)大規模バックエンド関数型で堅い設計

最初の一歩

Hello, World!

object Main extends App {
  println("Hello, World!")
}
公式ドキュメント