Scala Conference in Japan 2013!

やろうやろうと思っていたScalaが全然出来てないまま、とりあえず申し込んでみたScala Conference in Japan 2013に行ってきた。200人も集まったすごいカンファレンスだった。

「Up up and Out: Scaling Software with Akka」 発表者:Jonas Bonér(Typesafe)

全く理解のないまま参加してみたけれど、akkaのsupervisorによるエラーハンドリングの話が面白かった。akkaではこのことを"Let it crash"と表現するそうだ。

上位actorへのエラー処理の委譲、という理解でいいのだろうか。講演では、通常処理とエラー処理を分離するとスライドにあった。階層構造を形成するactorにおいて、下位のactorがなんらかの理由で失敗した場合、エラーが上位のactorへ通知され、そこで、どういった処理を実行するのかを決めるという内容だったように思う。例えば、

  • 失敗した下位のactorを破棄して、再生成し、リトライする
  • 失敗した下位のactorとそれに関連するactorすべてを破棄・再生成し、リトライする

などの例があがっていた。fault-tolerant onion-layered error kernelと表現していた。

「ドワンゴでのScala活用事例「ニコニコAndroid」」 発表者:後藤哲志(ドワンゴ)

ニコニコAndroidの開発裏話だった。従来はflashでニコニコ動画サービスを提供してきたが、Android 4以降、デフォルトで無効になっているとのこと。そのため、Androidアプリを開発することになったそうだ。Scala開発に関しては、パイロットプロジェクトとして実施。API部分でScala(Play framework)を使用。開発者は6名で、うち半分が新人、実務でのScala開発はほぼ初めて、といった状況だった。CIサーバーはJenkinsで、開発当初は4つの並行ジョブを許可していたが、次第にswap outが頻発するようになり、現在は1つに制限した。どうもScalaのメモリ消費量はかなり多いようだ。

「泣かないためのScala ライブラリの使い方・作り方」 発表者:高橋俊幸(エムスリー)

いわゆるsbtのことを業界用語では酢豚www

Scalaのバイナリ互換の話と、Scala用のリポジトリについて。実際自分で使った事がないので、うまくメモが取れなかったが、sbtでビルドするときに、scalaのバージョンを指定しなければいけない。sbt 0.12以前では、例えばScala 2.9.1向けのビルドでは2.9.2に対応できないらしいと。0.12以降のsbtを使うと、cross compilingできて、2.10.x系に対応可能なビルドが実行できるそうだ。

cpanやpackagist、pypiのようなパッケージリポジトリは、Scalaの場合、Sonatypeというらしい。これは最近できたもので、それまでは個人が作ったリポジトリに依存していたため、メンテナがいなくなって、必要なパッケージが手に入らず、社内のサーバーに保存されていたキャッシュを使った、という事件があったとか。

「使ってわかったScalaのここがダメ!Play2によるシステム開発事例」 発表者:竹添直樹(NTTデータ先端技術)

試行錯誤しながら、開発を行っていくと、予想外の事件が発生するが、その解決方法を紹介されていた。Scalaはコンパイルが重たい、ということで、いかにしてその負荷を軽減するかという話では、

  • buy high spec PC
  • turn off the incremental builder
  • turn off the code completion
  • try other IDE or text editor

という事だったwww もはや普通のテキストエディタで開発しろと。Q&Aでは、IntelliJいいよ!という声が上がっていた。

「Play Framework - The modern web framework that packs a punch」 発表者:James Roper (Typesafe)

Play frameworkの講演が最後にあった。非同期IOやserver sent eventsが簡単に実装できるというので、この間試してみたMeteorっぽいのもいけるらしい。Live codingで圧倒的なパフォーマンスを披露していたが、1時間程度練習したそうだ。IDEによくあるスニペットとかテンプレート機能を使ってがしがしコードが出来上がっていく様子が印象的だった。TL上ではIntelliJのステマ疑惑もあったみたいだけどwww

カンファレンス、ということでこういったパフォーマンスも必要なんだろうけれど、既存のフレームワークが解決してきた問題を、Play frameworkではScalaを使って、どうやって取り組んだのかとか、そういった話も聞きたかったな。

CoffeeScriptも使えるそうなので、asset pipelineの機能もあるんだろうか。

むらもとramen

Let's Install Scala 2.10

さて、ちょっとやってみようと思ったので、まずはScalaのインストールから。Macでは、Homebrewでインストール出来るので、brew installする。

brew install

$ brew install scala --with-docs
==> Downloading http://www.scala-lang.org/downloads/distrib/files/scala-2.10.0.tgz
######################################################################## 100.0%
==> Downloading https://raw.github.com/scala/scala-dist/27bc0c25145a83691e3678c7dda602e765e13413/completion.d/2.9.1/scala
######################################################################## 100.0%
==> Downloading http://www.scala-lang.org/downloads/distrib/files/scala-docs-2.10.0.zip
######################################################################## 100.0%
==> Caveats
Bash completion has been installed to:
/usr/local/etc/bash_completion.d
==> Summary
/usr/local/Cellar/scala/2.10.0: 2441 files, 363M, built in 4.3 minutes
$ which scala
/usr/local/bin/scala
$ scala -version
Scala code runner version 2.10.0 -- Copyright 2002-2012, LAMP/EPFL

Install sbt

いわゆる酢豚を使ってHello Scalaを試してみる。ドキュメントは日本語化されている。

brew install

$ brew install sbt
==> Downloading http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.12.2/sbt-launch.jar
######################################################################## 100.0%
==> Caveats
You can use $SBT_OPTS to pass additional JVM options to SBT.
For convenience, this can specified in `~/.sbtconfig`.
For example:
SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
==> Summary
/usr/local/Cellar/sbt/0.12.2: 3 files, 1.1M, built in 4 seconds

Hello Scala!

sbt getting startedに載っているHelloScalaを試してみる。実行するのはこんなコードだ。

object HelloScala {
def main(args: Array[String]) = println("Hello, Scala!")
}

Getting started

$ mkdir hello
$ cd hello/
$ echo 'object HelloScala { def main(args: Array[String]) = println("Hello, Scala!") }' > HelloScala.scala
$ sbt
Getting org.scala-sbt sbt 0.12.2 …
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.12.2/jars/sbt.jar …
[SUCCESSFUL ] org.scala-sbt#sbt;0.12.2!sbt.jar (1622ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/main/0.12.2/jars/main.jar …
[SUCCESSFUL ] org.scala-sbt#main;0.12.2!main.jar (6743ms)
...

初回実行時に色々jarファイルがダウンロードされる。これが終わると、プロンプトが表示されるので、runと入力すると、無事にHello, Scala!が表示された。

...
[info] Set current project to default-d49136 (in build file:/Users/satoshi/work/scala/hello/)
> run
[info] Compiling 1 Scala source to /Users/satoshi/work/scala/hello/target/scala-2.9.2/classes...
[info] Running HelloScala
Hello, Scala!
[success] Total time: 4 s, completed 2013/03/02 21:16:09
> run
[info] Running HelloScala
Hello, Scala!
[success] Total time: 0 s, completed 2013/03/02 21:16:11
> exit

Conclusion

objectって何かね?(Singletonになるんだっけ?)とか、そんなレベルなので、とりあえず積ん読になっているコップ本を読み返してみたり、会場ではIntelliJいいよ!という声が多かったので、次はIntelliJ IDEAを試してみようと思う。