本書は、オブジェクト指向言語に関数型言語の特長をバランスよく取り込んだ、実用的なプログラミング言語「Scala(スカラ)」の逆引き本です。Scalaの基本構文、標準ライブラリ、ユニットテスト、ビルドツール、データベース、Webプログラミングなど幅広い内容について、著者の現場経験に基づいた実践的なノウハウ・レシピを提供します。これからScalaに触れてみようという方はもちろんのこと、すでにある程度Scalaに関する理解がある方にとっても、「実際の開発時にどのようなコードを書いたら良いかを知るための手引き」として役立てていただける一冊です。
第1章 準備
1.1 セットアップ
   001 Scala のセットアップ
   002 Eclipse のセットアップ
   003 Scala のAPI リファレンスを参照したい
  1.2 コンパイルと実行
   004 Scala プログラムを実行したい
   005 Scala のディレクトリ/ファイル構成を知りたい
   006 Scala プログラムをコンパイルせずに実行したい
   007 クラスパスを指定したい
   008 jar ファイルを実行したい
   009 対話型シェル(REPL)を使いたい
第2章 Scala の基本
2.1 コンソール
   010 コンソールに出力したい
   011 コンソールから入力したい
  2.2 パッケージとインポート
   012 パッケージを定義したい
   013 インポート文の機能を知りたい
   014 Predef ってなに?
  2.3 変数
   015 varとval の違いを知りたい
   016 lazy ってなに?
  2.4 型
   017 Scala の型階層について知りたい
   018 型を省略可能/不可能なケースを知りたい
  2.5 暗黙の型変換
   019 暗黙の型変換について知りたい
   020 暗黙の型変換で型を拡張したい
  2.6 数値
   021 数値同士の型を変換したい
   022 数値処理を行ないたい
   023 桁あふれや丸め誤差のない計算をしたい
  2.7 文字列
   024 複数行の文字列リテラルを記述したい
   025 文字列をフォーマットしたい
   026 文字列を1 行ごとに処理したい
   027 文字列を連結したい
   028 文字列を比較したい
   029 文字列を数値やBoolean に変換したい
   030 文字列が正規表現に一致するか調べたい
   031 文字列を分割したい
   032 正規表現で文字列を検索したい
   033 正規表現で文字列を置換したい
  2.8 制御構造
   034 if から値を返したい
   035 for で繰り返し処理を行ないたい
   036 for ループをフィルタリングしたい
   037 for ループから値を返したい
   038 for ループの入れ子を簡単に記述したい
   039 ループ処理などを途中で終了したい
  2.9 パターンマッチ
   040 パターンマッチで条件分岐を行ないたい
   041 型でパターンマッチを行ないたい
   042 ケースクラスのパターンマッチを行ないたい
   043 List や配列のパターンマッチを行ないたい
   044 タプルのパターンマッチを行ないたい
   045 正規表現でパターンマッチを行ないたい
   046 XML のパターンマッチを行ないたい
   047 パターンマッチに条件を加えたい
   048 マッチした値を変数として参照したい
   049 関数の引数に対してパターンマッチを行ないたい
  2.10 エラー処理
   050 Option 型の使い方を知りたい
   051 例外処理について知りたい
   052 Either で例外をラップしたい
第3章 関数とクロージャ
3.1 関数
   053 関数を定義したい
   054 関数を引数として渡したい
   055 関数を戻り値として返したい
   056 ネストした関数を定義したい
  3.2 クロージャ
   057 クロージャってなに?
  3.3 部分適用
   058 メソッドを関数に変換したい
   059 一部の引数のみ指定して関数を呼び出したい
   060 部分関数ってなに?
  3.4 カリー化
   061 カリー化について知りたい
   062 引数が複数ある関数をカリー化したい
  3.5 再帰
   063 ループを再帰で処理したい
