ScalaMatsuri 2019に参加してきました

ScalaMatsuri 2019に参加してきました。毎年何気に楽しみにしているお祭りです。今年も面白い発表がたくさんあり、お祭り気分も充分に味わえたので満足の行くカンファレンスでした。

ScalaMatsuriとは

プログラミング言語Scalaをテーマにした日本最大級のカンファレンスです。今年は「Scala Conference in Japan 2013」から数えて6回目の開催になります。ScalaMatsuriの特色としてはセッションの決定がチケット購入者の投票によって決まること、海外スピーカの招待に力を入れておりセッションに日英同時通訳が入っていること、アンカンファレンスがあることなどが挙げられます。また、その名の通り「お祭り」の雰囲気を出すための工夫が随所に見られ、非常に親しみやすいカンファレンスとなっています。

会場について

日時と場所は以下のとおりです。自分は6/28のカンファレンスから参加しました[^1]。場所はお台場です。ビッグサイトの近くと言ったほうが分かる人にはわかるかもしれません(笑)。新橋からゆりかもめに乗って行ったのですが、東京国際クルーズターミナル駅と言う聞き慣れないアナウンスが流れて来て仰天しました。どうやら最寄り駅の駅名が変わっていたみたいです・・・^2

  • 日時
    • 6/27(木) - 6/29(土) 10:00〜
  • 場所
    • 東京国際交流館

[^1]: 6/27はワークショップDAYです。 お絵かきで学ぶScala教室OSS ハッカソンが開催されていました。OSSハッカソンはよく見たらチューターがガチですね。どんなコントリビュートがされたのか気になります。

行動規範

到着したのは10:00頃で、ちょうど行動規範[^3]のアニメが流れているときでした。このアニメは毎年クマくんのところで笑ってしまいます。アニメが流れ終わったところで、次のオススメ動画に子供向け動画(3匹の子豚?)が出てきて会場が爆笑していました。

[^3]: 行動規範(Code of Conduct/Universal Access)はカンファレンス参加者が守るべきルールです。内容はハラスメントフリーで参加者全員を尊重しつつ、みんなが気持ちよくカンファレンスを楽しめるようにするための取り決めになっています。行動規範はイベントごとに微妙に違うので事前に目を通しておくことをおすすめします。

カンファレンスDAY

ScalaMatsuriは27日(金)がカンファレンスDAYでした。ScalaMatsuriで凄いと思うのは3本のセッションが並行して走っていてそのうち2つの部屋では同時通訳が行われていたことです。そのため翻訳レシーバを借りれば英語のセッションでも問題なく楽しめました。^4

以下が27日に自分が聴講したセッション一覧です。ちょっとこじらせているので関数型プログラミングに偏っています(笑)。

  • Scala 3って、私にはどんな影響があるの? @joang38 (Joan Goyeau)
  • 再帰:スキーム,代数,finally tagless,データ型. 統合されたビジョン @alexknvl (Alexander Konovalov)
  • プロジェクトで引き回す型をEffにするメリット @wing_007 (ma2k8)
  • こんなに違う!<-ScalaとKotlin-> @_kaelaela (前川裕一)
  • DOT計算をやさしく説明する @kmizu (水島宏太)
  • Making Logic Monad @halcat0x15a (ねこはる)
  • sbt コア・コンセプト @eed3si9n (Eugene Yokota)
  • 継続とDI @gakuzzzz (中村学(がくぞ))

ここからは少し長くなりますがセッションの感想を一つずつ述べていきます。

Scala 3って、私にはどんな影響があるの? @joang38 (Joan Goyeau)

Scala3(Dotty)の影響についての発表でした。以下が言及があった機能一覧です^5。概ね知っていましたが、いくつか新しい発見もあったので有意義なセッションでした。

  • Enumerations, Algebraic Data Types
    • やっとScalaにまともなEnumurationが来るといった話です。今まではcase objectで書いていたものがenumキーワードで大分シンプルに書けるようになります^6
  • 交差型, 合併型
    • ようやくTypeScriptでできた型表現がScalaでもできるようになりました
    • 交差型に関してはwithもあったけど交換可能でなかったので、ようやく本物がDottyにも入ったということです
  • NULLは100万ドルの間違い
    • たぶん#5747の話だったと思います
    • 現在でもOptionがありヌルポを見る機会はあまりありませんが、将来的には本当に見る機会がなくなるかもしれません
  • Opaque 型エイリアス
    • AnyValは、いけてないよねという話[^7]。opaqueで本物の型エイリアス(いわゆるゼロコスト抽象化)が手に入ります
  • 拡張メソッド
    • 型が定義された後にメソッドを追加できる機能
    • 拡張メソッドの構文はすごいGo言語チックだと思いました[^8]
  • デリゲート
    • 今までの型クラスのためのハックがまともな構文として定義されましたというお話
  • マルチバーサル等価性
  • トレイトパラメータ
    • givenが使えるのは大きいです
  • Parameter Untupling
    • mapでcaseのあのパターンがいらなくなるお話。これは地味に便利
  • TASTy
    • コンパイル時の成果物の新しいフォーマットです
    • クロスコンパイルが容易になります

