ScalaMatsuri2014 1日目

ScalaMatsuri2014に参加してきた。運営スタッフやスポンサーの方々に感謝。

いま書ける範囲で感想を書く。

概要

大きなフロアをRoom A/Bに分けた上で、一部の時間帯を除いて各部屋で別のセッションをやるという感じだった。

これにより、同時間帯でより人気のあるセッションに民族大移動が発生するという感じで、スピーカーの方にはややプレッシャーがかかるのでは、と思った。

以下、印象に残ったセッションについて。

基調講演 - Scala 進化論

ScalaのauthorであるMartin Oderskyさんによるセッション。

私はScala歴1年経つかどうか、という程度の経験しかないのでScalaの過去の経緯など全く知らず、初めて聞く話が多かった。

特に印象に残った点は以下。

  • 割とScala.js推してたような感がある。
    • 個人的にあまりウォッチしていなかったので触った方がよさそう。
  • 不変なポリシーとして、Scala自体には多くの機能を入れず、ライブラリのために適切に抽象化する。
    • しかし各ライブラリでDSLが存在するのは諸刃の剣でもあり、巨大なプロダクションで利用する場合は規律や協調が必要。
  • null-safetyな機能を入れようとしたが、みんな自然とOptionを使い始めたので入れなかった。
    • NotNullなんていうマーカーtraitがあったらしい。

いきなり30分オーバーになってしまって、質問タイムを設ける余裕がないのが残念だった。質問タイムがあれば、例のコンパイラのforkの件について誰かしら突っ込んだのでは…。

sbt、傾向と対策(会場では聞けなかったのでニコ生で見てから追記)

  • いきなりマルチプロジェクトに対応した形で書くのがおすすめ。トップのbuild.sbtに以下の様に書く。
lazy val root = (project in file(".").settings( ... ))
  • testOnlyで指定したテストのみ実行。
  • ~testQuick でソースコードを監視し、変更があったら自動でテストを走らせる。
  • セッティングは内部ではkey-valueaマップの形になっている。 書き方は以下のようなイメージ。昔はいろいろな書き方があったが、今はこの3つでだいたいOK。
key := {
  val x = otherKey.value
  x + 1
}

key += { ... }

key ++= Seq(...)
  • キーはコンソールに打ち込むためのエントリーポイントのようなもの。
  • キーの委譲の仕組みがある。委譲の優先順位は ivyConfigurations で確認可能。
  • コンフィギュレーションとはソースとライブラリ依存性の集合。
  • compile と打ち込めばインクリメンタルコンパイルされる。
  • 1.0 化の前に入れたい機能がいくつかあるのでそれが終わってから。個人的には、sbt server(IDEやJenkinsなどとの統合ができるようになる) が気になった。

GitBucket: Perfect Github clone by Scala

GitHubのクローンであるところのGitBucketのauthorである竹添さんによるセッション。

もう片方の部屋ではsbtのセッションが始まるという圧倒的アウェー感の中始まった。

個人的に印象に残ったのは以下。

  • Apache MINA をSSH対応のために利用している。
    • MINAって個人的にはミナって読んでたけどマイナの方が正しいのだろうか。
  • Scalaプラグインを書くことができる(実際に、gistをプラグインで提供している)。
    • Scala触ったことない人が、GitBucketのプラグイン作成をきっかけにしてScalaを書くようになってもらえれば...」

GitHubやBitbucketなどを使えない人が実際に存在するわけで、そういう人に向けた現実的なソリューションとしてすごくいいものだと思った。

Solid and Sustainable Development in Scala

ScalikeJDBCやSkinnyFrameworkのauthorである瀬良さんによるセッション。

  • "Trait Chaos. We should have self-discipline." とか、"Do you really need cake pattern ? "など、全体的に心当たりがありすぎて耳の痛い話だった。
  • 理想論だけでなく、現実の問題を解決すべきという姿勢には強く共感できるので、仕事で使えるチャンスがあれば使っていきたい(できればcontributionも...)。

全編英語のセッションで翻訳なしだったけど、ネイティブスピーカーの英語は聞き取れない私でもだいたい聞き取れたので特に問題なかった。

はてなにおけるScala活用事例

Mackerelの開発チームの方によるセッション。

  • AngularJSを使っていて、更にPlayのテンプレートエンジンにTwirlを使っている。
    • エンジニアでも分からなくなることがあるのに、はてなのデザイナーはうまくやっているとのこと...
  • 他セッションでは割とディスられがちだったSlickを使っている。
    • コードによっては解読不可能なクエリが生成されて厳しいことになる。
    • 生成されたクエリを見た感じでは、あまり触りたくないなぁと...

追記予定 ?

他のセッションの話も書きたいけどまだスライド公開されてなかったりするし最高に眠いので、また明日以降追記するかもしれない。

2日目予定

1日目はほぼ講演を聞くだけだったが、2日目はアンカンファレンスという、"従来のような講演形式とは違う「参加者が創っていく」カンファレンス" が行われるらしい(公式サイトより抜粋)。

会場の隅で、アンカンファレンス用のネタがホワイトボードに貼付けられていたのでざっと見た感じ 以下あたりが気になった。

2日目も朝早いのでさっさと寝て備える。