Scalaはエンタープライズで威力を発揮する?

ここ2年ほどはScalaを使って業務アプリケーションの開発をしているのですが、

  • システム開発Scalaを使うとどのようなメリットがあるのか?」
  • 「どのようなシステムにScalaは向いているのか?」

ということを時折聞かれることがあります。

これに対して世の中的によく言われているのが、Scala関数型言語の特徴を備えているため並列処理に向いており、Play2やAkkaなど非同期処理のためのフレームワークも充実しているため大量のアクセスを捌かなければならないサービスや、スマートフォンアプリのバックエンドなどに向いている、というものです。

しかし、業務アプリケーションの世界では利用ユーザ数やアクセスモデルが事前に予想できるため比較的正確なサイジングが可能ですし、そもそも利用者が限られているため突然想定外のアクセスが殺到することはありません。むしろオンラインでもある程度複雑な集計処理などを行うことも多いため、スケールすることよりも単発のリクエストをどうチューニングしていくかということが重要だったりします。そうなると業務アプリケーションを開発する上ではScalaのメリットと言われている部分が活きてこないということになります。

実際のところ、自分も当初はエンタープライズScalaを使うメリットとは?と問われたときに漠然とコスト面、品質面でのメリットがあるという説明しかできませんでした(もちろん、ではどのくらいのメリットがあるのか、という点については実プロジェクトである具体的な数字を取ってはいました)。Scalaはどちらかといえばエンタープライズ向きではなく、LLが使われることの多いWeb界隈に型安全性を持ち込むことのできる存在だと考えていました。

でも、ここ数年実際にScalaを使っていくつかの業務アプリケーションを開発してみて、むしろScalaエンタープライズにこそ向いているのではないか、と感じるようになりました。

ScalaJavaと比べると高い型安全性と柔軟かつ簡潔な記述が可能です。そのため、業務アプリケーションで必要になる複雑な計算処理をシンプルかつ安全に記述することができます。感覚的な表現になってしまいますが、LLと同じ記述量でそれよりはるかに「硬い」コードが書ける、というとわかりやすいでしょうか。この「硬い」という点がカチッと作る業務アプリケーションとは非常に相性がよかったわけです。「並列性」を活かすにはそれなりのトラフィックが必要ですが、言語としての「硬さ」はどのようなアプリケーションでも有効です。そしてそれは業務アプリケーションでこそ活きてくるのではないか、ということです。

これはScalaに何か特別な機能があるということではなく、イミュータブルなコレクションライブラリ、ケースクラスや型付きのタプル、パターンマッチなど、様々な機能の組合せによってもたらされているものなので、やはり実際にコードを書いてみないと伝わらない部分が多く、Scalaのメリットとして説明しにくいことには変わりないのですが、実際に自分の肌でそう感じることができたのは大きな前進でした。

今後はこういった点をもっとわかりやすく伝えていけるようにいろいろ考えてみようと思います。