第1回Scala勉強会大阪に行ってきました。

前置き

私自身は、以前はjava信者のエンジニアでしたが、
javaの発展が複雑化し過ぎていく傾向があるのにうんざりし、
java信者としては引退していました。

しかしScalaのような柔らかいスクリプトライクな構文なら、
アプリ作成のイマジネーションを損なうことなく、肩の力を抜いて開発できそうにも見えます。

この言語構文での開発スタイルなら、
javaの新技術というよりも、phprubypythonなどのweb系スクリプトに対抗できるのでは?
と期待できそうな気がします。
(実行環境はJavaVMなので、webサーバーでの運用は従来通りだろうけど。。)

というわけで、Scalaについては、構文は面白そうだけど実用性はどうなんだろう?
という疑問を持ちながら行ってきました。

スカラー入門」セッション

@asan_w エーさん。Cやjava系のオープンソース活動してるそうです。

実際にScalaを利用してプログラムを試してるそうで、
Scalaについての紹介と基本的な構文がメインの発表でした。

プレゼンをアップしてくれてた。
http://www.hcn.zaq.ne.jp/no-ji/memo-scala/ScalaIntroduction.pdf

Scalaの思想

小さなスクリプトから大規模システムまで、スケーラブルな言語

Scalaコンパイル

scalac(javacに相当する)でコンパイルすると普通のclassファイルになる
型推論など行うため、javacに比べればコンパイル速度は遅い。
スクリプト言語のように軽快に開発するにはここが大事なので、質問してみました。)

Scalaの実行

普通のclassファイルなので、JavaVM上で実行される。
Androidvm(Dalvik)でも動くらしい。
ただしこれによると、http://d.hatena.ne.jp/a-san/20111016
javaコマンドで実行するにはscala-library.jar がclasspathに必要らしい。
(ということは、scalaで作ったclassをjavaで利用するときもこのjarが必要なのかも?)
実行速度はjavaよりわずかに遅い程度なので、他の多くの言語に比べれば大変優秀。

Scalajavaとの互換性

javaのclassをそのままimportできるようです。
つまり、現在あふれてる膨大なjavaのライブラリを、scalaでもそのまま利用可能だそうです。
では逆に、scalaのclassをjavaで利用できるのか気になったので調べてみたところ、
ここにまとめてありました。
https://sites.google.com/site/scalajp/home/documentation/faq/java_interoperability
基本的に心配ないみたいですね。

Scalaの開発者(設計者)

スイス ローザンヌ工科大学(EPFL)のマーティン・オーダスキー教授。
JavaGenerics設計者で、javacコマンドにも携わった方だそうです。
これを聞いて一気にscalacに安心感が持てました。

Scalaのライセンス

Scala LicenseというBSDライクなもの

Scalaの開発環境
  • Eclise plug-in

 いまいちだったけど最近良くなってきたらしい。

  • SBT

 scalaのためのシンプルなビルドツール。@kitaro_naokiさんと@yalabさんのセッションでも出てきた。

  • Ant

 scalacタグで実行定義するだけ。@asan_wさんはこれ。

Scalaの言語構文

 これがメインのセッションでした。具体的な文法例では、

  • 変数宣言はvarとvalのみ。valは代入できないfinal変数(というか定数)。varは普通の代入可能な変数。
  • 文字列は\マークエスケープではなく""でエスケープ。なので改行をそのまま改行で表現できる。
  • switchに代わるmatch式がある。break文がなくなりました。
  • forやwhileのループをかなり省略して記述できる。2重ループなんかも1行で記述できる。

  しかし何故かbreakやcontinueがない。・・・これは欲しいよ。

  • throwsを強制しない。
  • リストやマップに、コーディングを楽にするメソッドがたくさん追加されてる。
  • javaのinterfaceやabstractの代わりにトレイトがある。なんと多重継承できる。

などなど。

「FilterMonadic(フィルターモダリック)ってなんだ」セッション

@uskzさん。

Filter …withFilter
Monadic …monad モナドとは、"圏論"という数学の分野からきている。

そしてプログラムではなく、まさかの数式を使った圏論の話。http://twitpic.com/70ib60
みんなさっぱり分からないまま、会場は笑いの渦につつまれました。

「プログラミングの魔導書」という本を出しているそうです。



「Web Framework Lift」セッション

@mitsuhirow さん

Liftとは、
ScalaによるScalaのためのフレームワーク
いろんなフレームワークのいいとこ取りを目指してるフレームワーク
この勉強会に来た人のほとんどが知ってるフレームワークだそうです。

すいませんフレームワークには興味ないのでほとんど聞き流しました。

「Play framework」セッション

@kitaro_naoki

これもRailsみたいなフレームワークだそうで、聞き流しました。
しかしServletを使わずにホットリロードで開発でき、スケールアウトし易い設計だそうで、
少し魅かれる気がしました。

AndroidScalaで作る話」ライトニングトーク

@yalab よしだあつし
http://d.hatena.ne.jp/rudeboyjet/
minami.rb Ruby関西所属のフリープログラマー

前日、ScalaでのAndroidアプリ開発を試してみたそうです。
その内容:http://d.hatena.ne.jp/rudeboyjet/20111014

とりあえずはScalaでもAndroidアプリ開発も出来るらしい。
しかし突き詰めるとScalaでは出来ないことも出てくるらしく、
そういうときは問題のクラスをScalaでも利用できるようにjavaでラップクラス作るとかで
回避できるらしい。

これに限らず、
Scalaで困ったらjavaで書けばいい」と思えば、
割と安心してScalaをお試し利用できそうな気がしました。


感想

やっぱjavaなだけにフレームワークの話が多かったですが、
javaはWebだけでなく、Androidやその他組み込みやHadoopでも使われる言語なので、
そういった方面での活躍も期待しながら、もう少し眺めてみたい。