scalaをプロジェクトに使用しようかと調査した感想

2img 5191 s 1024x682 scalaをプロジェクトに使用しようかと調査した感想

調査した備忘録として書いておきます。
ほとんど第一印象に近いです。

もう少し使ってみた後に再度感想を書いてみたいです。

JavaのIDEがよくできている。

今回改めてEclipse+Javaの組み合わせに助けられているなと。。
importとか関数なんかもほとんど補完に頼りっぱなしです。
scalaの感想じゃなくてすみません。

scala pluginのつくりなのか設定が悪いのかよくわからないのですが

object FrenchDate {
  def main(args: Array[String]) {
    val now = new Date
    val df = getDateInstance(LONG, Locale.FRANCE)
    println(df format now)
  }
}

をコピペしてimportの補完をさせてみたのですがすべて補完してくれなかったです。
この辺はもう少し使ってみて設定とか調べてみてからでしょうか。
場合によってはIntelliJ IDEAとかxyzzyのscala-modeでしょうか。Emacsはマイナーな言語でもとりあえず強調表示とかは作られているので困ったときはEmacsなのかなと改めて思いました。

ライブラリの更新が滞っているものがあったりする。

twitterのライブラリもそうですがライブラリの更新が滞っているものがありますね。
この辺はJava等でも人気がないと滞りますが主要なところは意外と頻繁にメンテナンスが入っています。

日付関連のライブラリを調査したのですがjavaにjodaーTimeというのがあり、日付の扱いが楽になるという情報があり、調査するとscalaでラップしたものもあるということで調査してみました。

joda-time
http://joda-time.sourceforge.net/
scalaj-time
https://github.com/scalaj/scalaj-time

joda-timeのラッパのようですがjoda-timeのバージョン1.6系のものでないと動かないようで、現在joda-timeは2.2とメジャーバージョンまであがっている状態です。

scalaからだと簡単にJavaプログラムが呼べるのでラッパの意味があまりなくて需要がないのかもしれませんがこの辺は注意しないといけないところかもしれません。


joda-timeとscalaの連携をさらに調査するとどうもコンストラクタをうまくラップさせないとscalaからjavaのライブラリを使えないようですね。

scalaとjoda-time
http://d.hatena.ne.jp/xuwei/20110622/1308705121

それでわざわざラップになるscala-timeっていうものを作った人がいたんですね。
なんか納得しました。

関数型言語が味わえる。

Haskel、Ocamlのように関数型言語が堪能できます。

純粋関数型言語ではないようなので関数型言語の人には「違うじゃん!」と突込みが入っていたりするようです。

http://delihiros.hatenablog.jp/entry/2012/05/01/032433

ただし、そうはいっても関数型言語としての仕組みはきちんと入っていますのでJava言語をやっていて関数型言語に興味がある人は手をつけるにはいいと思います。

Javaの資産をいかせる。

JavaVM上で動くということもあり、Javaとの連携は非常に簡単にできます。
先ほどのjoda-timeを組み込んで使ってみたりしましたがそれほど面倒はありませんでした。

scalaの強みを生かしたいプロジェクトがあり、すでにJavaで実装済みのロジック等あればそれはそのまま使用するということもありかなと思います。

※ただし、先ほどのようにコンストラクタの問題等あるようなので単純には使えないこともありそうです。ラップさせる関数を作る等必要かもしれません。

並行処理が強い

erlangなどと比較されている記事もありましたが並行処理が書きやすいように工夫されているようです。
twitterが使用したきっかけとしてこの並行処理、分散環境への対応というところで使用したような雰囲気があります。

Finagleやgizzardなどをみてみました、特にgizzardのソースを見たところそんな大量のコードというわけでもないのに、これで分散データベースを実現しているとはすごいなと思いました。

バックエンドの処理で分散環境に対応する処理を書きたいような場合には候補にあげていいなと思いました。
Akkaがおもしろそうです。ただ、Javaからも使えるようなのでわざわざscalaを使わなくてもよいのかなとも思いました。

意外と一通りそろっている。

かなり失礼ですがもっと何もないのかなと思っていました。
EclipseIDEにpluginがあったり、テンプレートエンジンとしてScalateがあったり(ちょっとみてみましたが中々よさげで使ってみたくなりました)先ほどの日付の話なんかはちょっと自作すればよいだけですし基本的に必要な所はそろっている感じです。

総評としてとりあえず使ってみるかどうかという話からいくと現実的にプロジェクトで使用するのはありだと思います。

いろいろと見ていて思いましたが基本的にはBetterJavaとして関数型言語としての部分は封じて作ったほうがメンテナンス性はよさそうな気がしました。

モナド、高階関数、関数型言語にありがちな再帰をばりばり使ったコードなんかを書いておくと作った本人しか修正できないシステムになりそうな気がします。

調査中に気になる記事を発見しました。

infoQ
「YammerがScalaからJavaへ移行中」
http://www.infoq.com/jp/news/2011/12/yammer-scala

このなかで速度の部分が書いてありますがおそらく本質的なところは速度の問題ではなくてメンテナンス性の問題ではないかなと思います。書き方によっては非常に判読しづらく速度も遅くなるときがあるということでしょうね。

C++でも昔いわれてたことがあったような記憶がありますがメンテナンスに問題が起きそうな言語機能は封印して作りこみをしたほうが幸せになれるかもしれません。

「twitter が Scala 大好きすぎて (?) 設定ファイルまで Scala のソースコードな件」
http://d.hatena.ne.jp/xuwei/20110805/1312551980

こんな感じでScala Loveな感じの会社もあります。

パターンマッチングや並行処理関連のところは使ってみたいですし、普通のプロジェクトでも結構使い勝手がよさそうな気がします。

いろいろと相当複雑で込み入った特殊な要件があったり、処理する量が多い、分散環境対応のコードをがりがりかかないといけないなんていう事情がある場合にはscalaは中々面白い解になるのではないかと思います。

逆にごくごく一般的な業務アプリを作っていく場合にはあまりscalaを押す理由は少ないかと思います。

もう少し使ってみた後に再度感想を書きたいですね。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">