ボッチ初学者のScalaMatsuri in 2017

ScalaMatsuri2017に参加してきました。
自分はこの手のイベントに参加したことがなくイメージがつかないままに参加したので、来年以降のそういう人の参考になればと思います。

私自身の技術者としての能力が正直今は低いので、発表やアンカンファレンスの内容については特に突っ込んだ内容はありません。
身の丈、ありのままの感想文になります。

最初に書いておきますが「楽しいから初心者でも行ったほうがいいよ」が結論です。

参考情報

ではまず参考として、私の知識やスキル周りを記載します。

プログラム経験: 大学2年からの約2年 + 社会人で突発に少々。
技術範囲(程度は置いといて): フロント, サーバサイド, インフラ。一通り一人でウェブシステム作れます感。
言語: Java, PHP, C#
DB: 普通にsql書いてつかってレベル。RDBXMLをDB代わりに使ったりくらい。
フレームワーク: Struts, Spring(少々), Laravel, .Net MVC
その他: xsltとか。

学生時代は企業で週5、ひたすら開発をしてました。大学は情報系でしたが、行ってませんでした。卒業してません。
社会人になってからは1年目の途中までC#をゴリゴリ書いて、そこからはSIの上流工程やサポートに従事してました。
途中で突発でショート案件を一人で書いたりしましたが、貯蓄で捌いてた感じ。

まともに技術学び直してちゃんとエンジニアしなきゃと思ったのが5年ぶりくらい? の感じです。

学習対象としてScalaを選択した理由は大学3年ごろにScalaの存在を知って憧れていたから。
当時直感で「Scalaはなんか10年後も残ってそうだし微妙にメジャーくらいの位置になってそう」と思ってliftを触って「あっ」ってなって辞めたのですが、Scala自体には消えぬ思いが燻り続けてました。燻製になる前に火を起こした感じ。

ScalaMatsuri 1日目

早速振り返り兼感想文に移ります。

オープニング

ScalaMatsuriにはオープニングがあったのですが、あんまり何も考えずに観に行きたいプログラムの部屋に移動してたので参加できませんでした。

Scala.js 1.0への道

Scala.jsというものの存在はわりと昔から知っていたのですが、それがついに1.0ということで聴きにいきました。
ScalaMatsuriには同時翻訳用のレシーバーがあり、リアルタイムで翻訳者の方が翻訳をしてくれます。

事前に調べて観たところ去年はちょっと不評っぽい意見が散見していたので心配していましたが、全く問題ありませんでした。
普通に話として聞けるレベルで翻訳をしてくれていたので、内容は十分わかりました。

内容自体は「は〜紆余曲折あったんだねぇ」という具合で、いろいろと変更、リファクタの歴史を話してもらったのですが話を聞いた瞬間にそれが何故問題で、それが何故解決されたのか理解できるほど知識も能力も足りずというところです。
あと恥ずかしいレベルでいうと、CommonJSってなんやねん、って思ってました。
ServerJSとかブラウザ以外で使うJsのことらしいですよ。
Wiki

言われれば「あぁあれね」ってわかるのですが、技術とかは置いといたとしても言葉を知らないためにわからないことが結構ありました。

完全に感想ですが、この人がScalaをjsにしようなんてイカれたことを考えて且つ実行してるイカれた人なんだ(褒め言葉)って思いました。

またエコシステムってなんだ? って思いましたし、今も思ってます。

Scala Warrior

Scala.jsの話を聞いたので、Scala.jsを使ったというこちらの話を聞いてみました。
僕はてっきり、脳筋だけどめっちゃ強いScalaエンジニアたちのための〜、みたいな話だと思ってたんですが、Scala Warriorっていうシステムがあったみたいです。

またこのセッションはScala界隈なのかプログラム界隈なのかわかりませんが、有名人なtakezoeさんのセッションでした。
Scalaパズルっていう本の執筆をされていたんですね。勉強会とかいくとちょいちょい耳にする本です。
せっかくだし買うか、って思いました。

こちらは入力されたScalaのコードをサーバへ送って、Scala.jsでコンパイルしてフロントに戻しつつ実行する流れでできているとのこと。
ScalaTags, ScalaCSS, Scala.js-Reactなんていうものもあるらしく、根性と愛があれば全部Scalaで作れちゃいますね!

公演の中でもそのような話はありましたが、残念ながら辛いということです。
そりゃそうですよね。