第4章 オブジェクト指向プログラミング
4.1 クラスとメンバー
   064 クラスを定義したい
   065 メソッドを定義したい
   066 可変長引数を定義したい
   067 引数名を指定してメソッドを呼び出したい
   068 引数にデフォルト値を設定したい
   069 暗黙の引数について知りたい
   070 引数を遅延評価させたい
   071 フィールドを定義したい
   072 コンストラクタを定義したい
   073 アクセス修飾子について知りたい
  4.2 継承と抽象クラス
   074 クラスを継承したい
   075 sealed ってなに?
   076 抽象クラスを定義したい
   077 フィールドやメソッドをオーバーライドしたい
  4.3 トレイト
   078 トレイトってなに?
   079 トレイトをミックスインしたい
   080 トレイトの抽象メソッドを拡張したい
   081 継承元を指定してメソッドを呼び出したい
   082 抽象フィールドが初期化されるタイミングを知りたい
  4.4 オブジェクトとケースクラス
   083 シングルトンを定義したい
   084 コンパニオンオブジェクトってなに?
   085 抽出子ってなに?
   086 ケースクラスってなに?
   087 パッケージオブジェクトってなに?
  4.5 列挙型
   088 列挙型を定義したい
  4.6 ジェネリクス
   089 ジェネリクスを定義したい
   090 型パラメータに変位を指定したい
   091 制限付きの型パラメータを定義したい
   092 型パラメータによって呼び出すメソッドを変更したい
   093 プリミティブ型を指定する型パラメータを効率化したい
   094 型パラメータの情報を取得したい
  4.7 型の操作
   095 キャストしたい
   096 Class オブジェクトを取得したい
   097 型に別名を付けたい
   098 自分型アノテーションについて知りたい
   099 ダックタイピングしたい
  4.8 アノテーション
   100 アノテーションを付与したい
   101 Scala 標準アノテーションについて知りたい
   102 独自のアノテーションを作成したい
第5章 コレクション
5.1 コレクションの基礎
   103 Scala のコレクションについて知りたい
   104 コレクションを比較したい
   105 コレクション同士を変換したい
  5.2 List
   106 List を使いたい
   107 List の長さを調べたい
   108 List の要素を取得したい
   109 List に要素を追加したい
   110 List の要素を削除したい
   111 List を連結したい
   112 List の要素を繰り返し処理したい
   113 List の要素を変換したい
   114 List の要素をソートしたい
   115 List の要素を文字列に変換したい
   116 List の一部を切り出したList を作成したい
   117 List を分割したい
   118 List の要素が条件を満たすか調べたい
   119 ネストしたList をフラットにしたい
   120 List の要素の集計値を求めたい
   121 2 つのList の要素のペアを持つList を作りたい
   122 「::」や「:::」とはなんですか?
  5.3 Map
   123 Map を使いたい
   124 Map の要素を繰り返し処理したい
   125 Map に要素を追加したい
   126 Map を連結したい
   127 Map から要素を削除したい
   128 Map の要素を変換したい
   129 Map の要素をソートしたい
  5.4 Set
   130 Set を使いたい
   131 Set の論理演算を行ないたい
   132 ソートされたSet を使いたい
  5.5 その他のコレクション
   133 配列を使いたい
   134 Vector を使いたい
   135 タプルを使いたい
   136 Stream を使いたい
   137 ミュータブルなコレクションを使いたい
   138 ミュータブルなコレクションを同期化したい
   139 並列コレクションを使いたい
第6章 ファイル操作と入出力
6.1 標準ライブラリによる入出力
   140 ファイルを読み込みたい
   141 より高度な入出力を行ないたい
  6.2 Scala IO
   142 Scala IO を使いたい
   143 ファイルやディレクトリを扱いたい
   144 ファイルやディレクトリを作成したい
   145 ファイルやディレクトリを削除したい
   146 ファイルやディレクトリをコピー/移動したい
   147 ディレクトリ内のファイルやディレクトリを取得したい
   148 親ディレクトリを取得したい
   149 ファイルやディレクトリの属性を調べたい
   150 Path とJava のFile オブジェクトを変換したい
   151 ファイルに対して文字列の読み書きを行ないたい
   152 ファイルに対してバイナリの読み書きを行ないたい
   153 Java の入出力API と連携したい
第7章 XML
7.1 操作
   154 Scala のコードにXML を記述したい
   155 XML リテラルに変数や式を含めたい
   156 XML を読み込みたい
   157 XML を保存したい
  7.2 検索
   158 XML を検索したい
   159 要素や属性の値を取得したい
   160 要素をコレクションで取得したい
  7.3 比較
   161 XML を比較したい
