kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

ScalaMatsuri 2019に参加しました

もう日をまたいでしまいましたが、6/27~6/29にかけて行われた、ScalaMatsuri 2019に参加してきました。まず、総評というかざくっとした感想ですが、とても楽しかったです。特に、アンカンファレンスDayは完全に学生気分に戻っていました。日本のScalaコミュニティに関する活動に関わり始めて、もう10年超になりますが、ここまで規模の大きなコミュニティになるとは思っていなかったなあと感慨深いです(もちろん、比較的初期には、私が貢献した部分があるとはいえ、ある程度成長した後は、その他の方の活動による部分が大きいと思います)。記憶が薄れないうちに、とりあえず備忘録として簡単な記録を残しておきます。

0日目 - ワークショップ DAY

この日は、OSS ハッカソン@ScalaMatsuri 2019に参加しました。この、OSS ハッカソンは、

scalaconfjp.doorkeeper.jp

に説明があるように、Scalaに関係のあるOSSについて、pull requestを送ることを目指すという趣旨のものです。メンテナの方ともうちょっとコミュニケーション取ればよかったかなという思いもあるのですが、scala/scalaのコードを読んだことがないわけでもないし、まあもくもくとやろうという感じで作業をしていました。今回、時間内にpull request送るにあたって、確実にできる単純作業として、標準ライブラリのpublicなclassのpublicなメソッド、可能な限り全てに返り値の型を明記して回るということをやっていたのですが、それに没頭するあまり、買ったばかりのThinkPad A485のEnterキーのキートップが外れるというアクシデントもありました(正確には、Enterキーの調子が途中でおかしくなったのに気づいて、外してもどせば直るんじゃね?という、今おもえばなんでそんなことをした、という暴挙によって壊れたのですが、似たようなものです)。

で、とりあえず pull reqを作ることができました。

github.com

実のところ、この作業、InttelliJ IDEAの、型アノテーションを付けるquick fixにある程度頼りました。その結果、一部コンパイルが通らないというミスがあったりして、修正しました。まだ、修正リクエストがありますが、コメントを見る限り、指摘された点を修正すれば受け入れてもらえそうな気がします。しかし、意外にまだ型を明記してない箇所が多かったことにはちょっと驚きました。中には、結構推論結果が微妙なものになっているケースも見られたので、やはり、少なくともScalaではpublicなメソッドの返り値の型を明記すべきだなと再認識しました。

1日目 - カンファレンスDay

この日は、私が午後一でセッションがあったため、午前中に準備してから家を出たのですが、行く途中に、修正したくなった箇所がでて急遽修正を入れたせいで、同時通訳の方との打ち合わせが長引き、結果セッションに遅刻するという失態を犯してしまいました。大変申し訳ないです。

さて、肝心の私の発表ですが、Scalaの形式化の最新の成果であるDOT計算を説明するというものだったのですが、40分で納めるというのはあまりにも無謀であるということに早めに気づくべきでした。もちろん、操作的意味論とはとか、型付け規則とはとか、抽象構文とは、とか、そのあたりの解説すっとばせばいけた気がするのですが、いきなりDOT計算の説明に入るのもアレですし。

結果として、DOT計算を説明するにあたって必要な前提知識の説明で時間の大半を消費してしまい、DOT計算についてはかなり駆け足になるという結果に終わりました。

ただ、その後、参加者の一人から、アンカファレンスで、説明しきれなかった部分を説明して欲しいという要望があり、私としても中途半端に終わるのは不本意だったので、アンカンファレンスボードに書くことにしました。その結果、翌日のアンカンファレンスDayで本当に続きを発表することになったのですが、それは後にして。

私の発表が終わった後は、他の参加者と技術談義や雑談などをしているうちに時間がどんどん過ぎていき、気が付いたら懇親会の時間になっていました。しかし、なんで、転職する情報がこんなにすぐ伝わっているのか…(もちろん、publicに書いたので知られることがまずいわけじゃないのですが)。

