今年も昨日と今日東京国際交流館で行われた「ScalaMatsuri 2018」にお邪魔してきました。
去年の初参加の際にレベルの高いセッションの数々はとても刺激になったので、今年はScalaを本格的に使うための学びを得られるようなものを選んでみました。
1日目
なぜComposabilityは重要か
Scalaの言語特性の一つとしてComposabilityが高いことがあげられ、それによって問題を分割(分割統治)しやすくなり実装が簡単になるという事が説明されました。講演後の質問で、分割される事によって可読性が下がる事については、HowとWhatがうまく分離できていないとそうなる恐れもあるという回答は個人的にしっくりきました。
「暗黙」とうまく付き合うためのTips
ScalaのハマりどころであるImplicitについて、InteliJ IDEAを使った調査方法のデモや、理解を進めるためのコツなどが分かりやすく解説されました。”Enrich my library”パターンの効用として出てきた今は非推奨のJavaConversionsの動きがエグかったです。。
仕事で役立つモナド変換子
Listのmapを改善するところから始まり、Optionやエラーを絡めた場合の例がどれも実用的で改善される感じが肌で感じられたのがよかったです。
(Javascriptでdeferやpromiseに初めて触った時の体験に近かったかも)
Scalaでの部分的な関数型プログラミング
避けられない副作用を認識し、それを取り除いていきながら純粋な層と副作用のある層を分離していったら、純粋な層はテスト可能な核となるビジネスルールになったというところは自分たちのシステムを見直す観点としてとても興味深かったです。
Haskell対Scala
関数型プログラミングの比較対象としてよく出てくるHaskellとScalaの違いを、サンプルコードを交えながら解説されました。
Haskell + Scalaハイブリッド開発大作戦
JVM上で動くHaskellであるEtaを紹介する講演でしたが、最初にHaskellとScalaの違いについて、”HaskellではIOが型に現れるためコンパイラでチェックが可能”という説明が目から鱗でした。
(あとログ出力も副作用扱いというのも驚きました、、なにそれこわい)
Scalaらしいオブジェクト指向プログラミング
Scalaの言語特性を生かした依存性の管理方法などが説明されました。”コンストラクタを見れば依存関係が分かる”といったところから、コード設計の見通しや不穏なところを感じ取るところは過去の経験ならではといった感じでした。
ブロックチェーンはどうやって動くのか、オレを5歳児だと思って説明してくれ
ビットコインなどで使われるブロックチェーン技術について、歴史的経緯や使われている技術、分散システム特有の問題などを踏まえながら、実際に講演者が作成した手荷物トラッキングを例に説明されました。
2日目
今年もアンカンファレンス形式で行われましたが、結構聞きたかった内容が被りました。。
scala.jsでAWS Lambda開発
JVM+ScalaでLambdaを使用すると性能や費用的に問題があった(でもScalaは使いたい)ため、scala.jsでJavascriptに変換(+フロントエンド側とコード共有)してnode.js上で動かすという事例の説明でしたが、実験ではなく既に本番投入されているのが驚きでした。
VS Code Scala
Language Server Protocolの説明と、講演者が開発されているVS Code上でScalaを開発するためのプラグインの紹介が行われました。
エンジニア組織づくり(オフレコ枠)
研修教育や組織体制などの悩みや知見が共有されました。
人材ブラックホール化計画(オフレコ枠)
各社の採用戦略やどういう人材を求めているかなどについて意見が交わされました。
JVM Web Application Metrics & Monitoring
メトリクスの収集方法や形式、JVMで取得するべき項目についての説明が行われました。その中で今後Java界隈ではデファクトになりそうというMicrometerがいいとの事で、この辺の情報は手薄だったのでとても参考になりました。
ScalaでgRPC
前にScalaPBに入門してみたものの、あえなく挫折したので再入門の意味も込めて選択しました。スマホアプリ界隈では採用事例を多く聞くようになったgRPCですが、ScalaにはFinagleやAkkaもあるせいか、メッセージ再送やリトライなどについて質問が集まっていたのが印象的でした。
Scalaで転職すると年収は上がるのか(オフレコ枠?)
会場内で無記名で転職前と転職後の年収の変化について投票を行い、その結果の開票と傾向について議論が行われました。
おわりに
この記事を書きながら去年の内容と見比べてみたのですが、少しScalaを触った影響かより実用的な内容を多く選択したような気がしました。今年はgRPC(ScalaPB)を使った既存資産(Java)との連携や、モナド周りの一層の理解に努めてみたいです。