Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

ScalaMatsuri 2019に参加しました #ScalaMatsuri

2019年6月28日、29日に東京で開催されたScalaMatsuri 2019に参加してきました。2016年に参加して以来2度目の参加でした。以下聴講したセッション+αについてメモや感想を書いていきたいと思います。

2019.scalamatsuri.org

関数型オブジェクト指向命令型 Scala

  • Scala.jsのAuthor @sjrdoeraene さん
  • 関数型、オブジェクト指向、命令型(手続き型)、さまざまなパラダイムScalaでは使うことができる
    • Scala.js のコードを例に出しながら解説していた。
    • apiの中で、アルゴリズムによっては関数型で書くと読みづらいまたは複雑になる場合、varを使うことも考えてよい。
    • sometimes, builders are better in readability というケースもある。
    • mutableな状態をクラス内に持っているけど、privateになってるので外からは見えない。(encapsulation)
    • いろいろなパラダイムを局所化(クラスの中に隠蔽しておく等)しておくというのがポイントだと思った。
  • こういう点はScalaの良いところだと思う

Scala における型クラス入門

speakerdeck.com

  • @phenan さん
  • 型クラスを、型システムにより支援されたストラテジパターンとみなすと理解しやすい
    • 少し理解が進んだ
    • Scalaでは型システムとimplicitパラメーターのおかげで良い感じに実装できる
  • 拡張メソッドの話
    • implicit classで既存のクラスにメソッドを追加できる
    • 型制約(implicitパラメーター)をつければ型クラスインスタンスでのみ使えるようにもできる
  • Scala3での型クラス利用法の紹介
    • implicitの用途がいろいろあって混乱しがちなので、Scala3ではキーワードが個別に定められていて良いと感じた
  • 型クラスを理解して実装できるようになるとScalaレベルが一段あがるような気がする

Spotify での Scio を使ったデータ処理

spotify.github.io

  • @skaalf さん
  • big data is big money
    • 大量のデータを扱うにはコスト管理(ストレージ、ネットワーク、コンピューティング)も大変というのは確かになあと思った。いかに効率的に行うかもビジネスに関わってきますよね。
  • Kryo to Typesafe coder. runtime black magic から compile time black magicになったという説明が面白かった
  • 巨大なデータを分割(シャード?)してマージするというjoinの仕方(SMB join)があるのを初めて知った
  • データ処理分野でもScalaが利用されているんだなあというのは今回の発見だった

休憩スペース

休憩スペースでは、freeなコーヒーとお菓子が提供されていました。私は一人でコーヒー飲みながら休憩してましたが、複数人で雑談してる人も多かったです。

Scala Driven Management

speakerdeck.com

  • @hiraiva さん
  • レビューとして型安全性と仕様的に正しいかに注力したというのも興味深いポイント
    • プロジェクトで使える時間も限られているため、スコープを絞るのは重要だなあと思う
  • 型安全性、ケースクラス、エコシステム(Java資産含めて)のおかげで最小のマネジメントコストで実装できたとのこと

プロジェクトで引き回す型をEffにするメリット

speakerdeck.com

  • @wing_007 さん
  • for糖衣構文を利用するに当たってどの型を使うか問題
    • 型合わせ問題…
  • 発表者は Eff[R, A] という型を利用しているとのこと
    • 銀の弾丸ではないと思うが、調べてみても良さそうだなと思った

お昼ご飯

海外からの参加者も多く、宗教等に配慮してお弁当にもいくつか種類があるようでした。これは恐らくハンバーグ弁当。1階にも休憩&充電スペースがあり、ここでゆっくり食べられて良かったです。

Scala における関数型並行処理入門

slides.com

  • 昼ご飯食べて会場に着いたら立ち見だったので聞くのを諦めました…

ハイパフォーマンスScala

