Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Javaの限界を超えて実用化を目指す
新開発言語「Scala」のメリットとは~前編

キーワードは手軽さと拡張性

  • LINEで送る
  • このエントリーをはてなブックマークに追加

 Scala(スカラ)というプログラム開発言語をご存知でしょうか。ScalaはJavaの良さを継承し、かつスクリプト言語や関数型言語のメリットを吸収した言語で、Javaの後継を担うものとして注目されています。本稿では、Scalaのメリットや文法の基礎を押さえながら、その実体を探っていきます。

目次

 本稿は『月刊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)の仕組みを持つため、多くの場合は型を書かなくても良いのです(省略可能)。

注1

 静的な型付けを持つ言語において、変数や関数の型を宣言しなくてもそれを導くのに使われた関数の型などから自動的に型を決定する仕組み。

安価なハードウェアとマルチコア化に合わせた言語設計

 現在はハードウェアが安価になり、CPUのマルチコア化が進みつつあります。このような時代の変化に合わせた言語設計がなされており、効率的な並列実行を行う機能が標準ライブラリ(Actor)として提供されています。そのほかにも、次のような特徴があります。

  • 簡易に扱えるコレクションクラス(List、Map、Arrayなど)が標準搭載されている
  • 多重継承と同等の仕組みがある
  • 非常に柔軟で高機能なパターンマッチが導入されている
  • 既存のクラスを部分的に拡張できる
  • XML型が標準で搭載されており、ソースコード中に直接XMLを記述できる
  • ユニットテスト用のライブラリが標準搭載されている
  • LiftwebというオールインワンのWebフレームワークが存在し、高機能なWebアプリを作成可能

 近ごろは意欲的で優秀な多くの技術者が、Scalaに注目しています。Scalaを用いた感想を記しているブロガーも多く、彼らも上記のようなメリットを認識しています。

開発に用いた経験から言えること

 筆者が所属するパテントビューロでは、実際にScalaを使った開発を行っています(【コラム】「実際の開発にScalaを使用する」参照)。実際に開発を行ったことにより、得られたScalaの良さは非常に多いです。我々が体感できたScalaの良い点を簡単にまとめておきます。

  1. コンパイル言語の安心感と、スクリプト言語的なお手軽さ/生産性の高さを併せ持つ
  2. スケーラビリティが高く、簡単なバッチ処理から、Webアプリケーション、エンタープライズアプリケーションまで高い生産性を発揮できる
  3. 開発言語として最先端の機能や手法をふんだんに取り入れており、なおかつそれらに縛られずに自由な記述が可能

 これらを踏まえて、次ページからScalaという言語の基礎を解説していきます。

【コラム】「実際の開発にScalaを使用する」

 筆者らが所属するパテントビューロでは、「astamuse」というWebアプリケーションを新規開発するにあたり、裏方のバッチ処理から、フロントエンドのWebアプリケーションまで、全面的にScalaを採用することにしました。前述したScalaの生産性の高さを期待してのことです。


 2009年11月現在、astamuseは近年の特許文章150万件強から抽出した技術情報を加工し、約400万ページの技術情報・関連情報を無料で公開しています。技術情報量では日本最大のサービスです。

 

 特許文書は、1文書あたり平均1万5000字程度の長さを持ち、文書全体としては200億字を超えています。それらに対して、自然言語解析処理や統計処理、動的コンテンツの生成などを幅広く行っています。Scalaはどの機能を作成するにしても、コーディング量の低減やコンパイル言語としてのエラーチェックと実行速度の速さを発揮し、高い生産性を提供してくれています。


 astamuse開発は、数名の小規模チームで行われています。開発者間の密なコミュニケーションをとっていることもあり、新言語Scalaに教育コストが高いという印象はありません(Web経由で得られる情報量が少ない点は事実ですが)。Java経験者だけでなく、C言語経験者も、Scalaをマスターするまでさほど時間を要しませんでした。


astamuseの画面1(技術単語解説ページ 技術単語解説や関連情報を掲載)
astamuseの画面1(技術単語解説ページ 技術単語解説や関連情報を掲載)
astamuseの画面2(発明・特許ページ 特許情報をわかりやすく整理・再構築して公開)
astamuseの画面2(発明・特許ページ 特許情報をわかりやすく整理・再構築して公開)

 ちなみに、「astamuse」は、Scalaベースのwebフレームワーク「Liftweb」で作成されました。Liftwebについては後述します。Webアプリケーション「astamuse」の概要紹介記事は、CodeZineに掲載されています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 株式会社パテントビューロ 三木隆史(ミキ タカフミ)

    株式会社パテントビューロ所属。マネージャー業務と平行して、Webアプリケーション開発、自然言語系の研究開発を行なう。以前はC言語による組込開発。違和感なくScalaへ移行できたことや、ロジック部分に注力できる生産性の高さに驚いている。

  • 株式会社パテントビューロ 木村吉博(キムラ ヨシヒロ)

    政府系研究機関での研究開発を経て、現在、株式会社パテントビューロにて、プログラミング(知財関連文書(SGML/XML)の変換バッチ処理のScalaでの記述など)を担当している。 複雑でイレギュラーな記述も多々見られる大量の文書を相手にする際に、Scalaの書きやすさと高速性とに大いに助けられている...

バックナンバー

連載:新開発言語「Scala」の実体
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5