argius note

プログラミング関連

Scala事始めにLiftを触ってみる...当然Mavenも (2)

今回は、導入編での失敗の詳細と、Scalaを選択した理由などについて書いてみたいと思います。


Liftを導入してアプリケーションサーバ上で動かすまで (NG TAKE バージョン)

まず、じっくりと調べて進めると色々と余裕が無い中で続かなそうなので、あまり考えなくても良いようにテキトーにやっていきます。


Liftを導入するには、Mavenが必要です。ついに、Mavenに手を出すことに。
何も考えずに、最新のバージョン3.0.3をインストール。

$ mvn -version
Apache Maven 3.0.3 (r1075438; 2011-03-01 02:31:09+0900)
Maven home: D:\apache-maven-3.0.3
Java version: 1.7.0, vendor: Oracle Corporation
Java home: D:\java1.7\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows xp", version: "5.1", arch: "x86", family: "windows"
$

ちなみに、最初はCygwinでやってみてました。
でも、何故かFile.createTempFileでエラーが出てしまう*1ので、この日はギブアップ。
翌日、コマンドプロンプトに切り替えて続行。少し先に進んだものの、今度は"scala-tool requires maven 2.1.1"(記録無しのため正確でない)というエラーが出て、Maven3は削除して、2.2.1をインストールし直しました。


ところが、削除して2.2.1しか無いはずなのに、また"requires maven 2.1.1"が出ます。訳が分からず、この日もダメかと思いながら頭を冷やすと、「5年半の間にあれもこれもインストールしてきたPCだけに、何かの拍子で他のMavenがインストールされているのでは?」と思い直し、"locate maven"してみる。すると、TracLightの下に発見。ああ、そういえばあったかも。ご丁寧にも、パスが通っているんですね。バージョンを出してみたら、"2.0.9"でした。
あ、これを調べる前に環境変数も調べたはずなんですけど、見落としてたんでしょうね。集中力が無いときにやるとこんなもんですよ。

そもそも、環境変数PATHの先頭に追加すれば良かったのに、なぜか末尾に追加してしまったというのも酷い失敗です。


改めてmaven2.2.1で成功。その後、いったんリポジトリ(.m2)を削除して(たぶん消さなくても問題無い)maven3.0.3でやり直し、あとはLast Takeのとおりです。


あまり考えずに進めたことで、却って疲労が増してしまったという落ちですね。


Scalaを選択した理由について

関数型言語オブジェクト指向、構文、静的型付け、不変(参照透過性)、JVM言語、Lift、などなど。
もし自分でプログラミング言語を作るとしたら、Javaの不満を解消しつつHaskellのいいとこ取りをした言語がいいな、と思っていたら、既にあった。それがScalaでした。


関数型言語は、Haskellに触れてみて、難しいけど強力だと思うようになりました。中でも参照透過性、型推論あたりは実に強力です。さらに今後はスパコンでなくても並列処理が主流になっていくようで、それに合わせて関数型言語ももっと注目されることになるでしょう。
オブジェクト指向は言うまでもなく。
構文。C言語系に多い文末にセミコロンというのがどうにも好きになれないので。中カッコが無ければさらに良かったんですけどね。その点はRubyとかPythonは良いですね。でも構文だけで見たらHaskellが一番しっくりくるかも。
静的型付けについては、Javaで変数はfinalがデフォルトだったらいいのにという思いと、C#の型推論を合わせたようなvalとvarの概念はぴったりでした。型を省略できるのに強い静的型付けを実現する型推論については、「型推論はコンパイルに時間がかかるのがネックとされていましたが、ハードウェア性能の向上に伴い、実用的になってきました」のようなことを誰かが言っていました。
不変については、Scalaは非純粋関数型ですが、immutableを意識しやすくはなっていると思います。
JVM言語。2009-01-14のエントリでも触れているように、次世代JVM言語にシフトするタイミングなんだと思います。
Haskellは、私の利用する環境では制限があったりプラットフォームが多様だったりして、日常的に利用するのは困難です。その点、JVMベースであれば、私の利用する環境のどこでも使えるので、Scalaが候補になりました。HaskellHaskellで続けたいとは思います。
Clojureという選択肢もありましたが、何も考えずに進んでみたらScalaのほうに行き着いたので、Scalaを選びました。
Liftについては、私設の実験環境で使うWebアプリフレームワークを選定している最中に、Scalaをやるんだからちょうどいいのでは、ということで決まりました。


ここ数年は、ほかの事(主に"RELEASE"とコンピュータ以外のこと)に専念していたため、今回やっと始められたところです。

*1:CygwinJavaを使うときに、コアライブラリしか使わないプログラムでも同様の現象が起こったことがあります。いずれ調べるかも。