Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

Scalaほぼ書いたことない人がScala関西に行ってきた

1週間近く経ってしまいましたが、Scala関西Summit 2017 に参加してきました。

summit.scala-kansai.org

毎年9月くらいに京都に遊びに行くのですが、今年もその時期が近づいてきていた矢先にちょうどいいタイミングで大阪で開催されるとのことで、行ってみようと思い参加しました。天満はかなり久々に降りました。

ちなみに私はScala完全初心者です。11月から仕事で使うことになりそうで、一度実務的にどういうライブラリが使われてるのかなどの情報収集のために参加しました。Akkaなど、名前を知ってはいるものの具体的に何をしているかはよくわからない、そんなライブラリについて触りながらも知ることができたのは僥倖でした。

こういうサミット系のイベントだと、JJUG CCC などは毎回参加させてもらっているのですが、JJUG CCC の場合満席で見られないセッションが多いこともあり、席取りとかがんばらなければならないのかなと戦々恐々としていましたが、スッと席を取れるセッションが多くてよかったかなと思います。

主催者の方々やスピーカーの方々本当にありがとうございました。来年も9月に開催されるようであれば参加させていただきます。東京の Scala Matsuri も行ってみよう。

では、参加したセッションについて感想を簡単に記しておきます。

Scala の Functional Programming を支える技術

参照透過性の説明、純粋関数の説明、多相性の説明、型クラスの説明というように流れていきます。私は関数型はちょっと触ったことがあったのである程度頭に入った状態で臨んだのですが、Scalaではこの概念をどう書く、というのがスライド中にふんだんに示されておりとても勉強になりました。Scalaのみで説明が進んでいくのは個人的には大変嬉しかったです。

一方で、implicit は初めて見た構文でちょっとよくわからなかったのですが、よくよく調べてみると Rust の型クラスとほぼ同じことができるんですね。とても柔軟でいいなと思いました。こちらは書き方をしっかり覚えて使いこなせるようにしておきたいですね。

ストリーム処理ことはじめ ~ Akka Streams

※スライドは多分これだろうというものを拾いました。

Java の Stream APIScala の同等の処理を比較しつつ、 Scala 元々の処理だと直列的だからちょっとオーバーヘッドが出てしまう、そこで Akka Stream!という流れだったと記憶しています。初めて Akka Stream を見たのですが便利そうですね。Source→Flow→Sink の流れで処理が進んでいくということも知ることができました。Java の Reference Pipeline などを読んでいると時々「Sink」って出てきてなんだろう?と思っていたのですが、案外一般的な概念なのかなと思いました。

一方で、 Java の pararellStream とどう違うのか?というのがわかりませんでした。おそらく同じようなことが実現できるはずで、そちらとの違いはどうなんだろうなあというのが気になりました。

グラフを知って理解するAkka Stream

スライド綺麗すぎます。永久保存版。先ほど出てきた Akka Stream をより深く掘り下げて紹介されています。Akka Stream が好きになりました。Akka Stream の入門にとてもいいのではないでしょうか。

プレースホルダ構文完全解説

kmizu.github.io

コップ本などをやっていると出てくる「_」←これ。プレースホルダを使うと様々な関数をより簡潔に記述可能ですが、その規則性についてScalaの構文に関する仕様書を読み解きながら理解するというハードでエグ味のある内容でした。私はこういうエグ味のある話がとても好きなので、楽しく拝聴しました。

後半はコンパイラ構文解析に関する実装経験がないと理解が難しかったのは確かですが、たまにはこういうセッションもあっていいのではと思っています。

プレースホルダについては、実際のところはコンパイラに怒られて適切に直すことが多く、なぜコンパイラが怒っているのかについて考えることは日常的にほとんどないのではないでしょうか(とくに Eta Expansion については「そういうものね」としか理解していなかった)。しかし、コンパイラが怒る裏側には言語仕様策定の背景があり、プログラミングの歴史があります。実務には直接関係はないかもしれませんが、知的探究心をくすぐってくれるいい題材ですね。

Scala on JVM をプロファイリングするツールの紹介

jvisualvm や jmc などは Scala でも使えますよ、という話でした。Java を使っているときにこれらのツールにはとてもお世話になったので、Scala でも使えるのはとても心強いです。フィボナッチ数列を用いて、普通の再帰動的計画法を用いた再帰とではこれだけの差が出ますよ、という実演も行われました。

初心者向けのハンズオンは優しいと思った

Scala 関西でびっくりしたのが、初心者向けの丁寧なハンズオンがある!というところですね。私は行きませんでしたが…。

Scala って、多分 Java だけしか触ったことのない方や、そもそも LL言語出身という方には相当とっつきにくい言語だと個人的には思います。そして、入門書もまだまだ JavaPython などと比べるとライトなものも少なく、なかなか敷居が高いと感じてしまうのは事実ではないでしょうか。そんななか、こういうサミットに足を運んでみんなで同じ部屋で Scala を勉強できるというのは、とてもいい刺激になるんだろうなあと思いました。