kmizuの日記

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

『Scala逆引きレシピ』 感想

Scala逆引きレシピ (PROGRAMMER’S RECiPE)

少し前に献本いただいたのですが(竹添さん、翔泳社様、ありがとうございます)、時間が無くてあまり読み進められていませんでした。昨日使って一通り目を通したので、ちょっとした感想を書きます。購入の際の参考になれば幸いです。

まず、結論から言うと、本書は、

  • (特に)Javaをメイン言語として使っている人で、Scalaを学習したい人
  • Scalaを使った実用プロジェクトを作り始めたい人
  • Scalaの各種ライブラリの基本的な使い方を知りたい人

にお勧めできる書籍といえます。主な理由としては、

  • 現行安定版である Scala 2.9.X (現在最新安定版はScala 2.9.2) に対応している事
  • 言語機能に関するレシピがある事
  • sbtを使って、実際に開発を行うために必要な記述がちゃんとあること
  • 準標準的なライブラリ(Akka, Specs 2, 等)や新しいFW(Play 2)に関する記述が豊富な事

などがあります。

まず、現行安定板である Scala 2.9.2 に対応しているのは当然の事ながら重要です。現在、Scala開発のメインストリームはScala 2.9.X系列です。今年中にScala 2.10が出る予定ですが、本格的な移行には少し時間がかかることを考えると、Scala 2.9.X系列ベースであればすぐに賞味期限切れになる心配もありません(個人的な憶測としては、少なくとも1年は(多少読み替える必用があっても)だいたい通用すると思います)。

次に、これは私にとっては必要無いものでしたが、アノテーションを定義したい」「列挙型を定義したい」といった(主にJavaプログラマを想定したと思われる)言語機能に関するレシピが一通りあるのは、特にScala初学者にとって便利だろうと思います。

三番目に上げましたが、とても重要なのが、本書ではScalaの標準ビルドツール sbtを利用する事を前提としていることです。現在、Scalaで実用プログラミングを行ううえで、sbtの利用はほとんど避けて通れません。本書では、sbtを使ってプロジェクトのビルド/テスト/パブリッシュを行うためのレシピもしっかりと用意してあり、sbtがわからない人も、本書のsbtに関するレシピを読めばすぐ使い始められるようになっています。

また、サードパーティのライブラリを紹介するときに、sbtのビルド定義ファイル build.sbtに追加すべき記述を載せています。たとえば、「JSONを使いたい」レシピでは、ライブラリとしてsjsonが紹介されており、それを使うために Scalaのビルド定義ファイルに

libraryDependencies ++= Seq(
  "net.debasishg" % "sjson_2.9.1" % "0.15"
)

という記述を追加する必要があることが書かれています。

最後に挙げましたが、サードパーティのライブラリの取り扱いについては、かなり詳しく調査された様子がうかがえ、私も参考になりました。Scalaのライブラリは最近では色々なものが出ていますから、調査が追いつかないものもあり、その辺りはなるほどなるほどと思いながら読んでいました。

一方で、これは書籍の方向性上仕方ないものですが、Scalaという言語の設計思想・イディオム的な部分に関する記述が弱いと感じました。また、各種ライブラリについても、まず使う事に重点が置かれていて、それぞれのライブラリの設計思想など深い部分には踏み込めていないと感じました。これらの点は、本書の性質上省かざるを得ない部分ですから、書籍の欠点とすべきでないでしょう。

そこで、個人的には、これからScalaを学習される方は、本書に加えて、『Scala スケーラブルプログラミング 第二版』

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

(通称コップ本)が手元にあると良いと思います。コップ本はScala作者自らが執筆しているだけあって、Scalaの設計思想や関数型プログラミングといったテーマについても最初から丁寧に掘り下げていますから、本書の足りない部分をコップ本で補完できるのではないかと思います。

最後に、このような素晴らしい書籍を執筆された竹添さん、島本さん、大変ありがとうございます。Scalaでは頻繁にライブラリがアップデートされるため、おそらく執筆中にバージョンアップに伴った書き直しが必要だった部分も多々あったと思います。実際、読んでいて、「この辺りを書くのは大変だっただろうな」と思った箇所が多々ありました。それを乗り越えて本書が出版されたことで、Scalaが国内においてももっと広まれば良いなと思っています。