書籍: FP in Scala を100倍楽しむ方法

社内で『Functional Programming in Scala(邦題: Scala関数型デザイン&プログラミング)』の読書会が始まりそうなので、本書の読み進め方についてまとめておきたいと思います。

実は昨年にも読書会を開催したのですが、その時はがむしゃらに進めた結果、Part1(全体の1/3程度)を読んだところで力尽きました。今回はその経験を踏まえて、心が折れないような進め方を心がけたいと思いますw

本書について

本書を知らない方のために説明すると、本書はScalaを使って関数型プログラミングを学ぶための本です。

本書は実際に手を動かして(プログラミングを書いて)、関数型プログラミングを会得することを目指しており、各章で説明と練習問題が交互に書かれている、いわゆる教科書とドリルをミックスしたような構成になっています。また全体ではPart1から4まであり、基礎的な概念から応用へとステップアップしていくようになっていて、最終的にはScalaの標準ライブラリを実装できるレベルになるんだと思います。

Scalaを学ぶための本ではないので、Scalaそのものの言語仕様の説明などはほとんどありません。もしScalaについて何も知らないのでしたら、本書を読む前にScalaに入門(Scala研修テキストとか)しておくことをおすすめします。

はじめにやること

本書を読み始める前に準備した方がいいことを記載します。

リポジトリをforkする

本書には公式のGitリポジトリがあります。このリポジトリには、練習問題の雛形、ヒント、回答例などが含まれます。このリポジトリをforkして、練習問題の雛形にプログラミングを肉付けしていく進め方がおすすめです。

環境をセットアップする

練習問題のプログラムを実行するためのScalaの実行環境をセットアップします。最低限すべきことをは、Scalaのインストールと、sbtのインストールのみです。sbtのインストールまで済んだら、READMEに記載されているコマンドが実行できることを確認してください。

sbtについては、基本的なコマンドを抑えておくといいと思います。

蛇足ですが、エディタについては何でもいいのですが、さくっと始めたいならIntelliJ IDEAのCommunity Editionをインストールして、レコメンドされるプラグインをインストールするのがおすすめです。

章ごとにやること

章ごとに繰り返し行うことを記載します。

テキストを読む

まずは本書のテキストと例題を読み進めます。公式リポジトリにも章ごとにWikiのページがあり、前提知識の補強や、追加情報へのリンク、FAQなどが記載されているので併せて読むと良いです。

練習問題を解く

練習問題が出てきたらコードを書きます。コードはTDDスタイルで書いていくのがおすすめです。つまり、「期待する動作についてテストを書く」「コードを実装する」を繰り返します。

テストの書き方はお好きなスタイルでいいと思いますが、簡易的に行うのなら公式リポジトリのテストを参考にすると以下のように実行できます。

$ sbt
> project exercise
> run

Multiple main classes detected, select one to run:

 [1] fpinscala.gettingstarted.AnonymousFunctions
 [2] fpinscala.gettingstarted.FormatAbsAndFactorial
 [3] fpinscala.gettingstarted.MyModule
 [4] fpinscala.gettingstarted.TestFib
 [5] fpinscala.iomonad.IO2aTests
 [6] fpinscala.iomonad.IO2bTests
 [7] fpinscala.streamingio.ProcessTest

Enter number: 4

また、2章のWikiで紹介されているように、assertを用いた書き方にするとより良いかもしれません。この辺はあまり詳しくないので、おいおい良い方法を見つけたいと思います。

練習問題に行き詰まったら、公式リポジトリにあるヒントや回答を参考にしましょう。問題を解く時間を決めておいて、時間内に終わらなかったら回答を見て進めるでもいいと思います。

まとめ

本書を読む時は、公式リポジトリを活用しましょう。本書は、関数型プログラミングの初学者には難しい本なので、自分のレベルに合わせて楽しみましょう。