ScalaMatsuri 2016 1 日目に参加してきました

scalamatsuri.org

私は業務で Scala を使うことは無いですが、社内システムや簡単な API サーバーのプロトタイプをするときに Scala を使うことがあります。
なので Scala を勉強するためと、社内で Scala を使う人を増やすにはどうするのが良いか考えるために ScalaMatsuri に参加しました。

参加したセッションは次のとおりです。

  • なぜリアクティブは重要か
  • 楽しく役立つ Scala リファクタリング
  • バッチを Akka Streams で再実装したら100倍速くなった話
  • アジアから Scala OSS に貢献するということ
  • ScalaコードはJVMでどのように表現されているのか

メモレベルですが残しておこうと思います。

なぜリアクティブは重要か

www.slideshare.net

リアクティブと言うと、 The Reactive Manifesto や、RxJava、Akka など、私にとってなかなかつかみどころのないものでした。
このセッションでは、リアクティブの実装から見て重要な概念をピックアップしていて、自分なりのリアクティブの理解を作りことができてきました。

以下は聞いた内容のメモです。

  • モジュール性
    • in に依存関係を集める
    • モジュールの中に状態を閉じ込めることで障害を隔離する
  • 実行順序はどうするのか

    • 有向グラフ
    • いつもの計算はデータフローに置き換えることができる
    • けど、どうやって実行するか
    • だからこそ実行モデルを別に考えることができる
    • リアクティブな実行モデルとは?
  • リアクティブな実行モデルに関数型は適しているのか

    • 関数型によるモジュール性の向上
      • 遅延評価と高階関数
      • 「解を貼り合わせる」
      • 生成器と選択器による遅延評価
      • 集合に対する操作を map() に局所化する
      • これらを RP に適用できないか
      • 宣言とランタイムを分離できる
      • What と How の分離
      • ランタイムを分離するということは、GPU, 別のマシンで実行とかできるのでは
      • Akka はやり始めている
      • DSL とランタイムという疎なプログラミングモデル
  • アーキテクチャ

    • なんで分散処理したいのか
      • スケーラビリティ (システムと組織)
      • 対象外性 (部分的な障害に留める)
    • そもそも全く新しい考え方というわけではなく、リアクティブ・システムと言う名前をつけた
    • それはつまりメッセージ駆動
  • Apache Dataflow

楽しく役立つ Scala リファクタリング

www.slideshare.net

話されていた内容は、Scala に限った話ばかりではありませんでした。

  • 書式を決めた文字列を多用するのではなく、きちんとモデリングする
  • 説明変数を用意する
    • Scala の場合だと、説明ヘルパー関数とかにもなるんでしょうか
  • タプルにインデックスでアクセスするとわかりづらいので、これもモデリングする

ScalaMatsuri では幾度どなく聞く事になりましたが、Scala は表現力が非常に高い反面、簡潔すぎる書き方ができます。
名前をつけることは本当に重要ですね。

バッチを Akka Streams で再実装したら100倍速くなった話

http://www.slideshare.net/kazukinegoro5/akka-streams-100-scalamatsuri

Akka Stream でやったらどうなったかと、また他の Spark や Storm などと比較するとどうなのか、とか聞いてみたかったです。
また、自分でもやってみようと思います。

アジアから Scala OSS に貢献するということ

www.slideshare.net

英語は重要だと思いました。
Skinny FrameworkScalikeJDBC は英語ドキュメントが非常に充実しています。
喋れたり、書けるようになるにはそれなりの努力が必要になりますが、それによって得られるメリットは大きいと改めて実感しました。

ScalaコードはJVMでどのように表現されているのか

www.slideshare.net

こちらも Scala に限らない話ですが、クラスファイルを読み解くということは、ちょっと込み入った開発をしようと思うと必要になるスキルだと思います。
JVM の invokeDynamic 命令が追加されたこともあったり、JJUG のナイトセミナーで JVM の話を聞いたこともあって、JVM での表現については興味がありました。
参考までに、JJUG で聞いてきたセッションのスライドはこちらです。 https://blogs.oracle.com/buck/resource/hs_sync_jp.pdf

クラスファイルを読むことは一件敷居が高いように見えますが、このセッションのおかげできっかけをつかめた人は多いのではないでしょうか。

まとめ

スタッフの方に本当に感謝です。
進行はスムーズで、お弁当も充実してました。
セッションの内容も習熟度に応じて興味のあるものを選択できました。
Scala をもっと使いこなせるようになりたいと思うような、非常に充実した一日でした。