entry-header-eye-catch.html
entry-title-container.html

entry-header-author-info.html
Article by

ScalaMatsuri 2022 に参加してきました!

はじめましてのかたははじめまして。 Scala エンジニアの Javakky です。

今回は去る 3/19 (土)、 3/20 (日) に行われた ScalaMatsuri 2022 の参加レポートをお送りしていきたいと思います!

ScalaMatsuri とは?

ScalaMatsuri はアジア最大級の Scala カンファレンスです。

scalamatsuri.org

カンファレンスは 2日間に分けて行われます。 Day1 では事前応募で集められたセッションから選考で選ばれたものが発表され、 Day2 では当日朝に行われる Morning Session で飛び入りの発表者を募集し、 GitHub のリアクション数投票で選ばれたセッションが採択されます。

Scala のツールや設計、 Scala 3 移行についてなど、幅広い話が聞けるイベントです!

弊社員が発表したセッション

弊社の発表としては、Day2 の Scalafix ルール作成について というテーマで Javakky が発表しました。

github.com

Scala の優秀なリファクタリングツールである Scalafix について、弊社OSSとしてルールを公開した報告と、実装にあたり工夫した点について解説しました。

Scalafix や Linter まわりに詳しいエンジニアの方々からコメントをいただくことができ、今後の開発の指針となりそうです!

詳細は以下の inside 記事をご確認ください。

inside.pixiv.blog

参加したセッションの感想

私 Javakky を含め、弊チームエンジニアが3名参加しましたので、各メンバーの気になったセッションについて感想をまとめておきます。

Scala3のTupleとMirrorとHigher-kinded data

Scala エンジニアの youta です。私が特に注目していたセッションがこちらになります!

speakerdeck.com

こちらのセッションでは、例えば

case class UserProfile(name: String, age: Int)

HKD(UserProfile, Option)

とすることで

UserProfileOpt(name: Option[String], age: Option[Int])

のように扱えるようにする HKD(Higher Kinded Data) をマクロを使うことなく Scala 3 の機能で実現する方法について発表されていました。 HKD については Haskell での説明ですがこちらのスライドが参考になりました。

Mirror という機能で case class とタプルの相互変換を行い、さらに Tuple.Map を使用することでタプルの各メンバの型 TF[T] に変換することで HKD を実現しており、 MirrorTuple.Map はどちらも Scala 3 で追加された機能であるため Scala 3 でいかに型の表現力が増したかを感じることができる非常に面白い内容でした。

Cats Effect 3とScala 3による純粋関数型プログラミング

Scala エンジニアの syoichi です。私が注目していたセッションの1つ目がこちらになります。

speakerdeck.com

ライブラリの Cats Effect を中心に可読性を維持しつつ Effect を制御することについて発表されていました。

ここでの Effect は DB や HTTP などの副作用 (side effect) を意味しますが、それらをうまく扱えずに実装した場合は、可読性が低く、テストとリファクタリングがしにくく、スレッドをブロックしかねないコードになってしまう可能性があります。発表ではこうしたケースをCats Effect の活用によって解決する案が示されていました。

Free Monad や Tagless Final のようなより発展的な手法についても解説されていて個人的に非常に勉強になりました。

Bazel 入門

続きまして、私 (syoichi) が注目していたセッションの2つ目がこちらになります。

eed3si9n.com

Google などで活用されている超大規模プロジェクト向けのビルドツールである Bazel についての発表でした。

数十万のプロジェクトを再現性を確保した状態で高速にビルドするために、リモートキャッシュ・ビルドルール・クエリを記述するための独自言語の導入など、いくつかのユニークな手法をとっているそうです。これ程の規模の開発には馴染みが無かったので非常に興味深かったです。

wartremoverのScala 3対応

ここからは再び Javakky がお送りしていきます。 私が注目していたセッションも2つあり、こちらが1つ目になります!

xuwei-k.github.io

こちらは、 WartRemover という Scala の Linter の Scala 3 対応についてのセッションでした。 私は普段、 Scalafix というリファクタリングツールを利用して開発をしているのですが、導入時に類似ツールとして注目していた WartRemover についてのセッションということで非常に楽しみにしていました。

内容としては、Scala 3 での Compiler Plugin テスト用の macro の作り方や、Scala Compiler Plugin の良い点悪い点についての解説などがありました。 WartRemover は Compiler Plugin として実装されているのですが、これは Scala コンパイル実行時の挙動を追加したり変更したりすることができるプラグインとなっています。型情報などが完全かつ便利に使える代わりに他のプラグインと併用した際に壊れかねないという話をしていて、どちらも一長一短だなと思いました。

最後の方では TASTy という Scala 3 から追加される機能を紹介していて、これを利用した Linter 開発への夢が膨らむお話でした。

WartRemoverをScala 3のTASTy inspector経由で動かす - xuwei-k's blog

なぜ(巨大なリポジトリの)コードを読んで理解するのが難しいのか

docs.google.com

こちらのセッションでは、コードリーディングの難しさとそれを改善するためのツール開発についての発表がありました。コードリーディングはソフトウェア開発の大きな時間を占めているにもかかわらず、ツールの整備が進んでいないと指摘していて、原因としてはコードジャンプを行う際の関連を記憶するのが困難だという話をしていました。

成果物として報告されていたのが VSCode の拡張機能だったのですが、コードリーディング中にジャンプした経路を自動でマッピングしてくれる他、マップの各要素からのコードジャンプにも対応していて、今すぐ使いたい!と思いました。

vimeo.com

vimeo.com

vimeo.com

非常に今後の動向が気になっております。

おわりに

この記事で紹介したセッション以外にも、興味深いセッションが数多くありました!

公式ページでは、各セッションのタイトルとスライドが記載されていますので、ぜひ一度覗いてみてください。

今回の ScalaMatsuri では、飛び入りで1件のみの発表となりましたが、来年以降はさらに面白いセッションを発表していけるように精進していきます!

icon
javakky
決済周りの改善を中心に働いている2021年入社エンジニア。その名の通りJavaが好きなことで有名(?)で、最近はScalaを使える部署へ入ったらしい。