第8章 ツール、ユーティリティ
8.1 ユーティリティ
   162 外部プログラムを実行したい
   163 ログを出力したい
   164 JSON を使いたい
   165 GUI アプリケーションを作りたい
   166 Scala コードを実行時に評価したい
   167 日付処理を行ないたい
   168 HTTP 通信をしたい
   169 パーサコンビネータを使いたい
  8.2 ツール
   170 scaladoc でAPI リファレンスを作成したい
   171 XML をScala クラスにマッピングしたい
   172 コンパイラプラグインを使いたい
第9章 並行プログラミング
9.1 導入
   173 Scala の並行処理について知りたい
  9.2 Akka
   174 Akka を使いたい
   175 Akka で並行処理を行ないたい
   176 Akka のアクターから別のアクターを生成したい
   177 Akka で子のアクターの終了をモニタリングしたい
   178 Akka でアクターの耐障害性を高めたい
   179 Akka でアクターの処理結果を取得したい
   180 Akka のFuture にコールバックを定義したい
   181 Akka で送信元のアクターへメッセージを返信したい
   182 Akka のアクターからメッセージを転送したい
   183 Akka でアクターの開始/終了/再起動をフックしたい
   184 Akka でホットスワップしたい
   185 Akka でリモートアクターを使いたい
   186 Akka でアクターへのメッセージ送信をスケジューリングしたい
   187 Akka でログを出力したい
   188 Akka のアクターでトランザクションを使いたい
  9.3 スレッド
   189 スレッドで一部の処理を非同期にしたい
   190 スレッドで非同期処理から結果を返したい
第10章 Java との連携
10.1 Scala からJava を扱う
   191 Scala からJava のクラスを呼び出したい
   192 Scala でJava のクラスを継承したい
   193 Scala でJava のインターフェイスを実装したい
   194 Scala とJava のコレクション型を変換したい
  10.2 Java からScala を扱う
   195 Java からScala のクラス/オブジェクトを呼び出したい
   196 Scala のクラスをJavaBean として扱いたい
   197 Scala のプロパティにJava から読み取り可能なアノテーションを付けたい
   198 Java でScala が投げる例外を処理したい
   199 java コマンドでScala プログラムを実行したい
第11章 sbt
11.1 sbt の使い方
   200 sbt をセットアップしたい
   201 sbt プロジェクトを作成したい
   202 sbt でコンパイルやテストなどを実行したい
   203 対話型シェルでsbt を使いたい
   204 ライブラリを使いたい
   205 一部のライブラリをクラスパスから除外したい
   206 リポジトリに存在しないライブラリを使いたい
   207 ライブラリをリポジトリにパブリッシュしたい
   208 複数のバージョンのScala 向けにビルドしたい
   209 複数のsbt プロジェクトをまとめて管理したい
  11.2 プラグイン/外部ツールとの連携
   210 sbt プラグインを使いたい
   211 java コマンドで実行可能なjar ファイルを作りたい
   212 環境依存の設定ファイルをビルド時に書き換えたい
   213 テストのカバレッジを測定したい
   214 sbt でWeb アプリケーションを開発したい
   215 sbt でソースコードのクロスリファレンスを生成したい
   216 sbt プロジェクトをEclipse で使えるようにしたい
第12章 テスト
12.1 ユニットテストの基本
   217 Scala のテスティングフレームワークについて知りたい
   218 ScalaTest でテストケースを記述したい
   219 ScalaTest で実行結果を検証したい
   220 ScalaTest でテストの事前/事後処理を行ないたい
   221 Specs2 でテストケースを記述したい
   222 Specs2 で実行結果を検証したい
   223 Specs2 でテストごとに必要な値を定義したい
   224 Specs2 でテストの事前/事後処理を行ないたい
   225 指定したテストケースだけを実行したい
   226 テストをスキップしたい
  12.2 高度なテスト
   227 モックライブラリを使ってテストを行ないたい
   228 ScalaCheck を使ってテストを行ないたい
   229 テストデータを指定してテストを行ないたい
   230 ScalaMock を使いたい
   231 ScalaMock でクラスやシングルトンのモックを作成したい
   232 テストケースをJUnit で実行したい
   233 テストの並列実行について知りたい
