Scala

Scala
Scala
のロゴ
Screenshot
パラダイム 並行計算、関数型プログラミング、命令型プログラミング、オブジェクト指向プログラミング ウィキデータを編集
登場時期
  • 2004年1月20日 ウィキデータを編集
開発者 マーティン・オーダスキー、スイス連邦工科大学ローザンヌ校 ウィキデータを編集
最新リリース 3.10.0 / 2026年10月12日
型付け 強い静的型付け
主な処理系 Scala
影響を受けた言語 ML、Java、Erlang、Haskell、Smalltalk、Standard ML、OCaml、Common Lisp、Eiffel、Oz、Pizza、Scheme ウィキデータを編集
影響を与えた言語 Java, Chisel, F#, Kotlin, Flix
プラットフォーム Linux, Windows, Mac, JVM, JavaScript, Android
ライセンス Apache-2.0 ウィキデータを編集
ウェブサイト
拡張子 scala、sc ウィキデータを編集
テンプレートを表示

■カテゴリ / ■テンプレート

Scala(スカラ、SKAH-lah)はオブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語である。名前の「Scala」は英語の「scalable language」に由来するものである。

プラットフォーム

主にJavaプラットフォーム(Java仮想マシン)上で動作し、既存のJavaのプログラムと容易に連携させることができる。

対応プラットフォーム

また、過去には下記のプラットフォームもサポートしていたが、現在は開発が中断している。

歴史

Scalaは2001年にスイス・ローザンヌにあるスイス連邦工科大学 (EPFL) 教授のマーティン・オーダスキー(英語版)によって設計された。マーティン・オーダスキーはFunnelという、関数型プログラミングとペトリネットとを合わせたプログラミング言語の開発に携わっていた。オーダスキーは過去にJavaの総称型(ジェネリクス)とjavacの開発に携わった事があった。

Scalaは2003年の暮れに内部で公開された後、2004年の始めにJavaのプラットフォームにリリースされ、2004年の6月に.NETのプラットフォームに公開された。Ver2.0は2006年3月にリリースされたが、.NETのサポートは2012年に中止になった。

2021年5月12日、コードネームdottyと呼ばれていたコンパイラを抜本的に再設計して作られたScala 3がリリースされ、多くの機能が追加された。

また、現在も活発に開発が続けられている。

特徴

主に以下のような特徴がある。

Scala 3の新機能

例

「文字列の中に'a'という文字が存在するか判定する」という例を挙げる。

手続き型言語的なコードを書くと以下のようになる。

def hasLowerCaseA(s: String): Boolean = {
  for (i <- 0 until s.length) {
    if (s(i) == 'a') return true
  }
  return false
}

上のコードは、添え字を使わずに、次のように書くことができる。

def hasLowerCaseA(s: String): Boolean = {
  for (c <- s) {
    if (c == 'a') return true
  }
  return false
}

上のコードは、トレイトscala.collection.Traversableを使って、次のように書くことができる。

def hasLowerCaseA(s: String) = s.exists(_ == 'a')

典型的な関数型言語では再帰をよく使う。再帰に置き換えると以下のようになる。

def hasLowerCaseA(s: String, i: Int = 0): Boolean = {
  if (i == s.length) return false
  if (s(i) == 'a') return true
  return hasLowerCaseA(s, i + 1)
}

部分関数

Scalaの部分関数 (partial function) は数学における同名の概念をもとにして生まれた機能である。具体的には、定義域が制限された関数に相当する。以下は [-1, +1] の範囲で2乗を計算する部分関数の例である。

val myPartialSquare: PartialFunction[Double, Double] = {
  case x if -1 <= x && x <= 1 => x * x
}

println(myPartialSquare(-0.5)) // 0.25
println(myPartialSquare(0.9)) // 0.81
println(myPartialSquare.isDefinedAt(1)) // true
println(myPartialSquare.isDefinedAt(-10)) // false
println(myPartialSquare(1.1)) // MatchError

Scala開発の動機

Martin Oderskyによると、Scala開発の動機は2つの仮説による。

  1. 汎用言語はスケーラブルでなくてはならない。同じ概念で、小さいプログラムも大きなプログラムも記述できるべきである。
  2. スケーラビリティは関数型言語とオブジェクト指向言語の2つのプログラミングの概念を統合し、一般化することにより実現できる。

利用例

TwitterがバックエンドをRubyからScalaに2009年に移行したのを初め、大型のソフトウェアでの利用例がいくつか存在する。

統合開発環境

以下の統合開発環境が Scala をサポートしている。括弧内の数字は 2019 Scala Developer Survey での複数回答ありでの利用している人の割合。

Scala をベースにしたプログラミング環境として Kojo がある。

ビルドツール

Apache Maven や Gradle などの Java 汎用のビルドツールも利用可能だが、Scala 向けのビルドツールとして以下の物がある。括弧内の数字は 2019 Scala Developer Survey での複数回答ありでの利用している人の割合。

Webアプリケーションフレームワーク

Scala 用の主なWebアプリケーションフレームワークとして以下の物がある。

サポートバージョン

以下の4種がサポートされている。

  1. Scala Next: Scala 3の通常版。
  2. Scala LTS: Scala 3の長期サポート版。2年以上の間隔でリリースされ、次の長期サポート版がリリースされても1年間は保守される。Scala 3のライブラリ作者はこのバージョンを相手にビルドすることが推奨されている。過去にリリースされたのは2023年5月30日にリリースされたScala 3.3。
  3. Scala 2.13: サポート終了予定なし。Scala 2.13のリリース日は2019年6月11日。
  4. Scala 2.12: sbt 1が利用していて、sbt 1が使い続ける限りサポート終了予定なし。Scala 2.12のリリース日は2016年11月3日。

Scala 2.11以前のサポートは終了している。Scala 4のリリース予定はない。

脚注

  1. ↑ 題名: Release 3.10.0, 出典URL: https://github.com/scala/scala3/releases/tag/3.10.0, 閲覧日: 2026年10月12日, 出版日: 2026年10月12日
  2. ↑ Scala: Martin Odersky, Scala -- the Simple Parts
  3. ↑ Scala.js
  4. ↑ Scala Native — Scala Native documentation
  5. ↑ A Brief History of Scala
  6. ↑
  7. ↑ The Secret Behind Twitter's Growth
  8. ↑ Scala, Lift, and the Future
  9. ↑ Announces General Availability of SynapseML
  10. ↑ Woof, a pure Scala 3 logging library
  11. 1 2 2019 Scala Developer Survey
  12. ↑ “Scala development guarantees”. scala-lang.org. 2025年1月3日閲覧。
  13. ↑ “Scala 3.3.0 released!”. scala-lang.org. 2025年1月3日閲覧。
  14. ↑ “Scala 2.13.0”. scala-lang.org. 2025年1月3日閲覧。
  15. ↑ “Scala 2.12.0”. scala-lang.org. 2025年1月3日閲覧。

関連項目

外部リンク