話の中で、jsonを処理する部分については旨味があったというような話があったのですが、そこは「ほぉ〜」というところですね。
まだ浅いのでわかりませんが、ScalaってJsonのパーサーがいけてるのない印象があるので、そこ切り出してうまいこと使えないもんかな。

あと絶妙な感じの絵が個人的には凄く好き

本当に死ぬブロッキング&コンテキストスイッチング

こちらは現場で起きた障害をベースにしたお話でした。
自分話を聞くときにあまりメモを取らず、その時の雰囲気を覚えておけば後で引っかかるから大丈夫というスタンスで生きているので細かい内容を覚えていません。

playのDB接続で使われるcontextの一つが無限にプールだかコネクション作るよ
for文の中で不適切なコード書くと逐次処理になってその中で上記が呼ばれまくって本当に死ぬよ
playはnon-blockingでスレッド少なくフルで動かす作りだよ
迂闊にblockingするメソッド使うと死ぬよ。メソッド名が日本人にはblockingなメソッドってわかりづらいから気をつけよう

って内容だったはず。

そもそも処理的に微妙とかそういう話は置いておく、ということだったので特に気にはせず。
チームでやってると「微妙だけど、まぁうんいいか」ってしちゃうコードも稀にあるので、そういうときに限って死ぬっていう感じでハマりますよね。

これは内容とかも「そうだね」という感じで、わかりやすいというか、わかる内容でした。

便利tips

よく使うけどよく使う書き方じゃなくて、こっちで書くと早くなるよ、という内容。

このレベルでチューニングが必要なことは稀だと思いますが、知ってるなら遅いより速い方で書けばいいよね、というところで良かったです。
あと初心者でもついていける話でした。
ついていくとか以前の話になるのですが、速くなる理由含めてお話ししてくれているのでパッとわからなかったとしても大丈夫というのも親切でしたね。

ランチ(お昼休憩)

ここまで安定のボッチで、ここからも引き続きボッチなのですがお昼です。
お弁当をもらえるので、それを持って空き部屋で食べました。

このときに大学生時代にお世話になっていた就活イベント運営会社の人を見つけました。
そっくりだけど間違えてたら怖いのでFacebookから連絡とったら、その人でしたね。
ScalaMatsuriのスポンサーとしてその方の現在の勤め先企業が載っていたので、そんなこともあるかもっておもってましたが、あったね。

エンジニア世界って広いけどめっちゃ狭いよなぁと思います。

私は今年から勉強会とかに参加するようにしているのですが、そこで観た人たちも結構お祭りに参加してましたね。
Scalaは採用企業も増えてきてはいますが、やはり母数はまだまだということでしょうねぇ。
あとイベント参加するために家の外に出る系エンジニアの母数がそもそもというのもね。

DMMでAkka

私はAkka触ったことがないのですが、噂のAkkaをDMMでの活用事例などを元に聞けるのかな〜と思い参加。

かなり作りこまれた資料を元に、丁寧にアーキテクチャの説明をしてくれていました。
残念なのは、ここでも同じく「へぇ〜そうなんだぁ、なるほど、すごいな〜」くらいの感想しか抱けない無力さですね。
まずそもそもAkkaわからんし、アクターモデルについても「分散していい感じに各々処理してくれるんだよね」くらいのイメージなので、そもそもこれAkka採用してる旨味どこなん? 状態。

そのようにしている事実だけわかるんですが、それ結局話聞いて唸ってるだけでなんもわかってないよね、って感じ。

このタイミングから「そもそも俺は祭りに参加してるより、家に帰って勉強しなきゃいけないのでは?」と思い始めてます。

おそらくちゃんと内容についていける人にとっては事例としても、システム構成も非常にためになったのではないでしょうか。

Introduction to ScalikeJDBC

これは初心者向けの講座でした。
内容も十分理解できましたが、後半ちょっと走り気味だったかな?

スピーカーの方も、「ぶっちゃけドキュメント読んだらそれで終わりなんですけどね」っておっしゃってましたが、まさに「ぐぐってドキュメント読めばわかるよね」という話。
スピーカーの方が悪いとかいうことは全くなく、そういう対象者のための講座なんですよね。

そう、つまり、今の自分のScala力は技術力とか以前に「知らない」っていう状態。
なんだろうそもそも、話をする土俵に立っていないわけです。
基本構文も含め、みんな使ってるモジュールやフレームワークを触ってないので思考に入ることができずに、ただありのままを受け止める感じ。

