kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Scalaを手っ取り早く学ぶのに適したリソースを紹介する(2020年版)

はじめに

 こんにちは。水島です。例のQiita炎上の件で、「ああ、これはもう自分向きのサービスじゃないな」と思ってサックリとアカウント消して退会したわけですが、ちょっとこれくらいはレスキューしておけば良かったな…と思った記事があったので、リライトしてみました。

 昨今、Scalaは色々なところで使われている一方で、特に日本語でScalaを学習したい人には、どこから手をつけていいやらさっぱり、という状況があります。特に、古い書籍だと現状のScalaのエコシステムを反映していませんし、Webサイトでも、古い情報のままということがあります。というわけで、今、日本語でScalaを学習したい人にとって適切なリソースをご紹介したいと思います。

オンライン講座

N予備校 プログラミングコース Scala基礎

www.nnn.ed.nico

 オンライン学習サイトの一つである、N予備校にはプログラミングコースというのがあって、その中でScala基礎という講座があります。実は、制作の初期段階で私がちょびっと関わっていたのですが、それはおいといても、Scalaを学ぶためのサイトとしては非常に品質が高いです。良いところを挙げると

  • Scalaのバージョンアップにキャッチアップしている
  • Scalaの基礎的な部分を丁寧に説明している
  • ある程度実践的なWebアプリ(ニコ動ぽいもの)を作る演習がある
  • 演習問題の解答をGitHub経由で提出して、講師がコメントをくれるシステムがある
    • これは、今もあるかは未確認

 といったところでしょうか。N予備校は月額1000円のサービスですが、今は無料で公開されているので、Scalaの実践的な知識を身に付けたい人にお勧めです。

書籍

実践Scala入門

実践Scala入門

実践Scala入門

 私を含む、5名による共著のScala書籍です。この本のコンセプトは、「コンパクトなコップ本」というものでして、コップ本の重厚長大さを軽減しつつ、実践に必要な知識を身に付けられるようになっています。

  • Scala 2.12対応(現状、主に現場で使われているバージョン)
  • Scalaを使う上で必須なsbtの解説がある
  • 同様に必須な、コレクションフレームワークの解説がある
  • テスティングフレームワークの解説がある

 といった点で、お勧めできます。なお、Scala作者のMartin Odersky教授らが執筆した、Programming in Scalaの邦訳である

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

 (いわゆるコップ本)は、その重厚長大さもあって、初学者には勧めづらいなと思うに至りました。ただ、言語仕様書以外でScalaについて網羅的に解説している書籍はこれがほぼ唯一のものですし、Scalaの設計思想についても語られているので、リファレンスとして持っておいて損はありません。

Scalaをはじめよう! ─マルチパラダイム言語への招待─ (技術の泉シリーズ(NextPublishing)

 インプレスR&Dから出版されたScala本です。

  • Kindle Unlimitedに入っていれば無料で読める
  • お値段も安い
  • コンパクト
  • Scala 2.12対応
  • Scalaの基本構文だけでなく、周辺のエコシステムにもある程度追従している

 といった特徴があります。特に、お値段やコンパクトさ(実践Scala入門と比べても)という点から、お手軽にScalaを始めたい方にお勧めできます。

ゼロから学ぶScala

ゼロから学ぶScala

ゼロから学ぶScala

 この本は、主にScala言語自体の習得に重きが置かれていますが、演習問題などがちゃんとあることや、内容についても誤りは少ないことから、とりあえずScalaの概観をつかむのには適しています。ただし、情報についてはやや古い部分も見受けられるので、その点については注意してください。また、この書籍ではsbtなどのエコシステムについての記述はほとんどないので、あくまでScala言語を学ぶためのものだと割り切るのが良いです。

Webページ

Scala研修テキスト

scala-text.github.io

 私が前職の時に、当時の同僚とともに書き上げた、新卒向けScala研修テキストです。

blog.scalamatsuri.org

 という経緯があって、今はJapan Scala Association(JSA)に寄贈されています。現在は、xuwei-kさんが主にメンテナンスをしており、特に、xuwei-kさんの尽力によって、最新バージョンへの追従などが継続して行われています。このテキストは、実際にドワンゴ社でのScala研修に使われたものであり、正確さにも最大限注意を払っているので、広くお勧めできます。ただし、現状はJava言語の利用経験がある人向けの説明になっているので、その点は注意が必要です(今後、Java言語の経験を前提としない、より初学者向けのテキスト改良を考えています)。

 CC BY-NC-SA 3.0で公開されていますが、企業内での研修用途では自由に利用可能という例外条項が入っていますので、企業の研修でも自由にご利用いただくことができます。なお、営利目的で利用する場合も、JSA側で個別に許諾を与えることは可能ですので、研修以外の営利目的で利用されたい場合はご相談いただければと思います。

 このテキストは、実際にScalaを使った開発をしている企業様複数に利用されていますから、どしどし利用していって、改良のためのフィードバックをいただければと思います。

Scalaメモ(Hishidama's Scala Memo)

www.ne.jp

 ひしだまさんによる、Scalaメモです。メモとはいうものの、インストールの仕方から、サンプルコード、ひしだまさんが使う上でハマった落とし穴など、実際の経験に基づいて書かれています。特に、Scalaの落とし穴にはまった人が参照するとよいのではないかと思います。ただし、更新された年月が全般的に古いので(Scala 2.10~Scala 2.11くらいのものが多い?)、その点は注意が必要です。 

その他

 その他にも、色々なScala書籍が出ているのですが、全般的に出版された年代が古いことが多く(特に、Scala 2.9以前やScala 2.10時代に書かれたものが多い)、2020年現在、お勧めできるものがあまりありません。ただ、その中でも読んでおくと面白いかもしれない本をいくつか挙げておきます。

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

Scalazのコントリビュータ(当時)の人たちによって書かれた、Scala徹底して関数型プログラミングを行うための本です。注意して欲しいのは、この書籍で解説されている技法は、Scalaの現場では一般的ではないので、あくまで、純粋関数型プログラミングに近いやり方をScalaで学ぶための本だと割り切ってください(重要)。

Akka実践バイブル アクターモデルによる並行・分散システムの実現

 Scala界隈で非常に一般的につかわれている、並列・分散ミドルウェアであるAkkaの解説書です。ScalaのWebアプリケーションフレームワークであるPlayでもAkkaが内部的につかわれており、Akkaを活用するためにはこの本を読んでおいて損はありません。

Scalaパズル 36の罠から学ぶベストプラクティス

Java界隈で有名な(?) Java Puzzleに影響を受けたと思われる本です。Scalaの落とし穴や罠など、言語仕様について探求してみたい人には面白いかもしれません(あくまで読み物として楽しむくらいが良いです)

というわけで、Scalaを学ぶのに良い書籍やサイトを紹介してみました。Qiitaで書いたときにもちょろっと言及した、竹添直樹さんによる『Scala逆引きレシピ』は良書なのですが、出版年代が古く、sbtやScalaのバージョンが上がって、Scalaのエコシステムが色々変わった現在はそのまま使えない点があるのでお勧めしづらい感じです。

 リライトするときに抜け落ちてしまった情報があるかもしれないのですが、だいたい復元できただろう、と思います。