Scala

オブジェクト指向と関数型を融合した JVM 言語。大規模データ処理でも使われる

プログラミング言語関数型
Scala」の技術書を見る →

Scala とは

Scala (スカラ) は、オブジェクト指向関数型プログラミングを融合させたプログラミング言語だ。Java と同じ実行基盤 (JVM) 上で動き、Java の資産を活かしながら、より簡潔で表現力の高い記述ができる。静的型付けによる安全性と、関数型の強力な抽象化を両立する点が特徴で、大規模なデータ処理基盤などで採用されてきた。

設計者はスイス連邦工科大学ローザンヌ校 (EPFL) の Martin Odersky で、設計は 2001 年に始まり、一般への公開は 2004 年 1 月だった。2026 年 8 月時点の最新系列は 3.8 で、旧系列の 2.13 も並行して修正版が出ている。3 系列と 2 系列はコンパイル結果の互換性が完全ではないため、後述のとおり採用時は系列そのものが選択事項になる。

2 つのパラダイムの融合

パラダイムScala での扱い
オブジェクト指向クラスや継承で構造化
関数型関数を値として扱う、不変データ

融合が成り立つのは、関数が特別扱いされていないからだ。Scala では関数も値であり、他の値と同じように変数へ入れ、引数として渡し、戻り値として返せる。だから「関数を受け取るメソッド」を普通のオブジェクト指向のクラス設計の中に自然に置ける。逆に、不変データを表す入れ物にはクラスの仕組みがそのまま使える。関数型の道具を使うために別の書き方へ切り替える必要がなく、同じクラス階層の中に両方が同居する。

その結果、状況に応じて手続き的にも関数的にも書けるが、これは裏を返せば「同じ処理の書き方が何通りもある」ことでもある。柔軟さと読みやすさは自動的には両立しない。

どこで使われるか

Scala は、大規模データ処理基盤や、高い信頼性が求められるバックエンドシステムで使われてきた。代表例が分散処理フレームワークの Apache Spark で、Scala で書かれた API を持つ。関数型の不変性 (データを書き換えない性質) は、並行処理や大量データの扱いで安全性を高める。JVM 上で動くため、Java の膨大なライブラリ資産もそのまま利用できる。

この基盤側の事情が、そのまま言語の版の選択を縛る。Spark 4.2.0 の公式ドキュメントは、動作環境を Java 17/21/25・Scala 2.13・Python 3.10 以降と示し、Scala の API を使うアプリケーションは Spark がコンパイルされたものと同じ Scala の版を使う必要があり、Spark 4.0.0 以降はそれが 2.13 だと明記している。つまり最新の Spark 上で Scala を書くなら、言語側の最新系列ではなく 2.13 を選ぶことになる。2 系列が現役として保守され続けているのは、こうした基盤の要求があるためだ。

採用時の注意点

Scala は表現力が高い反面、その自由度が学習の難しさにもつながる。同じ処理を何通りもの書き方で実現できるため、チームで書き方の方針を揃えないとコードが読みにくくなる。関数型の概念は、手続き型に慣れた開発者には習得に時間がかかる。強力な言語だが、その力を活かすにはチームの習熟度と規律が問われる。新規採用では、要件と人材を踏まえ、Kotlin など他の JVM 言語とも比較して判断するとよい。

版の選択は言語の好みでは決まらない。手順は逆で、まず載せる基盤 (Spark のような処理系や利用するフレームワーク) がどの系列向けにビルドされているかを確認し、次に依存させたいライブラリがその系列で公開されているかを見る。両方が満たされる系列が一つに絞られることが多く、そこで初めて言語の新機能を使えるかが決まる。この確認を後回しにすると、実装を進めた後で「使いたいライブラリが対象系列に無い」と判明し、書き直しが発生する。

この記事は役に立ちましたか?

関連用語

関連する記事