そろそろ本格的に帰って勉強しようかな、って気持ちが強くなった頃です。

またこのときに出てきていた、DSLという言葉がわからずにいました。
たぶん今生きてるエンジニアならわからないと死んだ方がいいよってレベルの言葉なんだろうなぁと思いながら聞いてました。

Serverless Architecture

一昔前からちょいちょい聞くサーバレスの話。
サーバレスっていうか、サーバあるじゃん? って今でも思ってますが、そういう意味じゃないんだよねきっと。

という私が聞くわけなので、ちゃんと話を理解することはできませんでした。
ただBlue/Greenデプロイという考えと、その構成は参考になりました。

あとはAWSってほんといろんなサービスあるよなって感想です。
こちらもまだ理解が追いつく内容だったので、楽しく拝聴できました。
今何があったのか言えって言われても、自分じゃ説明できないので理解が腹には落ちてませんけどね。

いつか必要になったときに、プレゼン資料の図と話の全体感だけ思い出して調べながらなんとかできそうであればいいよね、って生き方をそろそろやめた方がいいのかもしれない。

Chatworkプロジェクト

Scalaを触っている日本人ほぼ全員気になってるであろうChatwork社のFalconプロジェクトの歴史です。
こちらは技術的にどうこうというよりは、歴史や流れなど全体のお話だったので純粋に楽しめました。

途中で結構アーキテクチャ変わってるのですが、内部でどのような流れがあり変わっていったのかとかのお話が興味深かった。
PoCをかなりしっかりと行いながら技術選定して再建していったようです。
また技術よりも、チームマネジメントやコミュニケーションデザインが大変だったみたいですね。
人間版MVCじゃないけど、V <--> M <--> C 間の情報伝達や認識共有というかね。そうだよなぁって。

懇親会

全体が終わった後に懇親会がありました。
懇親会は一つのフロアに結構な人が集まっていたので密度半端ない感じでした。

独り身の私は辛いところではありましたが、そこはあまり気にせずに登壇社の方々の近くに近づいては聞き耳を立ててました。
聞いておくだけでも貴重な時間ですよね。
酔いが回ってくれば相互にご機嫌になるので、なんとかなります。

身の程をわきまえずにカトジュンさんにも話しかけてみましたが、やはり何か自分が提供できる話もなく時間を浪費させてしまうだけになるので心苦しものです。
人と話すためにも勉強しないとダメですね。

1日目まとめ

1日目はこんな感じで話を聞いており、だいたいよくわかってなかったです。
ただこれはScalaMatsuri云々以前に、技術のイベント楽しもうと思ったら一定の技術ないとダメだよっていう当たり前の準備が不足してたにすぎないとおもってます。

またなんとなく感じたのは、中級者とか「なんとなくScala使えます」みたいな、中間層の?エンジニアがあんまりいないのかなぁということ。
そもそもScalaを選んでいる人ってそこそこ技術力あったり、技術好きな人が多いと感じます。
Swiftとかに比べて、なんだろう、とっつきやすいくらいの技術力を持ってる人がいないっていうかね?

良くも悪くもそのへんからもScalaを感じました。
また、1日目の私の知力低すぎるわからないことメモが以下
[code]
・プログラムにおける、マクロってなに
・Dottyとはなんぞや
・みんなslack使っててかっこE
DSLってなんぞや
・green, blueデプロイ
・DDD
・POC (コンセプト検証)
・規模が大きくなるとやっぱりネックはIOなんだなぁ
・ライブマイグレーション??
・Resiliency??
・CQRS?? ES??
・シャーディング??
[/code]

いやぁ、技術やらないとやばいよねこれマジで。

2日目

2日目はサクッと寝坊しました。
金曜日に出張して徹夜だったので、そんな気はしてましたがやっぱり寝坊しました。

2日目はアンカンファレンスとなってました。
そもそもアンカンファレンスってなんだよ、っていう僕みたいな人も他にいますかね?

未だに定義がよくわかってませんが、前日に募った内容から人気があったものをみんなで話してカンファレンスの内容を決めたようです。
午前中にそのやりとりがあったみたいなので、僕は参加できていません。

一人のスピーカーの方が前で話をするスタイルもあれば、全員で自由に発表するブレストみたいなスタイルの部屋もあったっぽい?
これも私は話に混ざるほどの状態ではなかったので、傍聴してました。
まだしっかりやれてないので、そもそも質問もなければ話せる内容もないというねぇ。
辛いよね〜。

瀬良さん Scala入門

