LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

ScalaMatsuri 2018 参加レポート

こんにちは。

LIFULL HOME'S事業本部 不動産投資事業部の大塚と申します。普段はLIFULL HOME'S不動産投資というサイトの開発を主な業務として担当しております。

3/19(金)〜21(日)に開催されたScalaMatsuri 2018に参加してきましたので、今回はそのレポートをお届けしたいと思います。

ScalaMatsuriとは

毎年春先に開催されているアジアで最大級を誇るScalaに関するカンファレンスです。例年は土日の2日間で開催されることが多いようですが、今年は金曜日に「Training Day」(Scala言語の魅力を伝えるコンセプトの元、未経験の方でも参加しやすいプログラム)が設けられた計3日間での開催でした。

今回私はTraining Dayと、カンファレンス初日に参加してきましたので、それぞれで特に印象に残ったセッションについてお伝えさせていただきます。

03/19:Training Day

Scalaに関する神話と真実

Scalaに関してよく言われる先入観をQ&A形式で説明していく発表で、未経験者にとっても非常にわかりやすい内容になっていました。

内容を簡潔にまとめますと、

  • Scalaは本番運用する上でも十分実用的であり、すでに世界中の様々な企業で使われています
  • 適切な資料を使って学んでいけばそこまで学習コストもかかりません。関数型プログラミングの知識もそこまで高度なものは求められません
  • Javaに比べて実行速度が遅いということもありません。ただし、関数型スタイルのプログラミングを多用すると若干遅くなる傾向はあります
  • コンパイル速度は確かに遅いです。しかし、大幅に和らげる方法がいくつかあります

といったことが述べられていました。

Scalaに関するよくある誤解(一部事実)を丁寧に解説していただき、未経験者にとっては一歩を踏み出すのに背中を押してもらえるような発表でした。

逆引き!Scala x ビッグデータ

「ビッグデータを使って卓球部を強くする」というストーリー仕立てのセッションでした。(発表資料はこちら)

発表者二人の掛け合いが夫婦漫才のようで、ところどころで会場に笑いが起きていてとても楽しい発表でした。

内容を簡潔にまとめますと、

  • 卓球台上のボールをトラッキングするシステムのデータ分析システムの構築を事例としてビッグデータの概略を説明
  • ビッグデータの処理は「収集」→「変換」→「統合」→「分析」→「活用」という流れを組む
  • Scalaは参照等価なコードが書きやすいこととJavaの資産を流用できる点から、ビッグデータを解析するシステムに向いている
  • 分散メッセージングシステムとしてのApache Kafkaや、ストリームデータ処理エンジンとしてApache Sparkなどが有名

といったことが述べられていました。

近年ではスポーツの世界でもビッグデータの活用が進んでいるということもあり、その有用性が一つのストーリーとして非常にわかりやすかったです。

また、セッションの最後にはビッグデータ処理のデモも実演していたのですが、ローカルマシンで大量データ処理を行っているため手短に終わらせないとメモリが溢れて落ちる、という謎の緊張感に包まれていたのも面白かったです。(笑)

03/20:カンファレンス形式

Scalaでの部分的な関数型プログラミング

システムをすべて純粋関数(副作用のない関数)のみで構築しきるのは大変なので、部分的に関数型プログラミングのスタイルを取り入れるという話でした。(発表資料はこちら)

部分的に関数がスタイルのプログラミングを適用していく例としてFIzzBuzzを出力するメソッドを例に取りながらわかりやすく説明されていました。

適用していく戦略として、

  • 避けられない作用(作用層)とそうでない部分(純粋層)を切り分ける
  • さらに依存関係は作用層→純粋層の一方向のみとする

といった形でリファクタリングを進めていきます。

こうすることで抽出された純粋層のコードがそのシステムの核となるビジネスロジックと認識できるようになるとのことです。

Haskell + Scala ハイブリッド開発大作戦

HaskellをJVM上で動かす言語実装である「Eta」に関するセッションです。発表資料はこちら

JVMで動くからこそJava/Scalaと連携することも可能となりますが、そのノウハウとハマリポイントについて発表されていました。

内容が非常に充実していて上手く要約する自信がありませんので、ぜひリンク先の資料をご覧ください。

特にJavaのようなオブジェクト指向言語における「可変状態」や「継承」といった機能を純粋関数型言語であるHaskell上でどのようにエミュレートしているかの説明は非常に高度で多くの学びがありました。

なお、Scala内にEtaを埋め込むこともEtaからJava/Scalaを呼び出すことも物理的には可能だそうですが、後者に比べて前者の場合は非常に多くの手間がかかるらしく、各言語の依存関係はScala -> Eta -> Java のようにするのが良いそうです。

会場の風景

ここからは当日の会場風景をご紹介いたします。

エントランスの様子。「Matsuri」というだけあって、赤提灯の和のテイストがイカしてますね。

会場内ではコーヒーやお菓子のサービスがフリーで提供されていました。

こういうちょっとしたサービスが嬉しいですね。

アンカンファレンスでの発表内容を投票するボードです。

付箋で貼られたタイトルに対して、聞きたいと思ったものにシールを貼っていき、当日の発表者を決めるスタイルでした。

個人的には「フルコンパイルに1000sかかるプロジェクトを分割してマイクロサービス化している途中の話」という内容が気になりました。

まとめ

今年初めて参加しましたが、セッション会場の熱気がすごく、また内容もどれも濃密で一エンジニアとして大変刺激を受けました。

ぜひ来年はScala力をあげて、アンカンファレンスなど発表する側になれるよう頑張りたいと思いました。

以上でレポートを終わります。

宣伝

株式会社LIFULLでは、エンジニア各職種の中途採用募集中です! エントリーお待ちしています。

【エンジニア 募集職種一覧】 | 株式会社LIFULL