本稿は『月刊DBマガジン 2009/09 月号』の記事「Javaの限界を超えて実用化を目指す、新開発言語「Scala」の メリットとは」を転載し、一部修正したものです。
Scalaとは
Scalaは、2003年にJavac(コンパイラ)やJavaのGenericsの設計/開発貢献者であるMartin Odersky氏(スイス・ローザンヌ工科大学教授)によって、開発が開始された比較的新しいプログラミング言語です。Javaは実用言語として幅広いシステムで使用されてきましたが、下位互換性を保つという要請の中、言語としての機能強化がなかなか進まないといった限界も見えてきています。そのような現状もあることから、ScalaはJavaの後継として実用的な言語を目指して開発されています。
Scala最大の特徴は、Javaの良さを最大限継承しつつ、スクリプト言語や関数型言語の良いところも吸収し、先進的な機能/文法を取り入れている点です。また、今後のハードウェアのマルチコア化を見据え、簡易に並列処理プログラミングを行うことができるライブラリが付属しています。
Scalaのメリット
Scalaを利用するうえでのメリットとは、どんなところにあるのでしょうか。まずは、そこから探っていきましょう。
コンパイル時にJavaクラスに変換されJavaVM上で動作
これは「Write once, run anywhere(一度書けばどこでも動作する)」を目指すJavaの長所をそのまま引き継いでいます。また、簡単にScalaからJavaを呼び出したり、JavaからScalaを呼び出したりできます。
簡易に記述でき、コンパイル言語としてエラーチェックが可能
Scalaはスクリプト言語のように簡潔に記述できるよう設計されています。特に、制御構造の記述を簡潔化できるので、本質的なロジック部分に集中できます。
また、Javaの1/2程度のコード量で記述可能なことは大きなアドバンテージです。しかも実行速度はJavaと同等を保っています。さらに静的型付けのコンパイル言語なので、JavaやC++などと同様にコンパイル時にエラーを検出できます。加えて、コンパイル時に自動で適切な型を推論する型推論(注1)の仕組みを持つため、多くの場合は型を書かなくても良いのです(省略可能)。
静的な型付けを持つ言語において、変数や関数の型を宣言しなくてもそれを導くのに使われた関数の型などから自動的に型を決定する仕組み。
安価なハードウェアとマルチコア化に合わせた言語設計
現在はハードウェアが安価になり、CPUのマルチコア化が進みつつあります。このような時代の変化に合わせた言語設計がなされており、効率的な並列実行を行う機能が標準ライブラリ(Actor)として提供されています。そのほかにも、次のような特徴があります。
- 簡易に扱えるコレクションクラス(List、Map、Arrayなど)が標準搭載されている
- 多重継承と同等の仕組みがある
- 非常に柔軟で高機能なパターンマッチが導入されている
- 既存のクラスを部分的に拡張できる
- XML型が標準で搭載されており、ソースコード中に直接XMLを記述できる
- ユニットテスト用のライブラリが標準搭載されている
- LiftwebというオールインワンのWebフレームワークが存在し、高機能なWebアプリを作成可能
近ごろは意欲的で優秀な多くの技術者が、Scalaに注目しています。Scalaを用いた感想を記しているブロガーも多く、彼らも上記のようなメリットを認識しています。
開発に用いた経験から言えること
筆者が所属するパテントビューロでは、実際にScalaを使った開発を行っています(【コラム】「実際の開発にScalaを使用する」参照)。実際に開発を行ったことにより、得られたScalaの良さは非常に多いです。我々が体感できたScalaの良い点を簡単にまとめておきます。
- コンパイル言語の安心感と、スクリプト言語的なお手軽さ/生産性の高さを併せ持つ
- スケーラビリティが高く、簡単なバッチ処理から、Webアプリケーション、エンタープライズアプリケーションまで高い生産性を発揮できる
- 開発言語として最先端の機能や手法をふんだんに取り入れており、なおかつそれらに縛られずに自由な記述が可能
これらを踏まえて、次ページからScalaという言語の基礎を解説していきます。
筆者らが所属するパテントビューロでは、「astamuse」というWebアプリケーションを新規開発するにあたり、裏方のバッチ処理から、フロントエンドのWebアプリケーションまで、全面的にScalaを採用することにしました。前述したScalaの生産性の高さを期待してのことです。
2009年11月現在、astamuseは近年の特許文章150万件強から抽出した技術情報を加工し、約400万ページの技術情報・関連情報を無料で公開しています。技術情報量では日本最大のサービスです。
特許文書は、1文書あたり平均1万5000字程度の長さを持ち、文書全体としては200億字を超えています。それらに対して、自然言語解析処理や統計処理、動的コンテンツの生成などを幅広く行っています。Scalaはどの機能を作成するにしても、コーディング量の低減やコンパイル言語としてのエラーチェックと実行速度の速さを発揮し、高い生産性を提供してくれています。
astamuse開発は、数名の小規模チームで行われています。開発者間の密なコミュニケーションをとっていることもあり、新言語Scalaに教育コストが高いという印象はありません(Web経由で得られる情報量が少ない点は事実ですが)。Java経験者だけでなく、C言語経験者も、Scalaをマスターするまでさほど時間を要しませんでした。
ちなみに、「astamuse」は、Scalaベースのwebフレームワーク「Liftweb」で作成されました。Liftwebについては後述します。Webアプリケーション「astamuse」の概要紹介記事は、CodeZineに掲載されています。