上記の機能のいくつかはこのブログでも言及しているので参考にしてください。

[^7]: AnyValがなぜいけていないかは SIP-35を参照してください。
[^8]: 拡張メソッドの構文は#6760で変わるかもしれません・・・ マージされずにクローズされました。ただまたいつかこの話題が再燃するかもしれません・・・

再帰:スキーム,代数,finally tagless,データ型. 統合されたビジョン @alexknvl (Alexander Konovalov)

ScalaMatsuriでは例年話される関数型プログラミングネタです。最初の方はずっと同型(Isomorphism)について話していたので、どこに向かうのかよく分かりませんでしたが終わってみれば関数型プログラミングの流行りのテクニックの総集編みたいな内容でした。結論は以下のような感じです。

1
folds(畳み込み) ≈ 再帰スキーム ≈ Final Tagless ≈ Free

「folds(畳み込み) ≈ 再帰スキーム」と「Final Tagless ≈ Free」は予想は付いていましたが全てが同型だとは思っていませんでした。まぁ「代数」というくくりで見ると確かに同じ気がします。

プロジェクトで引き回す型をEffにするメリット @wing_007 (ma2k8)

この話も毎年恒例になってきたEff(Extensible Effects)のお話です。Effを簡単に説明するとモナドの合成と評価を柔軟に行うためのテクニックです。

スライドでEffと対比されていた型は以下です。

  1. Future[A]
  2. Future[Try[A]]
  3. Future[E Either A]
  4. EitherT[Future, E, A]
  5. Eff[R,A]

この中で自分がよく使うのは1です。2,3,4は使ったことはありますが型合わせが面倒なので部分的にしか使ったことはないです。5はEffそのものですが写経したくらいで実践で使ったことはありません。いずれ使って見たいと思いますが、問題はチーム全員が使いこなせるかどうかですね・・・

こんなに違う!<-ScalaとKotlin-> @kaelaela (前川裕一)

ScalaをコンパイルするとシンプルでKotlinをデコンパイルすると複雑だというのが面白かったです。あと似ている型も注意が必要そうです。デコンパイルしよう。

DOT計算をやさしく説明する @kmizu (水島宏太)

kmizuさん[^9]によるScala3の理論基盤であるDOT計算のお話です。現実のプログラミング言語を厳密に理論基盤に載せるのは難しいので、妥当な言語のサブセットを作ってモデル化したものを「核計算」というらしいです。DOTはScala3の核計算であり、健全性が厳密に証明されているようです。残念ながらDOT計算の詳細は時間がなかったので翌日のアンカンファレンスに持ち越されました。

[^9]: 退職エントリが話題になっていました。他にもドワンゴの退職エントリを見かけたので、本気でやばそうですね・・・

Making Logic Monad @halcat0x15a (ねこはる)

論理プログラミング言語としてはPrologが有名ですが、その一部の機能をScalaで実現しようというものでした。自分は論理プログラミングはあまり知らなかったのですが、論理的に可能な組み合わせが全て解として求めることができるというのは面白いと思いました。

具体的なモナドの構成はスライドを見たほうがいいと思いますが、印象に残ったパワーワードは以下の2つです。

  • バックトラッキングはモナドプラス
  • FizzBuzzは実践的アプリケーション

あとはType-aligned sequenceというデータ構造も知らなかったので後で調べて見ようと思います。

sbt コア・コンセプト @eed3si9n (Eugene Yokota)

scalaで最もよく使われているビルドツールであるsbtの解説でした。いつもお世話になっているsbtですが、いつもなんとなくというかその場しのぎで調べて動かしていたので、いろいろと勉強になりました。内容はおそらく6/11-23に開催されていた Scala Days 2019で発表されたものと同じではないかと思います。

Player is loading...

以下はメモです。

  • 空でも動く
  • 流れを堰き止めるのがcommand
  • commandよりtaskがオススメ
  • キーは4次元
  • デリゲーションルール
  • Zero
  • キーは最も広いスコープで定義して、最も狭いスコープで参照

継続とDI @gakuzzzz (中村学 (がくぞ))

継続渡しスタイル(Continuation Passing Style/CPS)とDI(Dependency Injection)を比較する非常に興味深いセッションでした。自分の継続のイメージはSchemeから来ていてどちらかと言うとgotoと比較されるプリミティブだったのですが^10、確かに言われて見ればDIだなと納得しました。あとSchemeでCPSを使うとネストが深くなりますが継続モナドを使うとネストを潰せてDSLっぽくなるのも面白かったです。CPSとDIのどちらを使うべきかという問いに対しては、使い分けが必要でCPSはアドホックな場面で使いましょうということでした。個人的に気になった点は似たような使い方ができるリーダーモナドやMinimal Cake PatternやEffなどと比較した場合はどうなんだろうということでした。また時間があったら自分で考察してみたいと思います。そういえば大昔にScala本体にも継続が実装されていていつの間にか標準から切り離されていたけど今も息をしているのだろうか・・・

