Opt Technologies Magazine

オプトテクノロジーズ 公式Webマガジン

市ヶ谷Geek★Night#7 「Scala大名の平成維新」 イベントレポート

先日、弊社オプトの技術イベントとして定期的に開催されている 市ヶ谷Geek★Night の7回目、「Scala大名の平成維新〜殿中でScala!〜」が行われました。その様子をレポートします。

あいさつ

こんにちは!オプトテクノロジーズ エンジニアの柴田です。オプトでは、社内制度を整えたり、このMagazineを企画したり、イベントのお手伝いや面談とかもたまにやっています。 あとSparkとかいじってます。

市ヶ谷Geek★Nightとは

このブログで紹介するのは初めてなので、改めて簡単にご説明します。 オプトでは、エンジニア向けイベントとして、一年ほど前から「市ヶ谷Geek★Night」を定期的に開催しています。 過去の内容はこんなかんじです。 市ヶ谷Geek★Night

感想や、イベントのテーマ希望などあれば、担当人事のTwitterアカウント宛にご連絡頂ければと思います。

イベント詳細

それでは早速イベントレポートをしていきます。

アジェンダはこちら。 Scala大名の平成維新〜殿中でScala!〜

Twitterはこちら #7 市ヶ谷Geek★Night「Scala大名の平成維新〜殿中でScala!〜」

Tweetをまとめられたくない方は、お手数ですが@uryyyyyyyまでご連絡下さい。)

LT順抽選

今回はLTの順番を当日に決めることにしました。

オプト開発2部 部長の平岩が作った抽選コードをREPLで回して抽選します。

alt

alt

ナイルさん

Scala経験者の方々に、Scalaについて色々聞いてきて頂いたことのまとめ。 内容は、スライドがきちんとまとまっているので見ていただくとして、

  • for文(式)が他の言語と違うので戸惑った。
  • 関数型特有の書き方に戸惑った

というのがやはり多いようです。

個人的な感覚を書かせていただくと、手続き的な書き方の言語から入ると、たしかにScalaは難しい印象を持たれそうです。 ウチのプロダクトではScalaをかなり関数型っぽく使っていたり、mixinも多用しているので、Scala慣れてない方はなかなか苦労しています。

ただ、関数型の素養があったり、手続き型脳に染まっていない方はわりとすんなり理解しているようなイメージがあります。

関数型Scala読みましょう!

ドワンゴさん

ドワンゴでのScala 教育テキストのお話。

大きく、Scala言語の方とWAFであるPlay版があるそうですが、後者は流れが速いので公開はしていないとのこと。 Playの日本語資料で新しめのものは多くないので、いずれ公開してもらえたら嬉しいですね。

文章やコードのチェック、フォーマットに使われてるツールは参考になりました。 ちなみにこのマガジンの記事はredpenでチェックしていますが、textlintとの比較はあまり見かけない気がします。

また、tutというツールでScalaコードのチェックができるそうです。

リクルートマーケティングパートナーズさん

色々なマシンでScalaコードをコンパイルしてみて速度を比べたというお話。

使われたコードはSparkでしたが、c4.xlargeとかだとコンパイル(依存ライブラリは事前にresolve済み)は4分もあれば完了するというのは、思ってたよりだいぶ速かったです。

TISさん

Akkaを使ったLINE BOTの仕組みをご紹介頂きました。

各ユーザー毎に状態を持たせたい、スケールもさせたい、というケースで使うと効果がありそうです。

技術としては、

  • Akka Persistence
  • Akka Cluster Sharding

を用いていました。

TECH TO VALUEさん

Slide

テストを書きたくない(正確には、テストデータを用意するの嫌い)というお話。

手段として紹介されたのは、

  • Property Based Test
  • 制約をロジックではなく型で表現する

でした。 前者は、テストデータの作り方だけ定義して、後は自動的に生成してもらってテストしようというもの。 後者は、そもそも型で定義してしまってテスト項目を減らす(間違ったロジックを書くとコンパイラがチェックしてくれる)というものです。

ただし、テストの種類によっては普通のテストの方が楽とのことでした。 (例:境界値テスト)

Fringe81さん

奇しくも一つ前のがくぞさんと被る内容で、仕様を型で表現しようという内容でした。 スライドの例だと「Either型で表現できそう」という声があったと記憶しています。

