Scalaの世界へようこそ
Scalaの世界へようこそ
この本について
この本は,あまり難しいことを考えずに一通りScalaを触れるようになることを目的としています.簡単なサンプルコードをベースにゆる~く,でも出来る限りScalaの本質を損なわないように構文や機能を紹介していきます.流れに沿って必要十分なスピードで進んでいくため,辞書的に利用するのではなく順を追って読むことをおすすめします(サンプルコード内のコメントにも重要な情報があります).Scalaやその他の小難しい関数型プログラミング等々の事前知識は一切必要ありませんが,Javaまたは相当するオブジェクト指向プログラミング言語をある程度理解していることを前提とします.
Scalaとは?
Scala(スカラ)はオブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語である。名前の「Scala」は英語の「scalable language」に由来するものである。
Wikipediaではこのように紹介されています.2.12系がメインストリームで,最新のリリースは2.12.4となっています(2018年2月現在).本書では2.12系を前提に進めます.本題に入る前にScalaの“推しポイント”をいくつか紹介します.
・Scalaはオブジェクト指向と関数型の特徴を併せ持つプログラミング言語です.関数型は難しそうだと敬遠してしまう方も多いと思いますが,Scalaでは関数型の知識をほとんど必要とせずに恩恵だけを得ることができるのです.ベースはオブジェクト指向ですので,Javaの延長としてプログラミングしながら関数型由来の便利ツールで楽をすることができます.
・構文・標準ライブラリが共に洗練されており,簡潔なコードを記述できます.強い静的な型付けにより多くのバグをコンパイル時に発見しやすいというメリットと,型推論や糖衣構文といった補助機能により,RubyやPythonといったスクリプト言語のようにスッキリとしたコーディングが可能というメリットを併せ持ちます.他の言語ではもどかしかったことがScalaでならサクッとできちゃいます.
・JVM上で動作するため,様々なプラットフォームで同じバイナリを利用できます.また,Javaのライブラリ資産もオーバーヘッドなくシームレスに利用できます.逆にJavaからScalaのコードを呼び出すことも可能なため,プロジェクトの一部にだけScalaを利用するといったこともできます.
・必要なツールはsbt(とJDK)だけです.「コンパイラは?言語仮想環境構築ツールは?ビルドツールは?」とあれこれ迷う必要はありません.sbtひとつでビルドやライブラリの管理はもちろん,REPLと呼ばれる対話的な実行環境やプロジェクトで利用するScalaのバージョン管理まで可能です.ちなみに最近ではScalaをネイティブ環境(LLVM)やJavaScript環境(as an AltJS)向けにコンパイルして利用できる環境も整いつつあります.
Scalaの良いところばかりを挙げましたが,一方でScalaについてよく誤解されることがあるので,こちらも触れておきたいと思います.既にScalaを調べたことがある方であれば「Scalaのコンパイルは遅い」という噂を耳にしたことがあるのではないでしょうか.これは一部正解ですが,誤解によるものが多く含まれます.コンパイル時に必要な処理が多く結果として比較的遅いことは事実ですが,それ以上にビルドツールの誤った利用法によりコンパイル速度が低下している場合が多いです.正しく利用していればそれほどもたつくことはないでしょう.
また,コンパイル速度自体も日々改善が進んでいます.ビルドについて詳しくは2章で取り上げます.もう1つ,「Scalaのコードは難しい」と先入観を持たれることがあります.実際には基本的な構文(特に一部の糖衣構文)さえ知ってしまえば不自由することはないはずで,その量も少なく抑えられています.コーディングの指針としては,「基本はオブジェクト指向であること」「出来る限り値を不変にすること」の2つだけ意識していけばとりあえず十分でしょう.これらについても本書の中で追い追い紹介していきます.
さて,Scalaを始める前にこのような謳い文句をいくら並べても実感が湧かないと思いますので早速本編に入っていきましょう.
【コラム】参考になるウェブサイト・本
■おすすめ
Scala Standard Library API
http://www.scala-lang.org/api/current/index.html
Scala標準ライブラリの公式ドキュメント.Google先生が苦手な記号でも検索可能.
Scala Tutorials
http://docs.scala-lang.org/tutorials/
Scala公式のチュートリアル.項目ごとに列挙されている.かなりニッチで応用的な項目も紛れているので注意.
ひしだま's 技術メモ Scala
http://www.ne.jp/asahi/hishidama/home/tech/scala/index.html
網羅的にまとめられている.
Scala Text(株式会社ドワンゴによる研修用資料)
https://dwango.github.io/scala_text/
言語学的な部分から実務向けの情報まで幅広くまとめられている.
sbt Reference Manual
http://www.scala-sbt.org/1.x/docs/ja/index.html
Scala向けビルドツールのデファクトスタンダードであるsbtの公式ドキュメント.
■条件付きでおすすめ
Scalaスケーラブルプログラミング第3版(インプレス)
https://www.amazon.co.jp/dp/4844381490
Scalaの作者であるOdersky氏による本.通称コップ本.入門向けとしておすすめされている場合が多いが,「Scalaはどのような方針で設計されているのか」といったことまで興味がある人に向いているだろう.
Scalaによるプログラミングの基礎(株式会社はてなによる研修用資料)
https://github.com/hatena/Hatena-Textbook/blob/master/foundation-of-programming-scala.md
株式会社ドワンゴによる研修資料より実務寄りの内容.スライド前提の内容で細かいところを置いて進んでしまうので1から読んで追いかけるのは少々大変か.
Scala逆引きレシピ(翔泳社)
https://www.amazon.co.jp/dp/4798125415
内容は実務寄りで辞書的に便利.しかし古い内容が含まれるので注意が必要.
Scala関数型デザイン&プログラミング(インプレス)
(原著: Functional Programming in Scala(Manning Publications))
http://www.amazon.co.jp/dp/4844337769
Scalaについての本ではなく,純粋関数型をScalaでどう実現するか ということに主眼をおいている本.Scala初心者向けの内容ではない.類似する関数型についての書籍であるすごいHaskellたのしく学ぼう!(オーム社)より難易度はやや高め.
■その他のリソース
Gitter - ScalaJP
https://gitter.im/scalajp/public
日本Scalaユーザーズグループが運用しているチャット.500名程が参加している.初心者向けのチャットルームと関数型・上級者向けチャットルームは別々に用意されている.
Slack - scala-jp
https://scala-jp-slackin.herokuapp.com/
日本のScalaユーザが有志で運用しているチャット.できてから日が浅く100名未満の規模感.人数が少ないからこそ入りやすいか.
(次回へ続く)