Opt Technologies Magazine

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

#12 市ヶ谷Geek★Night 「ScalaMatsuriの余韻トーク〜祭りの余熱〜」レポート

f:id:opttechnologies2015:20170327074321p:plain

2017/03/17(金)に市ヶ谷のオプトカフェで開催された『ScalaMatsuriの余韻トーク〜祭りの余熱〜』のレポートです。

あいさつ

こんにちは! オプトテクノロジーズ エンジニアの長澤です。今年の2月中旬に中途入社したばかりですが、周りからは組織に順応するのが早いと褒められて(?)います。

オプトでは主にRuby on RailsやReactで開発をしています。 最近はもっぱらプロダクトのRubyのコードのリファクタリングに勤しんでいます。リファクタリング楽しいです!

市ヶ谷Geek★Nightとは

オプトではエンジニア向けイベントとして、2015年4月の第1回から「市ヶ谷Geek★Night」を定期的に開催しています。 おもしろくてタメになるイベントを目指し、エンジニア中心に運用されているイベントです。

過去開催回はこちらになります。

ichigayageek.connpass.com

#12 ScalaMatsuriの余韻トーク〜祭りの余熱〜 について

ichigayageek.connpass.com

先日2017年2月25・26日(土・日)にScalaをテーマにした国内最大のカンファレンスであるScalaMatsuri 2017が開催されました。 改めて素晴らしいカンファレンスを提供していただいた運営の皆様、ならびに参加者の皆様、本当にお疲れ様でした!

このScalaMatsuriの開催を受けて、弊社では3月17日(金)に『ScalaMatsuriの余韻トーク〜祭りの余熱〜』と題して、ScalaMatsuriの後夜祭企画となるイベントを主催いたしました。

当日ご参加いただきました皆様方、イベントにお越しいただきありがとうございました! 当日は公募LT枠の方を含め総勢13名の方々にご登壇いただき、Scalaにまつわる様々なトピックについて発表していただきました。それでは発表資料と共にイベントを振り返ってみましょう。

f:id:opttechnologies2015:20170327080358j:plain

セッション

1. 株式会社CyberZ 重村 様 1年くらいScalaプロジェクトに関わった結果

株式会社CyberZ 重村 様のscalaプロジェクトにおける1年間の開発の振り返りについての発表です。

内容については新規事業開発フェーズとリファクタリングフェーズに分けて発表していただきました。

新規事業開発フェーズにおいては、まだ開発メンバー間でのscalaの知見が十分ではなかったため、ライブラリを使わずに車輪の再開発を行ってしまうなどの失敗があったそうです。 そうした反省を踏まえて、リファクタリングフェーズにおいてはbuild.sbtのすべてのライブラリのサンプルコードを組むという対策が取られました。 その結果、Scalaにおける開発の幅が増えるという効果を得られたそうです。

f:id:opttechnologies2015:20170327080352j:plain

2. 株式会社ネクストビート 衣笠 様 オフショアでもScala開発

株式会社ネクストビート 衣笠 様のオフショア開発における開発の仕組みづくりについての発表でした。

開発生産性向上のためのDDD(Domain-driven design)の採用や、リリース作業自動化のためのSlackの活用などの取り組みについてご紹介いただきました。 また、オフショアの開発メンバーのレベルを一定に保つために、開発の作業のすべての履歴を取り、マニュアル化するといった工夫もされていたそうです。

f:id:opttechnologies2015:20170327080348j:plain

3. ナイル株式会社 的場 様 何故AkkaのActorを使うのか?

ナイル株式会社 的場 様によるAkkaを利用して1年ほど開発を行われた上でのその採用メリットについての発表でした。

Akkaの採用によって、いわゆるリアクティブ宣言で言及されているReactive Systemがいかに実現可能かというお話をしていただきました。

f:id:opttechnologies2015:20170327080343j:plain

4. 株式会社VOYAGE GROUP 大谷 様 高スループット・低レイテンシーWEBサービスにおけるパフォーマンス対策の現実

株式会社VOYAGE GROUP 大谷 様による、高スループット・低レイテンシーなパフォーマンスという課題とその対策についての発表です。

New Relic APMJVM Thread Profilingを利用してパフォーマンスにおけるボトルネックを特定し、そのボトルネックをつぶさに改善していくことで結果的にパフォーマンスが10倍となり、劇的に改善されたとのことでした。

パフォーマンス改善のプラクティスとしては、事前検証よりも実際にデプロイしてその後について検討するという方法を採られていたそうです。 なお、質疑応答ではAWSを利用している場合、New Relic APMが無料で利用できるとの情報も共有されていました。

f:id:opttechnologies2015:20170327080333j:plain

5. 株式会社セプテーニ・オリジナル 高嶋 様 IntelliJScala開発をする上で抑えたいポイント

f:id:opttechnologies2015:20170328104418p:plain

idea demo - Google スライド

株式会社セプテーニ・オリジナル 高嶋 様によるIntelliJScalaプラグインについての発表です。