で、私はいくつか参加したのですが特に話すことが書けないので瀬良さんの入門のお話。

私が今年Scalaの勉強を始めて、今も諦めずにいられるのは瀬良さんのSkinny Frameworkがあったおかげなんですね。
Playを始めたらちょうど新しいバージョンが出てすぐくらいで、せっかくだしと新しいので始めたら思いの外下位互換なくて過去の記事が役に立たず。
自力で解読していくほどの時間も知識も足りず、無駄にslickを選定し詰まりまくって死にそうだったときにSkinnyFrameworkに乗り換えました。
ほんとにSkinnyさんの直感的なわかりやすさに助けられました。

講座自体はプロジェクト作成やsbt, scalaのバージョンやライブラリなどのバイナリー指定の話等々、まさに入門という内容。
実際にコードを書くというところの前段の話ですね。
さすがに内容的に新しいことはありませんでしたが、おさらいとして良かったです。

このプログラムが終了した後に、瀬良さん本人に直接
「SkinnyFrameworkのおかげでScala続けられました。ありがとうございます」
ということが伝えられたので、とても満足です。

あとは自分がちゃんとScala使いになって社内で仲間見つけて、プロジェクトで使うことですね。

企業ブース

SalaMatsuriには企業ブースが出ていて、入場の時にもらえるバッグの中に各々企業さんからのグッズが入ってます。
グッズだと、セプテーニさんの技術読本はいいですね。
ScalaAndroid開発いけるんだ〜、って感じです。貴重なノウハウだ〜と思って読みます。

あとブースはありませんでしたが、地味にM3さんのマスクが助かりました。
花粉症の季節ですからね。ほんとね、助かるよね。

またアイテム系でいうのであれば、FCODEさんのMacBookProプレゼント企画は良かったですね。
ScalaMatsuriの参加者は大体300人くらいのはずなので、興味ない振りしつつも「実は俺が当たる予感がする」というワクワク感が楽しめました。
当たりませんでした。

他にもいくつかのブースがあり、私はほぼほぼ全部のブースにお邪魔してお話を聞いてみました。
Scalaでの事例や使用感とか聞けて良かったです。

ブースについて一つ思うところがあるとすると、この人たちの立ち位置がよくわからないという点でしょうか。
転職、新卒採用なのか単純に広報なのか、Scala大好きで応援したいのか。
全部なんでしょうけど、転職全く考えていないのにブースにお邪魔していいもんか? と思って近づきづらかったです。

多分同じように思ってた人結構いるんじゃないかな。

総括

基本的には「楽しかったし参加者ともボッチなりに話せたので満足」です。

満足できなかったことがあるとすると、私の場合には個人的な問題ですね〜。

素直な心の声は
「もっとScalaやその周辺技術に触れていれば楽しさ倍増だったのに!!」
これにつきます。

とはいえ、参加をすることでScala以外の技術動向や最近の技術トレンド、ワードを知ることができることと、技術を学ぶためのモチベーションを向上させてくれるので、間違いなく参加して良かったと思えるイベントだと思います。

運営の方々もScala勢だろうにカンファレンスの話を聞かずに、運営をしてくださっているわけですから本当に感謝しないといけないなぁと。
感謝を示すなら自分がScala利用者になって、会社なりどこかで布教してユーザ増やすことだよねと。

来年にはちゃんと技術者としてイベントが楽しめるように、改めて今年一年有意義に使わないといけないと感じさせてもらえたのは良かったです。
また今日からコツコツ頑張ります。

追記

今回のScalaMatsuriで何か難しいと思い続けていた感覚があるのですが、それってたぶんアーキテクチャの話が凄く多いということなんだろうと思いました。

Scalaを利用する人は社内で発起人になったり、新しく言語採用をしていく立場の方が多いため、アーキテクチャから構築していく方が多いのでしょう。
話している内容が「Scala言語」ではなく「Scalaプロジェクト環境」であることが多く、言語は当然使える+αでScalaを取り巻くツールやフレームワーク、ライブラリ、教育、概念の話がメインになっていることが多いと感じます。
なので、付け焼き刃や経験から肌感で理解したつもりになってることが通用しない印象です。

そのため「耳に入ってくるし、言わんとしている雰囲気わかるんだけど全然わからない」という状態になるのかなって思いました。

Scalaは敷居が高い、と言われることが指していることって言語のことじゃなくてこっち側の話なんだろうなって思うと、個人的には非常にしっくりきますね