アンカンファレンスDAY

アンカンファレンスはカンファレンスのカウンターパートです。つまり、カンファレンスほど形式張らずにアドホックにセッションを決定しようという比較的軽いノリですが、まさしく「お祭り」の雰囲気に相応しいワイワイした感じがとても印象的です。

アンカンファレンスが具体的にどのように進むかというと、前日から用意されたホワイトボードに付箋で聞きたいネタや喋りたいネタを貼って、セッションに参加したいと思ったら赤いシールを貼ります。そして当日の朝会や昼会で投票が多くて発表者やファシリテータがいるものを優先してセッション枠を埋めていきます。上の写真はホワイトボードの様子と昼会でセッション枠を決めている様子です。

以下参加したセッションです。どれも非常に面白かったのですが長くなるのでメモベースの記載になります。

  • 仕事でScalaを使おう - Arm Treasure DataでのAirframe活用事例 @taroleo (Taro L. Saito )
    • 最近よく聞く Airframeのお話です
    • AirframeはDIコンテナだと思いこんでいましたが、どうやらDIだけではなく様々な便利ツールの集合体のようです
    • MessagePackがTreasure Data発だと初めて知りました。MessagePackを使いたくなったらAirframe
    • logとlauncherは後で試してみよう
  • Bengal: Dotty Cats @ Walter Chang
  • DOT Calculus I didn’t explain yesterday @kmizu (水島宏太)
    • DOTは難しいということが分かりました
    • 特にサブタイプは鬼門だと・・・
    • DOTは健全らしいです (参考: dot soundness)
  • Fast & Functional
    • 最初の1時間だけ聴講しました
    • パワーワード「制限は開放し、自由は制限する
  • WiFi x Scala: Implementing Captive Portal in Scala and deploy into #ScalaMatsuri @ kuro_m88
    • Captive Portalという仕組みを初めてしり勉強になりました
    • 今回のWifi事情はおそらく他のカンファレンスと比べても非常に良かったと言えるくらい安定して繋がりやすかったです
    • その裏舞台を聞けて非常によかったです
  • Write stacksafe non-tailrec recursions @jooohn1234
  • 再帰 is cool
  • Stack overflowを避けるためにトランポリンを使おうという話
  • Fujitask meets Extensible Effects @ y-yu
  • From Go To Scala Easy vs Simple
    • 個人的にはアンカンファレンスのなかで一番熱いプロレスでした
    • KotlinやC++やSwiftも参戦してきて、カオスな雰囲気がいい味を出していました
  • Applicative Functor - Selective Functor - Monad
    • Selective Functorという聞き慣れない言葉に誘われて聴講しました
    • なんとなく仕組みはわかりましたが、どういうときに使うものかイマイチわからなかったので後で勉強します・・・

聞きたかったけど聞けなかったセッションたち

あとで見るために資料のリンクだけ載せておきます。

食事

ScalaMatsuriの魅力には食事もあります。以下の写真は昼食のお弁当です。お弁当はいくつかの種類があってちゃんとベジタリアン向けのお弁当も用意されていました。多分以下は鳥がメインのお弁当だったと思います。

ScalaMaturiで「祭り」の気分が味わえるのは屋台の存在も大きいです。カンファレンスDAYにはたこ焼き屋が出ていて、アンカンファレンスDAYにはかき氷屋が出ていました。

懇親会も盛り上がりました。途中でLTもありました。

左下はアンカンファレンスDAYの朝食で、右下はデプロイされていたうまい棒です。コーヒーとお菓子は豊富に配備されており、セッションの合間に飲んだり食べたりしていました。

カフェスペース

今年から1階にカフェスペースが設けられていました。カフェスペースの入り口でScalaのシンボルである螺旋階段がお出迎えをしてくれました(笑)。カフェスペースなのでコーヒーやお菓子がデプロイされていましたが、それ以外にもScala関連書籍が置かれており自由に読めるようになっていました。

まとめ

ScalaMatsuriは本格的なカンファレンスでありながらその名の通り「お祭り」気分が味わえる素晴らしいカンファレンスです。もっとScalaMatsuriを知りたい方はScalaMatsuri運営ブログやTwitterのハッシュタグ #ScalaMatsuriもチェックしてみてください。

この記事を読んでくれた方に、少しでもScalaMatsuriの楽しさをお伝えできたなら幸いです。

参加者、関係者の皆様、お疲れ様でした!

戦利品

たくさんの記念品を頂きました。今年も型安全でありますように・・・

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×