アドヴァンスト・ソフト・エンジニアリング(ASE)は、プログラミング言語「Scala」での開発を得意とするソフトハウスだ。これまでのScalaでの受託開発の実績は、官公庁や金融系企業、Webサービスの企業など5件以上に上る。

 同社は従来、JavaやRubyでのシステム開発を中心に手掛けていたが、2010年にある金融系企業からScalaでの開発を打診され、利用したことをきっかけに、「技術者がScalaは面白いと気に入り」(同社技術開発部部長の藤川茂章氏)、人材育成を強化。それ以降、Scalaのスキルを持った人材がいることを会社の強みとして打ち出すようになった。

 以前は大手ベンダーからの二次請けの案件が多かったが、Scalaに取り組み始めたことを機に「Scalaでぜひ開発してほしいと、ユーザー企業から直接当社に指名が入り、案件を獲得できるケースが増えてきた」(藤川氏)という。現在進行中の案件では、約1割のプロジェクトでScalaを利用している。

望みのORMがなく、自ら開発

 ASEはScala向けのORM(Object-Relational Mapping)ライブラリである「Scala ActiveRecord」を開発し、現在、githubでOSSとして公開している。その名の通り、Ruby on RailsにおけるORMである「ActiveRecord」ライクなORMを、Scala向けに実装したものだ。

 開発したのは、同社でScala関連の取り組みを主導する技術者である小野文寛氏(技術開発部リーダー)と吉野谷侑樹氏(技術開発部)だ。2012年3月頃、複数のScala案件でデータベース周りの開発が必要になった。当時存在していたScala向けのORMをいくつか調査するも、気に入ったものがなく、小野氏がそのなかでも比較的使いやすいと感じた「Squeryl」を基にScala ActiveRecordの原型となるソフトを開発した。

 ただし、受託開発での成果物をそのままOSS化するわけにはいかないため、2012年4月に設計をやり直して再実装。吉野谷氏も開発に加わって、2012年5月に正式にgithubで公開した。

 Railsには「設定よりも規約を優先」(CoC、Convention over Configuration)という方針があり、ActiveRecordではクラス名を規約に則って命名すれば、そのオブジェクトは設定を記述することなくDBの当該テーブルと自動でマッピングされ、SQLを記述することなくDBを操作できるようになる。Scala ActiveRecordでも、これと同様の使い勝手を実現した。Scala向けのORMとして元々存在していたSquerylをラップする形で実現している。

Javaのリフレクションを使って実装

 Scala ActiveRecordの開発では、Javaのリフレクションの仕組みを用いた。小野氏らがScala ActiveRecordを開発していた2012年当時、Scalaにはまだ言語独自のリフレクションの仕組みがなかったため、「仕方なくJavaのリフレクションを使った」(小野氏)という。

 Scalaのプログラムは、コンパイルするとJavaのクラスファイルが生成され、Java VM(JVM)上で実行できるようになる。このためJVMが提供する実行時リフレクションの機能を利用できるわけだ。ただし、Javaのリフレクション機能を用いた場合、一部の型情報などScala特有の情報は取得したり操作したりすることができない。

 2013年1月にリリースされた「Scala 2.10」になってScalaにもリフレクションの仕組みが導入されたため、「2013年中にはScalaのリフレクション機能を使って、Scala ActiveRecordを書き直したい」(小野氏)という。