2019年6月28日、29日に東京で開催されたScalaMatsuri 2019に参加してきました。2016年に参加して以来2度目の参加でした。以下聴講したセッション+αについてメモや感想を書いていきたいと思います。
関数型オブジェクト指向命令型 Scala
- Scala.jsのAuthor @sjrdoeraene さん
- 関数型、オブジェクト指向、命令型(手続き型)、さまざまなパラダイムをScalaでは使うことができる
- こういう点はScalaの良いところだと思う
Scala における型クラス入門
- @phenan さん
- 型クラスを、型システムにより支援されたストラテジパターンとみなすと理解しやすい
- 少し理解が進んだ
- Scalaでは型システムとimplicitパラメーターのおかげで良い感じに実装できる
- 拡張メソッドの話
- implicit classで既存のクラスにメソッドを追加できる
- 型制約(implicitパラメーター)をつければ型クラスインスタンスでのみ使えるようにもできる
- Scala3での型クラス利用法の紹介
- implicitの用途がいろいろあって混乱しがちなので、Scala3ではキーワードが個別に定められていて良いと感じた
- 型クラスを理解して実装できるようになるとScalaレベルが一段あがるような気がする
Spotify での Scio を使ったデータ処理
- @skaalf さん
- big data is big money
- 大量のデータを扱うにはコスト管理(ストレージ、ネットワーク、コンピューティング)も大変というのは確かになあと思った。いかに効率的に行うかもビジネスに関わってきますよね。
- Kryo to Typesafe coder. runtime black magic から compile time black magicになったという説明が面白かった
- どっちにしろ黒魔術なのかっていうw
- バイト配列と実際のオブジェクトをシリアライズ・デシリアライズする方法を知っているのが
Coder
という理解 - https://spotify.github.io/scio/internals/Coders.html
- v0.7.0以降はコンパイル時に適切なCoderを見つけてくれるようになった
- 巨大なデータを分割(シャード?)してマージするというjoinの仕方(SMB join)があるのを初めて知った
- データ処理分野でもScalaが利用されているんだなあというのは今回の発見だった
休憩スペース
休憩スペースでは、freeなコーヒーとお菓子が提供されていました。私は一人でコーヒー飲みながら休憩してましたが、複数人で雑談してる人も多かったです。
Scala Driven Management
- @hiraiva さん
- レビューとして型安全性と仕様的に正しいかに注力したというのも興味深いポイント
- プロジェクトで使える時間も限られているため、スコープを絞るのは重要だなあと思う
- 型安全性、ケースクラス、エコシステム(Java資産含めて)のおかげで最小のマネジメントコストで実装できたとのこと
プロジェクトで引き回す型をEffにするメリット
- @wing_007 さん
- for糖衣構文を利用するに当たってどの型を使うか問題
- 型合わせ問題…
- 発表者は
Eff[R, A]
という型を利用しているとのこと- 銀の弾丸ではないと思うが、調べてみても良さそうだなと思った
お昼ご飯
海外からの参加者も多く、宗教等に配慮してお弁当にもいくつか種類があるようでした。これは恐らくハンバーグ弁当。1階にも休憩&充電スペースがあり、ここでゆっくり食べられて良かったです。
Scala における関数型並行処理入門
- 昼ご飯食べて会場に着いたら立ち見だったので聞くのを諦めました…
ハイパフォーマンスScala
- 発表者の経験からすると、パフォーマンスの問題が起きるのはI/OとGC
- その理論を知っておくことが問題の解決につながる
- プロファイリングツール使ってスレッドの監視すると良い
- ノンブロッキングをサポートするライブラリはいくつかある。Slick, ScalikeJDBC-Async, quill-async, akka-http, finagle
- ブロッキング処理用のスレッドプールを用意すべき。
- Scalaやり始めた当初は何でもかんでも global な ExecutionContext を利用してハマった思い出がある
- 大きなコレクションオブジェクトはGCのボトルネックになる傾向がある
- 計算するのに適切なコレクションクラスを利用しよう
- 並列コレクション知らなかった
- HashMapに対してWeakHashMapのkeyは弱参照
- 参照に強さという概念を持つことを初めて知った
- ということはkeyは独自のオブジェクトの方がよかったりするのか?(例では
UserId
型のオブジェクトをkeyにしている)
Scala ♥ Graal
- @flaviowbrasil さん
- Twitterの中の人
- JITコンパイラをGraalに移行して、JVMをJavaで実装できるようになったと言っていたような
- 解釈あってる?
- JVMの最適化でパフォーマンス改善できたっていう結論。しかし、詳細はついていけなかったw
- 自分はまだJVMの理解は浅いのだなと再認識できた
📢 If you're at @ScalaMatsuri and want to know:
— Flavio W. Brasil (@flaviowbrasil) June 28, 2019
- How the JVM optimizes your code
- The performance challenges of Scala applications
- How Twitter is optimizing the JVM
- What I'm talking about in this thread
Come to my talk
🔥Today at 4pm in Room A🔥https://t.co/YQUvbFKk5L
継続とDI
- @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
- @larsr_h さん
- プロパティテスティングについては興味はあるけど、まだ使えていないため知見が得られればいいなと思い聴講
- テストの入力をどう生成するかというところの技術について解説されていた印象
- Cogen/perturb当たりでよく分からなくなったのでつぶやいたところ、たまたま出席されていた @xuwei_k さんから解説いただいた(ありがとうございます)
perturbe generator ってどういうことだろう... #ScalaMatsuri #sm_a
— ニボシーニョ (@TAKAyuki_atkwsk) June 29, 2019
Cogen[A] perturbは、seedとAの値を受け取り、新しいseedを返すものなんですが、それ直接使うよりは、そもそもCogen自体が"関数そのもの"を生成するためのものという面が大きいので、そっち理解しないとCogenのありがたみがあまりわからないかもしれないですね#ScalaMatsuri https://t.co/lEhJoeskFG
— Kenji Yoshida (@xuwei_k) June 29, 2019
感想
- 国際カンファレンスとあって普段聞けないような話をたくさん聞けた
- セッションによって同時通訳無しで半分程度理解できたものと、全然理解できなかったものがあった
- 技術的な背景をどの程度知っているかにも依存しそう
- 2016年のScalaMatsuriにも参加していたが、その頃よりも経験や知識を身に付けたのでより楽しめたと思う
- 自分の中でこの部分は理解できてる、できていないというのが認識できてよかった
- 写真もっと上手く撮りたい