Scalaコンパイルが遅いのは、コンパイラが仕様に反していないかをチェックしてくれているから!」「コンパイラかわいい!」というコンパイラ愛に溢れたLTでした。

マーベリックさん

Slide

Scala-slack というライブラリがメンテされていないのでフォークして自分で作りなおしたお話。 ライブラリの設計の仕方や、公開までの流れをざっと紹介して頂きました。

その前のLTの内容と合わせて、仕様(この場合はslackの)を正しく型に落としこむことができると良いライブラリになるなーと考えていました。

オプト

状態を持たないものにAkkaを使うのはアンチパターンだよ、というお話。

手前味噌ですが、ScalaコミュニティやAkkaのPros/Consをなんとなく理解できる良LTでした。 また、会場での笑いも一番でした(当社比)。

Akkaの使い方の良い例はTISさんのLTが参考になるかと思います。

セプテーニ・オリジナルさん

Scalaのテストのお話。 「殴り込みとかではなく仲良くやりましょう」と話されていました。

会場でのテストライブラリ利用状況はこんな感じ。

資料が良くまとまっているので、内容はそちらで。

ChatWorkさん

Scala.js + Hubotでbotを作ってみたお話。将軍の殴り込み枠です。

コードはこちら

Scala.jsを使われてるChatWorkさんならではですね。 Scala.jsとnpmパッケージとの連携は参考になる気がします。

CyberZさん

Scalaエンジニアを増やすには、というお話でした。

お話は笑いどころが多くて楽しかったですが、たしかにまずは慣れ親しんでもらうのが重要だと感じます。

ナイルさんのお話と繋がるところがある気がしますが、関数型のとっつきにくさがあるので、そこを解消して、「この仕組み使うともっと簡潔に書けるよ」というアプローチをすると良さそうだなと感じました。

VOYAGE GROUPさん

頑張らないScala、ということで初心者向けのお話になるのかなと思います。

会場ではScalaに慣れ親しんでいる方が多いせいか笑いどころが多かったのですが、Scala初心者には良い内容なのではと思いました。 Scala界隈のエコシステムがどんどん広がっていて、たくさんのツールがあって、何から学べばいいのかわからない、という方に向けて、 「まずベタージャバとして動かしてみようよ、そこから各プロジェクトやスキルセットに合わせて改善していけばいいのでは?」 ということを伝えたかったのではという理解です。

Lightbendさん

資料なし

alt

ScalaMatsuri大名スポンサーということで、もちろんLightbendさんにもお声がけしていたのですが、なんと向こうからeugene yokotaさんがリモートで登壇頂けることになりました。 接続トラブルもありましたが、概ね問題なく接続できていたのではと思います。

LT内容については、 前半聞き逃したので理解が追いついていないですが、マルチプロジェクト向けの分散ビルド用sbt pluginの紹介でした。(まだ公開されておらず、Lightbend Reactive Platformに載せるかもとのこと)

(ローカルに?)複数プロジェクトがあって、それらが他のプロジェクトに依存しているときに、個々のプロジェクトごとにビルドしてキャッシュさせておくと他のプロジェクトでもそれを使いまわせる、という感じでした。 デモでの体感速度はすごくサクサク動いていたのですが、仕組みとしてどのあたりが新しいのかよくわかっていません。。

大きめの規模の製品開発でのScalaコンパイル遅い問題の解決策としての分散ビルド技術のようなので、続報に期待です。

懇親会とかの写真

僕は力尽きて途中退室したのですが、最後に少し写真を載せておきます。

alt

イベントの様子です。

alt

懇親会始まりの様子です。(懇親会の写真は取り忘れました。。)

alt

イベントにいらっしゃっていた 美人人事 美人事さん方に写真を取らせて頂きました! 左から順に、CyberZ、ナイル、マーベリック社の人事さんです! (「今は美人事というのが主流」とウチの男性人事に言われたので直しました。)

まとめ

今回のイベントはこんな豪華な顔ぶれになりました! 具体的なテーマを決めていたわけではないのですが、各LTで少しずつ重なる部分があったりして、通して聞くとより理解が深められるような気がしました。 ご登壇頂いた各社様、また、企画を進めてくれた弊社人事・広報さん、ありがとうございました!

今後も定期的にGeekNightイベントは続ける予定ですし、Scala回もまた開催したいと考えていますので、どうぞよろしくお願いします。