選択範囲の型を表示するType Infoや、選択可能なImplicit Conversionを表示するImplicit Conversion Highlightingなど、開発の上で有用なプラグインについてご紹介いただきました。 IntelliJの公式ドキュメントにもScalaプラグインについての記載があるとのことでしたので、Scalaでの開発をされている方はぜひご一読されてみてはいかがでしょうか。

f:id:opttechnologies2015:20170327080328j:plain

6. 株式会社セプテーニ・オリジナル 下村 様 Scalaの線形化と抽象型メンバの統一の限界

株式会社セプテーニ・オリジナル 下村 様による、ScalaにおけるTraitの線形化にまつわる発表です。

Traitの線形化とは、あるTraitとそれを継承しているClassやTraitに同名メソッドが定義されていた場合、ある順序によってメソッドの呼び出し順序が決定されることを指します。

scalacでは、この線形化によって複数のTraitの抽象型メンバを統一できません。 この点について、自分型アノテーションで線形化の順番を明示的に指定し回避されたそうです。

f:id:opttechnologies2015:20170327080324j:plain

7. 株式会社リクルートマーケティングパートナーズ 松川 様 DDD on Slick3

株式会社リクルートマーケティングパートナーズ 松川 様による、Scala × Slick3の開発でDDD(Domain-driven design)を採用する際のDIP(依存関係逆転の原則)という課題について発表です。

アーキテクチャとしてClean Architectureを採用した際にテストでDBIO型を扱う必要が出てきてしまうため、ScalazのMonadによって対応されたとのことでした。

f:id:opttechnologies2015:20170327080319j:plain

8. Fringe81株式会社 豊島 様 Scala on GAE

Fringe81株式会社 豊島 様による、新規事業でScalaアプリケーションをGAE(Google App Engine)上で動作させた方法についての発表です。

方法としては、GAEのStandart Environmentではなく、Flexible EnvironmentでDocker基盤とJava8を採用し実現されたとのことです。

f:id:opttechnologies2015:20170327080315j:plain

9. 株式会社オプト 田中 implicit parameterの解決規則

弊社エンジニアの田中によるimplicit parameterについての発表でした。

Scalaのimplicit parameterは「メソッドの引数に合う型の値をコンパイラが探してきて代入してくれる機能」です。 便利である一方で処理の動作について把握するのが難しい機能でもあります。

f:id:opttechnologies2015:20170327080310j:plain

10. 株式会社マーベリック todesking 様 DatasetでもzipWithIndexしたい

株式会社マーベリック todesking 様によるSparkのDataset APIにまつわる発表でした。

Dataset APIは、先発の分散処理用のコレクションであるRDDとDataframe API双方の長所を併せ持つAPIです。 そのDatasetにおいてもRDDのzipWithIndexを利用する方法についてご紹介いただきました。

f:id:opttechnologies2015:20170327080306j:plain

懇親会 / 公募LT

セッション後はケータリングの料理に舌鼓しながら、connpassの公募LT枠からご参加いただいた方々に発表をしていただきました。

f:id:opttechnologies2015:20170327080302j:plain

11. biblichor 様

biblichor 様より、賛否あるScalaの型消去の仕様について、なぜそうした仕様が実装されたのかをジェネリクスの歴史的経緯を振り返りながら発表していただきました。

「型消去」という仕様にはデメリットも存在しますが、それもJVMの資産や実行パフォーマンスといったより大きなメリットを得るための戦略的な選択であるとの見解を示されていました。

f:id:opttechnologies2015:20170327080257j:plain

12. endomnts 様

endomnts 様による、JavascriptスクリプトエンジンのNashornについての発表でした。

NashornによってScalaで生成されたJavascriptコードを簡単にテストする方法についてお話いただきました。

f:id:opttechnologies2015:20170327080253j:plain

13. tototoshi 様

http://qiita.com/tototoshi/items/826bd26250c86b8476de

tototoshi 様による、Scalaメタプログラミングが実現可能なscala.metaについての発表です。

これまでマクロを書くために扱われていたscala-reflectがdeprecatedになるため、今後マクロを実装するために実用例を交えてscala.metaをご紹介いただきました。

f:id:opttechnologies2015:20170327080247j:plain

まとめ

Akka、DDD、パフォーマンス改善など、Scalaを中心とした様々なテーマの発表が目白押しとなるイベントでした。 実運用から得られた知見の数々は、中々耳にする機会がない貴重なものばかりでした。

登壇者の皆様、興味深い発表を共有していただきありがとうございました!

ScalaMatsuriに参加された方もそうではない方も、当日はイベントをお楽しみいただけたかと思います。 来年のScalaMatsuriでもScalaのトピックについて、皆様と大いに盛り上がれることを期待しております。

繰り返しになりますが、この度は当イベントにご参加いただきありがとうございました!

また次回の市ヶ谷Geek★Nightへのご参加をお待ちしております!