Scalaに入門した

最近、サーバのコードを一から書いてみたいと思ってScalaに入門した。

書いてみたいというか、Node.jsでならいくつか書いてみたことはあるんだけど、データストレージにMongoDBを使ってたりしてあんまり一般的な構成でない気がしていた。(PostgreSQL Express ReactSSRとか試したりはしてた)
一般的な構成というならRubyとかJavaをやっておけという話かも知れないが、静的型付けで関数型っぽく書ける言語で書きたいと思っていたので、Scalaを選んだ。
(Haskellで書ければ話が早いんだけどどうにも難しい…)

1年くらい前にScalaの文法入門本を買っていて、Kindleの肥やしになっていたからというのや、『PHPからScalaに乗り換えたチャットワークさん、その後どうですか?』前編 / 後編でScalaの話がTLに上がってきたからというのもある。

入門の手順

ざっと入門した手順としては、

Guide to ScalaーScalaプログラミング入門

で大体の文法を把握して、

Guide to Play2 Scala

でメジャー(っぽい)フレームワークの概要を把握しつつ、実際にWebアプリケーションを作ってみている。

Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド

も併せて読んでいるけど、これがとても良かった。
すごいHaskellたのしく学ぼう!で出てくるような概念を、練習問題付きでもう一度学習し直せる感じ。

あと、コップ本ことScalaスケーラブルプログラミング第3版が必読書として挙がっているのをよく見かけるので読みたいけど、電子版はPDFしか無いんですね…
KindleでPDF版読むのツラいので、epub/mobiで出して欲しい。

エディタ

せっかくAltJavaに入門するので、ついでに本格的なIDEにも入門してみた。
あわよくばWebStorm(というかTypeScript)にも乗り換えられるかもと思って、IntelliJ IDEAを使っている。
無償版のコミュニティビルドでは、Playのテンプレートが解析対象外だったりして悲しかったが、今のところは有償版の無償期間内で機能を試している感じだ。

使ってみると、さすがIDEといった使いやすさで、雰囲気で何となく生えているメソッドが分かったり、型推論の結果をホバー表示してくれたりというあたりが高速で、初心者に優しいなと思う。

課金しても良い気はしているが、仕事で書いているTypeScriptの型推論が無い(というか、推論した結果を見る手段が弱い)のと、メソッド候補とかの推薦がScalaに較べるとだいぶ遅くて(ここらへんWebStormでも事情は同じだと思うんだけど)、VisualStudioCodeに軍配が上がっていると思っているので、自分を説得出来ないかも知れない。

それでもAdobeのCCとかに較べると心理的な障壁は下がりそうではあるけど…

所感

入門したばかりでまだ大したコードを書いていないけど、今のところここが嫌、みたいなところはない。
ただ、Haskellでもそうだったけど関数名に記号が許されているので、ちょっと混乱する時はある
(とは言え型定義にジャンプすれば事足りるし、混乱するのは初見の時だけだろうとも思っているけど)

あと、Playフレームワークは旧バージョンのチュートリアルコンテンツにあたってしまうことが結構あって(前述のGuide to Play2 Scala も結構前のバージョンの解説本らしい)、適宜変換していかないといけないところはあった。
まぁどのフレームワークでもその辺は同じか。