昨日と今日は、プログラミング言語Scalaのカンファレンスである「ScalaMatsuri 2017」に初参加してきました。
Scala自体は業務でも個人でもまだ使えていないのですが、前職で少し触る機会があったのと、一緒に行こうという事で勢いでチケットを買ってみた次第です。
1日目
事前に発表された講演内容で、自分のScalaレベルと興味のある分野からセッションを選択しました。
Readable Scala
少し触っていた頃に、"~>“とか今まで見たことない(そしてググりにくい)記号が多くて愕然としていたのを思い出したのですが、「”パラダイムやイディオムを知らないから可読性が低い”という主張は意味をなさない」というのは耳の痛いところでした。また、それらがコードをいかに読みやすくするかに主眼を置いて設計されている事がよく分かったセッションでした。
(そしてsprayが今はもうメンテナンスされていない事を今さら知る。。あとググりにくいのは”tilde greater than scala”みたいにすれば探せるのを知ってだいぶ改善された)
新サービスをゼロから開発してローンチするのに大切だった3つのこと
Twitterに新機能(新サービス)を追加した際の知見として、「まずは上から下までとにかくつないで動かす」「内部状態と変更の流れを管理する(一方向にする)」「ちゃんと名前をつけることが大切」があげられていました。個人的には、旧システムからの移行を一部のモデルから行うためにFutureを導入して解決していったくだりがFutureを理解する参考になりました。
Akkaで分散システムの障害に備える
本セッションでは、「障害を前提としたシステム(アンチフラジャイル)」「レジリエントなシステム」をAkkaでどう実現するかが語られましたが、システム障害に対する今までの考え方や備えを改めさせる可能性を感じました。
ゲームサーバのためのScala/Play
もともとPHPで開発していた自社ゲームタイトルのサーバーサイドをScala/Playで実装した事例として、規模感やインフラ周りのTips集などが語られたので、業種や経緯とかいろいろ思い出しながら聞かせて頂きましたが、Scalaの"better Java"としての事例は今後増えていって欲しいなと思いました。
(FPバリバリで書かれているのかもしれませんが。。)
DMMのAPI GatewayをAkka StreamsとAkka HTTPで作り込んでみた
こちらもPHPで作られた旧認証基盤を置き換えるというお話だったので、いろいろ思い出しながら聞かせて頂きました。プロダクションレベルでAkkaが導入された事例としても興味深かったです。
メタメタにしてやんよ。(メタプログラミングもしくは Shapeless のすすめ)
”入出力がデータではなくプログラム”であるマクロとして、Scalaマクロ(今は使ってはいけない)から、それに代わるScala.metaとshapelessの例をライブコーディングで見ることができました。
Scala & Sparkによるデータ・エンジニアリング 7大レシピ
組織でデータを集めて分析に使うために必要な7つの”レシピ”と、その解決方法を聞くことができましたが、前半のレシピにあったチームへの根回しやデータの品質を高める努力は海外でも同じだったのが意外でした。
ChatWorkのScala採用プロダクト “Falcon” リリースまでの失敗と成功の歴史
動いているサービスをScalaに置き換えるプロジェクトとしては国内有数の規模だったかと思われますが、それだけに苦労も多かった感じがひしひしと伝わる内容でした。
2日目
”アンカンファレンス”という、参加者の投票や参加者の中で発表したい(もしくは聞いてみたい)内容を当日決めるといった形式で行われました。
Ad Serving System on Finagle and Thrift
前日の講演でシリアライズライブラリーのThriftを多く見かけたので、使っている事例を聞こうと選択しました。シリアライズしたデータはMySQLのBLOBに入れる(=インデックス付きのKVS)ソリューションはおっと思いましたが、ScalaScriptをSQLのDML代わりに使う事で解決されたのが印象的でした。
採用担当者CTOぶっちゃけ座談会
各社の採用戦略や求められるエンジニア像が生々しく語られました。オフレコだったので詳しい内容は書けないものの、今回メモった量が一番多いセッションでしたw
Poorman’s Type Classes Revisited
Scala初学者が理解に苦しむ(らしい)implicitについて、なぜこれが導入されたのかをHaskellの例を交えて詳しく解説されました。実は1日目のReadable Scalaでもimplicitについては触れられてたのですが、その時は正直分からなかったのがこのセッションで何となく理解することができました。
JavaエンジニアのScalaの話が聞きたい
もともとJavaや他の言語で開発していた組織の中で、Scalaに変えるメリットや導入に関する悩みをざっくばらんにお話する(ちょっとだけ自分も混ぜてもらった)会でした。ScalaをFPで書くか"better Java"で書くかのさじ加減については、「ミッションクリティカルな部分はFP、(リリースの)速さを求められる部分は非FP」という回答が得られたのは個人的には収穫でした。
Lensの基本と基礎
最後のセッションは、「var使えばよくね?」という自分への戒めとして(笑)こちらを選択させて頂きました。”getter/setterを抽象化する”という例をライブコーディングを交えながらの講演で、こちらも理解できれば可能性が広がる感じがしました。
(LL言語のゆるふわなアクセスをカタい形で持ってくる理解、ではないんだろうな。。)
おわりに
今回初めての参加で多少背伸びし過ぎた感はありましたが、ここ最近自己研鑽の時間を疎かにしがちだったので、いい刺激をもらうことができました。
また、今まではAdTech界隈での採用事例が多かったところに、ぽつぽつ他業界でもScalaが採用されつつあるのが印象的でした。
(特にFOLIOさんのようなFinTech系企業でのScala採用は、Javaの牙城にどれだけ食い込めるのか気になります)