第13章 フレームワーク
13.1 導入
   234 Scala のフレームワークについて知りたい
  13.2 Play2
   235 Play2 を使いたい
   236 Play2 で作成したWeb アプリを運用環境で実行したい
   237 Play2 のコントローラを実装したい
   238 Play2 のルーティングについて知りたい
   239 Play2 のコントローラでリクエストパラメータを取得したい
   240 Play2 でフォームを定義したい
   241 Play2 でフォームに対応したビューを作りたい
   242 Play2 のフォームで高度な入力チェックを行ないたい
   243 Play2 のコントローラで共通処理を行ないたい
   244 メッセージを国際化したい
   245 Play2 でファイルアップロード機能を実装したい
   246 Play2 でファイルダウンロード機能を実装したい
   247 Play2 でセッションを使いたい
   248 Play2 でJSON を使いたい
   249 Play2 で外部のWeb API を呼び出したい
   250 Play2 でキャッシュを使いたい
   251 Play2 でHTML テンプレートを使いたい
   252 Play2 でテンプレートを共通化したい
   253 Play2 でデータベースにアクセスしたい
   254 Anorm でSQL を実行したい
   255 Anorm で検索結果をケースクラスにマッピングしたい
   256 Play2 でAnorm 以外のデータベースライブラリを使いたい
   257 Play2 でWebSocket を使いたい
  13.3 Scalatra
   258 Scalatra を使いたい
   259 Scalatra でリクエストのマッピングを行ないたい
   260 Scalatra で事前/事後処理を行ないたい
   261 Scalatra でリクエストパラメータを取得したい
   262 Scalatra でリクエストパスの一部をパラメータとして取得したい
   263 Scalatra でサーブレットAPI を使いたい
   264 Scalatra でファイルアップロードを行ないたい
  13.4 Scalate
   265 Scalatra でテンプレートエンジンを使いたい
   266 Scalate のテンプレートを共通化したい
   267 Scalate テンプレートの記法を知りたい
   268 Scalate テンプレートでVelocity スタイルの記法を使いたい
  13.5 ScalaQuery
   269 ScalaQuery を使いたい
   270 ScalaQuery でSELECT を実行したい
   271 ScalaQuery でINSERT を実行したい
   272 ScalaQuery でUPDATE を実行したい
   273 ScalaQuery でDELETE を実行したい
   274 ScalaQuery で検索結果をエンティティにマッピングしたい
   275 ScalaQuery でソートやグルーピングを行ないたい
   276 ScalaQuery でテーブルをジョインしたい
   277 ScalaQuery でサブクエリを実行したい
   278 ScalaQuery でSQL を直接実行したい
  13.6 Casbah/Salat
   279 Casbah を使いたい
   280 Casbah でドキュメントを検索したい
   281 Casbah でドキュメントを登録したい
   282 Casbah でドキュメントを更新したい
   283 Casbah でドキュメントをアトミックに更新したい
   284 Casbah でドキュメントを削除したい
   285 Casbah でソートやグルーピングを行ないたい
   286 Casbah でMapReduce を使いたい
   287 Casbah でGridFS を使いたい
   288 Casbah で高度なクエリを記述したい
   289 Casbah でドキュメントをケースクラスにマッピングしたい
  13.7 spray
   290 spray を使いたい
   291 spray でリソースにURI パスを指定したい
   292 spray でリソースにHTTP リクエストを指定したい
   293 spray でリソースからレスポンスを返したい
   294 spray のリソースでクエリパラメータを取得したい
   295 spray のリソースでフォームパラメータを取得したい
   296 spray でリクエストを任意のクラスで取得したい
   297 spray でレスポンスを任意のクラスで返したい
   298 spray でJSON とケースクラスを変換したい
   299 spray でリソースの処理を非同期に行ないたい
   300 spray でリソースに認証/認可を付けたい
付録 Scala 2.10 の新機能
A.1 文字列への変数の埋め込み
  A.2 Implicit Class
  A.3 値型のクラス
  A.4 メソッドやフィールドの動的なディスパッチ
  A.5 リフレクションAPI
  A.6 Futures とPromises
  A.7 言語機能のモジュール化
  A.8 マクロ
  A.9 その他の変更点
Tadatoshi Sekiguchi さん
2013-01-17
Scalaの文法から標準ライブラリの使い方まで一通り記載されていて、目次が分かりやすくて引きやすい。周辺ライブラリはsbtのライブラリ指定方法が記載してあり親切。Web時代にもこういう体系だった整理が必要だなと思った一冊。