プログラミング言語

Scala すからあ

関数型プログラミングオブジェクト指向JVM型推論Apache Spark静的型付け
Scalaについて教えて

簡単に言うとこんな感じ!

ScalaはJavaの「いいとこ取り+進化版」みたいな言語だよ!「オブジェクト指向」と「関数型」という2つの書き方を両方うまく使えて、Javaの資産もそのまま使えるんだ。ビッグデータ処理でよく使われるApache Sparkの公式言語としても有名だよ!


Scalaとは

Scalaは2003年にスイス連邦工科大学(EPFL)のマーティン・オダスキー教授が設計したプログラミング言語です。名前は「Scalable Language(スケーラブルな言語)」に由来し、小さなスクリプトから大規模システムまで幅広く対応できることを目指して設計されました。

最大の特徴は、オブジェクト指向プログラミング(OOP)関数型プログラミング(FP) という2つのパラダイムを一つの言語で統合した点です。Javaプログラマーが慣れ親しんだクラスやオブジェクトの概念を活かしながら、関数を第一級オブジェクトとして扱い、イミュータブル(不変)なデータ処理を得意とする書き方もできます。

ScalaはJVM(Java仮想マシン)上で動作するため、既存のJavaライブラリをそのまま利用でき、JavaやKotlinとのコードの相互利用も可能です。また、Apache Spark(大規模データ処理フレームワーク)の主要言語として採用されており、データエンジニアリング分野での存在感が非常に大きい言語です。


Scalaの主な特徴と概念

特徴説明実務上の意味
静的型付けコンパイル時に型エラーを検出バグを早期発見できる
型推論変数の型を自動で推測冗長な型宣言が不要で書きやすい
関数型プログラミング関数を値として扱える並列・非同期処理がしやすい
イミュータブル変更不可なデータを推奨バグや競合状態を防ぎやすい
パターンマッチング複雑な条件分岐をスッキリ書けるコードの可読性が上がる
JVM上で動作Javaと共存できるJavaの膨大な資産を活用できる
Scala.js / Scala Nativeブラウザやネイティブにも対応用途が広がっている

「オブジェクト指向+関数型」のイメージ

Scalaの位置づけを料理に例えると、和食(Java的なOOP)と洋食(関数型FP)の両方を作れるシェフのようなイメージです。どちらかに強制されることなく、状況に合わせて使い分けられます。

よくある用途分類

Scala の主な用途

├── ビッグデータ処理
│   └── Apache Spark(データ処理の業界標準)

├── バックエンドAPI
│   └── Play Framework / Akka HTTP

├── 並行・分散システム
│   └── Akka(アクターモデル)

└── データパイプライン
    └── ETL処理・ストリーミング処理

歴史と背景

  • 2001年 — マーティン・オダスキー教授がEPFLでScalaの設計を開始。それ以前にJavaのジェネリクス設計にも携わった人物
  • 2003年 — Scala 1.0リリース。JVM上で動作する言語として公開
  • 2006年 — Scala 2.0リリース。言語の安定性が増し、実用段階へ
  • 2009年 — Twitterが基幹システムの一部をRubyからScalaへ移行。注目度が急上昇
  • 2009年 — Apache Sparkプロジェクト開始(UC Berkeley)。ScalaをメインAPIとして採用
  • 2014年 — Apache Sparkが正式にApache TOPプロジェクトになり、Scalaの需要が爆発的に増加
  • 2016年 — Lightbend(旧Typesafe)社がScalaの商用サポートを提供
  • 2021年Scala 3(旧称Dotty)リリース。型システムの大幅強化・文法の簡略化・Pythonライクなインデント構文に対応
  • 現在 — データエンジニアリング・金融システム・大規模バックエンドで根強い需要を持つ

Javaとの比較・他言語との位置づけ

Scalaと関連言語の違いを整理しましょう。

言語動作環境パラダイム学習コスト主な用途
ScalaJVM静的OOP+FP高めビッグデータ・バックエンド
JavaJVM静的OOP中心エンタープライズ全般
KotlinJVM/JS/Native静的OOP+FPAndroid・サーバー
PythonCPython等動的マルチ低いデータサイエンス・スクリプト
HaskellGHC静的純粋FP非常に高い研究・金融

ScalaとJVMファミリーの関係を図解します。

JVMファミリーと主要言語の位置づけ JVM(Java仮想マシン) どの言語も最終的にバイトコードに変換されここで実行される Scala OOP+FP統合 Spark中心 Java OOP中心 エンタープライズ Kotlin OOP+FP Android・サーバー Groovy 動的型付け スクリプト Scalaが特に強い領域 Apache Spark(ビッグデータ) Akka(分散システム) 金融・大規模バックエンド

Scalaコードの具体例(雰囲気だけ)

// シンプルな例:リストのフィルタリング
val numbers = List(1, 2, 3, 4, 5, 6)

// 偶数だけ取り出して2倍にする(関数型スタイル)
val result = numbers.filter(_ % 2 == 0).map(_ * 2)
// result: List(4, 8, 12)

// ケースクラス(データ定義がシンプル)
case class User(name: String, age: Int)
val alice = User("Alice", 30)

Javaと比べてコードがコンパクトになるのがわかります。


関連する規格・RFC

※ Scalaは特定のIETF RFC・ISOなどの国際標準規格には依存していないため、このセクションは省略します。言語仕様はScala公式仕様書Scala Language Specification)として公開されています。


関連用語

  • Java — ScalaのベースとなるJVM言語・Scalaと相互利用できる
  • Kotlin — JVM系で同じくOOP+FPを扱えるモダンな言語
  • 関数型プログラミング — Scalaが取り入れている「関数を値として扱う」プログラミングスタイル
  • オブジェクト指向プログラミング — Scalaが同時にサポートするプログラミングパラダイム
  • Apache Spark — ScalaをメインAPIとするビッグデータ処理フレームワーク
  • JVM — Scalaが動作するJava仮想マシン・実行基盤
  • 型推論コンパイラが自動で型を判断する機能・Scalaの特徴の一つ
  • 静的型付け — コンパイル時に型を確定させる方式・バグの早期発見に役立つ