ScalaはJavaの後継のポジションに最適
ScalaはRubyやJRuby、Python、Groovyといったスクリプト系言語と比較されがちですが目指しているものが違うことに気づきました。
筆者が興味本位でScalaやLiftを趣味で触ったり、記事を読んだりして気がついたことは、Scalaというのは、RubyやJRubyの対抗馬ではなくて、Javaの後継のポジションに最適な位置づけのものであるということです。
ちなみにScalaの開発の動機は、スケーラビリティを持った言語の開発だったようです。スケーラブルなアプリケーションつまり、エンタープライズ領域で使われるシビアなアプリでも対応できるように設計されているのです。そしてJavaの後継にふさわしく、JRubyやGroovyと同様、JavaのAPIをそのまま使うことが可能です。
そのため、あくまで静的型の言語になっています。静的な言語なので、コンパイルで実行前に問題を発見できますし、多めの人数で開発する時にも問題ありません。IDEのサポートも期待できます。そして、ベンチマークを見ても確かに実行時間もJavaのそれとほぼ同等です。これはすごいことです。
英語のサイトを見ていると、基本は静的な言語ですが、必要な時のみダックタイピングができるイメージだという記事もありました。
確かにRubyに比べると楽ちんさや「よきにはからってくれる感じ」は負けますが、Javaと比べるともう比較にならないぐらい楽ちんにコードが書けます。また、動的な言語であるかのようなコーディングも簡単に可能です。つまり、Rubyに肉薄する楽ちんさで、エンタープライズアプリケーションが作れる言語ということが言えるわけです。
さらに、Scalaは新しい言語ですので、Javaと比較すると純粋なオブジェクト指向言語ですし、関数型言語でもあるので関数型言語のメリットも享受できるようになっています。フレームワークのLiftもSeaside、Django、Erlyweb、Ruby on Railsといった新しいフレームワークのイノベーションをいいとこどりしたような設計になっています。そして、Javaの資産もそのまま使えるという素晴らしさです。
そうなのです、ScalaはRubyの対抗馬ではなく、Javaの後のエンタープライズアプリケーションを継承するのに現時点で最適な言語なのです。
| Java | Ruby | Scala | |
| 多人数開発 | ◎ | △ | ◎ |
| コンパイラによるチェック | 厳しい | コンパイラによるチェック | |
| IDEサポート | ◎ | △ | ○ |
| 豊富に存在する | 動的な性質があり、静的言語ほどのサポートは難しい | 技術的にはJava並に可能。将来的には◎ | |
| パフォーマンス | ◎ | △ | ○ |
| 研究が進み早い | インタプリタなのでScalaと比べると一ケタぐらい遅い | JavaVMで動作しJavaとほぼ同等だが、動的なことをするとJavaより遅くなる | |
| 並列処理のサポート | △ | ◎ | ◎ |
| Ruby、Scalaに比べると弱い | Fiber | Actor | |
| 技術者の数 | ◎ | ○ | × |
| これはダントツ! | 現場で使えるレベル | 今はまだマイナー | |
| 学習の容易さ | ○ | ◎ | × |
| ダントツの情報量 | たくさんの書籍が出ており、初心者にもとっつきやすい | 英語のみ | |
| 生産性 | △ | ◎ | ○ |
| 気持ちいいレベル | RubyほどではないがJavaよりずっとよく、静的型によりテスト工数はRubyの60%程度 | ||
| 柔軟性 | △ | ◎ | ○ |
| 動的な性質と強力なメタプログラミング | RubyほどではないがJavaよりずっとよい | ||
| オブジェクト指向 | ○ | ◎ | ◎ |
| 一部プリミティブ型などあり | 動的型かつ純粋なオブジェクト指向 | 純粋なオブジェクト指向 | |
| 関数型 | × | ○ | ◎ |
| なし | 可能 | 関数型の強力なサポート |
比較表の上にある項目ほどエンタープライズアプリケーションの開発に関係の深いものです。一方、下の項目は言語の柔軟性や生産性などの項目になっています。現時点では、シビアさやレスポンス、大人数開発が要求されるエンタープライズアプリケーションはJava、そしてそれ以外はRubyという選択肢が「正解」と思います。
今後、開発者が増え、書籍も多く発行されるようになり、Scalaがエンタープライズアプリケーションのプラットフォームとして存在感を増してくれば、俄然面白くなるのは間違いありません。私のように現場で使えることを重視する人間からすること、これはとてもわくわくすることです。
私は今後もRubyを使うと思いますが、RubyとScalaでは目指している領域が違います。そのため、私は今まで「Rubyと、RubyでできないところはJava」という感覚でしたが、今後は、RubyとScalaという二本立てで言語を使っていこうと思います。
言語の楽しさという意味でも、新しいトピックが満載で、とても学習しがいのある言語です(といっても、難しいという意味ではありません)。
ぜひ皆さんもScalaの楽しさと実用性に触れてみるのはいかがでしょう?
参考
Gentoo : Intel Pentium 4 Extra!のページより引用。







