Scala Days3日目です。体力の限界を感じておりまさに瀕死です。今日こそはサイバーエージェントさんより先にブログを公開するんだと頑張って書こうと思っていたのですが意識を失ってしまいました。
Spark 2.0
今日のキーノートはDatabricks社のCTOであるMateiさんです。
HadoopコミュニティではなくScalaコミュニティでの登壇ということもあってか、Sparkの生い立ちから2.0、そして2.1の展望までSparkをざっと押さえるための総集編といった感じの内容でした。
HadoopのカンファレンスでSparkのセッションがあってもScalaの話は一切出て来ないことも多いのですが、今日の話はScalaコミュニティに向けた良いイントロダクションだったのではないかと思います。
better-files: Towards a safe, sane I/O library in Scala
気鋭のScala用I/Oライブラリbetter-filesのセッションです。Scala Nativeと迷ったのですが、こちらに参加しました。
以前このブログでも紹介させていただきました。
better-filesのモチベーション、コンセプト(一貫性がありコンパクトでオーバーヘッドの少ないJava NIOのラッパー)を説明した後、README.mdに沿ってAPIを紹介するという流れでした。ScalaのI/Oライブラリで(準)標準的なポジションを狙えそうなものは現状ではbetter-filesしかないので期待したいところです。
Async Testing on the JVM and Scala.js
BillさんによるScalaTest 3.0での非同期テストのサポートに関する解説でした。資料は以下のPDFが近い感じです。
通常Futureのテストを行う際はブロックして値を取得してアサートすればよいのですが、Scala.jsだとJavaScriptがシングルスレッドなのでブロックすることができないのでどうすればいいのか?という問題がきっかけだったようです。
対策としてAsyncFunSuiteなどではテストケースがFutureを返せるようにし、そのFutureのチェーンをシリアルに実行しているとのことで、なるほどなぁと思いました。
class SampleServiceSuite extends AsyncFunSuite { test("getData") { val future = SeedService.getData("") future map { sd => assert(sd.contains(“total_rows")) } } }
日本で開催されたScalaMatsuriでも同じ話をされたと思うのですが、ScalaMatsuriのときはアンカンファレンスの自分のセッションの準備をしていたので参加できなかったのでScalaDaysで聞くことができてよかったです。また、逆にScalaMatsuriでは海外のカンファレンスに参加しなくても同じ話を聞けるというのは有難いことだなと改めて感じました。
Metaprogramming 2.0
scala.metaのセッションです。スライドは以下のPDFです。
scala.metaを使ったマクロでは以下のような感じでscala.metaで生成したASTをmeta { ... }
でインライン展開できるようになるようです。
val users: Table[User] = ... meta{ ...; q"new Table(Map(users, $subquery))" }
現在のマクロは廃止される予定とのことですが、この新しいマクロが使えるようになるとかなり簡単にマクロが記述できるようになりそうなのでいろいろ捗りそうです(その分乱用されてしまうのではないかという懸念も拭えませんが…)。
まとめ
今年のScalaDaysでは「Reactive (Microservices)」と「Scala.js」に関するセッションが多かったように思いますが、入門的なセッションや、個人で作っているツール・ライブラリのセッションもあり、昨年同様バランスのよい構成だったのではないでしょうか。
ここ1〜2年はScalaもようやく道具も揃って安定して使えるようになってきたかなという感じがありましたが、Scala CenterやDottyなど大きな動きも具体的になってきていますし、scala-nativeのような面白プロジェクトも出てきていますし、Scalaはまたしばらくいろいろと面白いことになりそうです。
また、個人的には昨年に比べればマシになったかなという実感はあるものの、まだまだ英語力に厳しいものを感じたので引き続き努力していきたいと思います。