ミズノブログ

ミズノです。プログラミング・子育て・経年変化するもの など好きなことを雑多に書きます。

Scala入門時に役立つ情報まとめ

はじめに

Scalaの勉強を始めた時にJavaRubyと比べると情報量が少なく苦戦したので、今まで調べたことや経験者から聞いた情報などをまとめてみようと思います。
私自身まだまだ初心者ですが、これからScalaやってみようかなと思っている人の参考になれば幸いです。

WEBサイトで勉強する

ScalaのインストールやHelloWorldなどは検索するとすぐ見つかるので割愛します。
Scala特有の記法や概念などを勉強するのに以下のサイトが参考になりました。

技術系

読み物系

勉強会・イベントに参加する

技術書選びやネットでの勉強が意外と苦戦したので、勉強会を探して経験者に直接聞く作戦に切り替えました。ただ勉強会も他の言語に比べると少ないです。
関東で唯一?定期開催している芸者東京エンターテインメント社の「Scala勉強会in東京」にお邪魔させていただきました。
結果として作戦は大成功で、有益な情報がたくさん聞けました。可能な限り通いたいと思います。
またScalaをテーマにした日本最大級のカンファレンス「ScalaMatsuri」が2016年1月30、31日に開催されるので参加してみようと思います。

書籍で勉強する

通称コップ本と呼ばれる「Scalaスケーラブルプログラミング第2版 (2016/09/20に第3版が出版されました!)」がいちばん有名です。ただし全35章、700ページ超えと、初心者が読み切るにはそれなりの覚悟が必要です。苦笑

業務でScala使っている方に伺ったところ、普段は「Scala逆引きレシピ」で調べて、深く知りたい箇所をコップ本で勉強するのが良いのでは。との回答でした。
個人的には「関数プログラミング実践入門」「Javaによる関数型プログラミング」を読んでいたおかげで比較的すんなり頭に入ってきた感があるので、関数型プログラミングを全く知らない方は合わせて読むと良いかも知れません。

※ 参考:Scalaを学ぶためのScala本の読み進め方 (10冊)

問題を解く

とにかくコード書くのが上達の近道とのことで、別言語技術書のサンプルソースScalaに書き直す、などやったりするそうです。
最近はオンラインでプログラミングの問題を解くことができるので、簡単なレベルのものからScalaで書いています。プロコン系は開催日が指定されていることが多いので、自分のペースで進められる「Paiza」「AOJ」あたりがオススメです。
また「AtCoder」は過去問について他ユーザの回答を閲覧できるので、自力で解いた後に他の回答を見て良いところを盗む、といった使い方ができます。

Scala界の著名エンジニアを追う

Scalaの最新情報をキャッチアップする方法について勉強会で相談したところ、口を揃えて「吉田さんをフォローしろ」と言われました。
てっきりどこかのサイトを教えてもらえるものだと思っていたので、エンジニアをフォローするというアプローチはかなり新鮮でした。
私が参考にさせてもらっているエンジニアの方たちを挙げさせてもらいます。(50音順)

瀬良 和弘さん

エムスリー社ソフトウェアエンジニア。 ScalikeJDBC、Skinny Framework など Scala OSS プロジェクトリード。 Scalatra、json4s、Scalate のメンテナ。

竹添 直樹さん

ビズリーチ社チーフアーキテクト。 Scala逆引きレシピ著者、GitBucketファウンダー。

中村 学さん(がくぞさん)

株式会社Tech to Value 代表取締役。 Japan Scala Association理事。

水島 宏太さん

ドワンゴプログラマ。 Japan Scala Association代表理事。

Kenji Yoshidaさん

scalazとsbtとargonautとscalikejdbcのコミッター。

フレームワーク関連

WEBアプリフレームワーク

Play Framework」がデファクトスタンダードと言ってよさそうです。執筆時点で安定版である2.4系の情報が意外と少ないので、古い記事は公式の移行ガイドなどを見ながら読み替えをする必要になるかも知れません。ビズリーチ社のハンズオンは2.3系、2.4系が用意されているのでとても参考になりました。
シンプルでSinatraライクなWebフレームワークとして「Scalatra」も人気があるようです。

DBアクセスライブラリ

SlickScalikeJDBCが二大勢力のようです。SlickはPlayFrameworkの標準ライブラリになりました。
ScalikeJDBCは前述のエンジニアの方たちが作っているので、本当に困ったら直接聞けるというメリットがあります。(と勉強会で教わりました。笑)
私個人はScalikeJDBCを勉強し始めた段階なので、それぞれの良さがわかった頃に改めてまとめたいと思います。

※ 参考:Slick vs ScalikeJDBC

その他

scalazを使うエンジニアを業界では「Z戦士」と呼ぶそうです。笑

開発環境関連

IntelliJ IDEA

PlayFrameworkの勉強時、始めはEclipseにScalaIDEというプラグインを入れて使っていたのですが、動作が不安定&重いのでIntelliJ IDEAに乗り換えてみました。まだ使い始めなので慣れないですが、サクサク動いておすすめです。

ATOM

最近注目のテキストエディタATOMを使って開発環境を整えることもできるそうです。IDEを使うには大げさすぎる時など状況によって使い分けるといいかもしれません。 * AtomでのScala開発環境 - たけぞう瀕死ブログ

小ネタ

REPLでシンタックスハイライト

  • Scala 2.11.4より、ターミナルで"scala -Dscala.color"と入力してREPLを起動するとちょっとだけ(REPL結果の変数と型だけ)カラー表示となる。