2015.02.13

Scala導入とその展望

Webフロントエンドエンジニアの安田です。

TriFortでは今年から開発がスタートしたプロジェクトの1つにScalaという関数型プログラミング言語を採用することを決定しました。

最近、関数型プログラミングの人気が高まってきているように感じます。その影響は他のオブジェクト指向言語まで広がっており、関数型の機能を積極的に取り入れるものもあるほどです[1]。このように関数型の性能が認められ、受け入れられつつあることは喜ばしいことです。

私も社内でScalaチームを結成し、関数型の概念の重要性を布教してきました。今ではScalaチームメンバー間でモナドやカリー化、参照透明性という言葉が交わされるようになりました。

この記事ではなぜScalaを採用したのか、そしてScalaを導入した先に私たちが何を目指すのかを記述します。

Scalaの優れたパフォーマンス

Scalaが採用された理由の1つは、パフォーマンスが優れていることです。Computer Language Benchmarks Game [2]ではJavaと同等かそれ以上のスコアを叩き出しています。またGoogleが出した論文 [3]でも、JavaやGoより優れた結果となっています。

私たちが独自に行ったWebアプリケーションフレームワークベンチマークでも、FuelPHPやNode.jsと比較してScalaのPlayフレームワークはレイテンシ、スループットともに優れた結果となりました[4]

ダウンロード

0.1秒を競うTriFortとしては、Scalaはよい選択となったと確信しています[5]

Scalaの真価、それは強力な記法がもたらすコードの品質

しかし私が考えるScalaの最も優れた点は物理的なパフォーマンスではありません。それは前述のGoogleの論文 [3]の結論、

Scala concise notation and powerful language features allowed
for the best optimization of code complexity.
Scalaの簡潔な記法と強力な言語の機能はコードの複雑性の最適化を可能にしている。

に記述されているように、簡潔で優れたコードを記述できることにあります。

Scalaの設計者であるMartin Odersky教授はScalaを「プログラマーとともに成長する言語」であると紹介しました[6]。Scalaはその柔軟性と簡潔性から様々な要求にスマートに応えることができます。

さらに私は彼の言葉からこう言い換えましょう。Scalaは「プログラマーの成長を促す言語」であると。

Scalaは関数型言語であり、オブジェクト指向言語です。両者の良い部分、悪い部分を味わうことができ、選択することができます。私たちが慣れているパラダイムから始めることもできます。コードのリファクタリングを重ねることで、なぜミュータブルなデータが問題を引き起こすのか、参照透明性とは何か、関数オブジェクトがいかに抽象化レベルを上げるのかといった設計思想をステップバイステップで学べます。

このプログラムの設計問題の解決能力を養うことは、ソフトウェア要求が複雑化する今、まさに私たちが求めていたものなのです。

Scala導入のその先には

ソースコードはソフトウェアプロジェクトにおいて最終的に最も重要な成果物である。 ーエリック・エバンズ

Scalaを巧みに操れることは確かに技術的に素晴らしいことです。しかしScalaがある組織の中のあるプロジェクトが採用した言語の1つとしてだけでなく、その先にももたらすものがあると考えています。

私がScalaを通してTriFortという組織に真にもたらしたいものは、ソースコードを資産として見なしその品質に責任をもつ文化なのです。

Scalaを起点に開発プロセスを改善する

残念ながら今のTriFortでは、テストを書いたり、プルリクエストを送ってコードをレビューしたりする文化がまだ根付いていません。
機能追加が頻繁に行われ、テストを書かなかったり、ソースレビューを受けないままアプリケーションがデプロイされていきます。

この積み重ねが技術的負債を生み、結果として本当に重要かもしれない将来のユーザーの要望に応えることを困難にしているのです。
プロジェクトの最終成果物はソースコードです。ソースコードの品質こそアプリケーションが継続的に成長していけるかどうかの鍵なのです。

Scalaはその名前の由来通りスケーラブルな言語です。そして関数型の恩恵によりテストしやすいのです。さらにsbtという強力なビルドツールで様々なタスクを自動化できます。Scalaではソースコードの品質の向上の取り組みをより容易にできるはずなのです。

重要なことは、テスタブルでスケーラブルなコードを書きやすく強力なビルドツールをもつScalaの恩恵を、Scalaチームだけにとどめておかないことです。

私たちはソースレビュー、テストやタスク自動化をScalaの力をもって華麗に実践しその重要性を他のチームに普及する役割があります。これらの重要性が社内に認知され普及してこそ、Scalaチームはその役割を果たしたと言えるでしょう。

まとめ

Scalaは実行時も開発時にもパフォーマンスに優れています。複雑な要求に簡潔に応えることができます。このScalaの力で、複雑化するユーザーや顧客の要求に継続的に応え続けるアプリケーションを生み出せるよう、私たちは開発プロセスの見直しにも着手します。

Scalaは私たちにとってただの言語にとどまらない、大きなミッションを背負った開拓者なのです。

トライフォートで働きませんか?

トライフォートで働きませんか?
弊社ではエンジニア、デザイナー、ディレクター、プランナーを随時募集しています。
ゲームやサービスが好きで、新しいことにチャレンジしたい、世界に強いインパクトを残したい、という人を探しています!
我こそは、という人は是非ご応募ください!