懇親会は例年通りに立食形式で、色々雑談をしながら楽しんで過ごしました。しかし、私は人の顔を覚えるのが相変わらず苦手なため、一方的に私のことを覚えてくださっている方が多数いてなんだか申し訳ない気持ちでいっぱいになりました。なお、翌日に聞いた話によると、有志による二次会、三次会があったらしく、最長で26:00まで残っていた人もいたのだとか。

2日目 アンカンファレンスDay

私にとって、今年のScalaMatsuriはある意味この日が本番だったのではないか、と思います。アンカンファレンスDayでは、朝会というものがあり、10:00に参加者が集まって、アンカンファレンスボードの中から、人気があるものを司会者が選び、スケジューリングをするのですが、DOT計算については大変要望が多く、割と早めに決まりました(前日の投票数見た時点で、おそらくやることになるだろうなと思ったので、絶対に朝寝坊しないぞという強い決意がありました)。そして、ここでなにかが吹っ切れたのか、他の方が書いたネタのセッションについても私の方から、「その話なら俺も乗った!」というノリでどんどん挙手した結果、最終的には計4セッションしゃべるという羽目になりました。今思えば無茶をしたものです。

新卒の参加者に皆でScalaを教える

確か、ボードに書かれていたネタは「新卒ScalaエンジニアなんだけどScala教えてくれ」みたいな話だったと記憶していますが、朝会で「じゃあ、私が教えます」とかノリで言った結果、私もしゃべることになりました。ちょっと私が進行役がうまくなかったせいで「具体的にここがわからない」という話にもっていけなかったのは、ちょっと反省するところです。ただ、初学者がsbtでつまづくポイントとかの一部を伝えられたのはよかったのかなと思います。

DOT計算の話の続き

ある意味前日のリベンジみたいなものですが、完全にとはいえないものの、伝えたいものはなんとか伝えられたかなと思います。ただ、DOT計算の型付け規則で構成される型システムのややこしさについては、私はちょっと甘くみていたというか、細かく説明する段になって、自分の理解が深くなかった(特に、型メンバ関連のサブタイプ関係の定義)のでつまづいたのは反省ポイントですね。あと、DOTの操作的意味論の部分に話がうつった段階で、「まあ、(DOTの)操作的意味論はみればわかるように簡単ですねー」とか軽く言っちゃったったんですが、その「簡単さ」の感じは伝わっていなかったような気がします。

Go VS. Scala

ボードでは「From Go to Scala」だったかなんだかで、Simple VS. Easyという話が主題でした。このセッションは、パネル形式でしたが、たぶんアンカンファレンスの中でもかなり盛り上がったのではないかと思います。当初、GoとScalaの比較だったはずだったのが、KotlinとかSwiftとかC++とか話が広がっていくあたりの(良い意味での)ぐだぐだ感は、アンカンファレンスらしく、非常に楽しいものでした(アンカンファレンスは、盛り上がりをコントロールできないところがひとつの醍醐味だと思っています)。どういう話だったのかは、 #ScalaMatsuri とかでTwitterを検索するとなんとなくわかるかもしれません。

面白論文を紹介するよ

空いた枠があったので、急遽スポット参戦した感じなのですが、とりあえず久しぶりに論文解説でもしてみよー、というノリでやってみました(すでにScalaが関係なくなっている辺り、アレですね)。ちょっと反応が薄かったのが気になったのですが、Twitterの反響を見る限り、つまらないとかいうわけではなく、話の内容を噛み砕くのに精いっぱいだったのかな、という気もしました(これは、私があんまりうまく説明できなかったなと思うところですが)。

そんなこんなで、この日はほとんど発表で埋まっていたので、あまり合間に雑談する余裕はなかったのですが、テンションで乗り切った感じです(笑)。

最後に

今年のScalaMatsuriも「祭り」にふさわしい盛り上がりがあって良かったです(スタッフの方、特に座長は大変だったと思いますが)。来年は久しぶりにスタッフとして復帰できたら、と思っています。ではでは。