speakerdeck.com

  • 発表者の経験からすると、パフォーマンスの問題が起きるのはI/OとGC
    • その理論を知っておくことが問題の解決につながる
  • プロファイリングツール使ってスレッドの監視すると良い
  • ノンブロッキングをサポートするライブラリはいくつかある。Slick, ScalikeJDBC-Async, quill-async, akka-http, finagle
  • ブロッキング処理用のスレッドプールを用意すべき。
    • Scalaやり始めた当初は何でもかんでも global な ExecutionContext を利用してハマった思い出がある
  • 大きなコレクションオブジェクトはGCボトルネックになる傾向がある
    • 計算するのに適切なコレクションクラスを利用しよう
    • 並列コレクション知らなかった
  • HashMapに対してWeakHashMapのkeyは弱参照
    • 参照に強さという概念を持つことを初めて知った
    • ということはkeyは独自のオブジェクトの方がよかったりするのか?(例では UserId 型のオブジェクトをkeyにしている)

Scala ♥ Graal

  • @flaviowbrasil さん
  • JITコンパイラをGraalに移行して、JVMJavaで実装できるようになったと言っていたような
    • 解釈あってる?
  • JVMの最適化でパフォーマンス改善できたっていう結論。しかし、詳細はついていけなかったw
    • 自分はまだJVMの理解は浅いのだなと再認識できた

継続とDI

gakuzzzz.github.io

  • @gakuzzzz さん
  • 再利用可能なモジュールを合成する方法について
    • 複雑な問題に対しては分割して解を合成するアプローチが必要
    • 継続渡しスタイル(CPS)と依存性注入(DI)の2つの手法を解説
  • 関数型プログラミングではCPSを使うことで再利用の粒度を変えられるようになった
    • すなわち、依存する関数を引数で渡す方法
    • これまでのプログラミングの歴史を追って再利用の粒度というのを解説しているのが良かった。
    • 構造化プログラミング→オブジェクト指向プログラミング→関数型プログラミング
  • CPSは素直に書くとネストが多重になるので、継続自体をクラスにしてmap/flatMapを定義することでforを使ってすっきり書くことができるようになる
    • このあたりはScalaらしいやり方だなと思った
  • アドホックな合成を行いたいときはCSPを使うとやりやすい

2日目

2日目の始まりは、前日までに書き込まれたアンカンファレンスで話したいことから反響の多かったものを中心に実際に行うセッションを決める「朝会」からスタート。書き込んだ人がセッション内容の概要を説明し、興味ある人が手を上げて、司会のお二人がその人数に応じて会場とコマを割り当てるというやり方。ゆるっとした空気感で良かったです。

Scala and SRE

  • アンカンファレンスで当日決まったセッション
  • 参加者みんなでテーマに沿って議論するというスタイルでした
    • モニタリング、分散トレーシング、パフォーマンスチューニング、Scalaならではのハマりポイント、etc.
  • 各社のSREが集まっていて、弊社ではこうやっているとかこういう場合ってみんなどうしてる?っていう感じでした
    • なので詳細はここには書くことができないw (これもアンカンファレンスの醍醐味ですね)
  • Javaパフォーマンス』をまずは読めと薦められた

Scala酒場

Scala関西Summitのアンカンファレンスで生まれたScala酒場がScalaMatsuriでも登場しました。Chatworkさんのブースに有志持ち込みの酒がどーんと設置されており、Scalaやその他雑談しながら飲んでました。なぜか方言の話になって面白かったですw

ハウツー・テストproper{t,l}y

speakerdeck.com

  • @larsr_h さん
  • プロパティテスティングについては興味はあるけど、まだ使えていないため知見が得られればいいなと思い聴講
  • テストの入力をどう生成するかというところの技術について解説されていた印象
  • Cogen/perturb当たりでよく分からなくなったのでつぶやいたところ、たまたま出席されていた @xuwei_k さんから解説いただいた(ありがとうございます)

感想

  • 国際カンファレンスとあって普段聞けないような話をたくさん聞けた
  • セッションによって同時通訳無しで半分程度理解できたものと、全然理解できなかったものがあった
    • 技術的な背景をどの程度知っているかにも依存しそう
  • 2016年のScalaMatsuriにも参加していたが、その頃よりも経験や知識を身に付けたのでより楽しめたと思う
    • 自分の中でこの部分は理解できてる、できていないというのが認識できてよかった
  • 写真もっと上手く撮りたい