Scalaの世界へようこそ

2018年8月7日(火)
伊藤 竜一
【Scalaはこわくない!マルチパラダイム言語Scalaの入門書!】株式会社インプレスR&Dより発行された「Scalaをはじめよう! ─マルチパラダイム言語への招待─」の立ち読みコーナー第1回です。

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名未満の規模感.人数が少ないからこそ入りやすいか.


(次回へ続く)

大阪大学大学院情報科学研究科を修了後、さくらインターネット株式会社にてクラウドサービスのバックエンド開発に従事。プログラミング言語であるScala好きが高じ、Scala関西勉強会やScala関西Summitにて登壇。またその運営にも携わった。 最近はKubernetesと戯れている。

連載バックナンバー

開発ツール書籍・書評
第4回

FizzBuzzしてみよう

2018/8/16
【Scalaはこわくない!マルチパラダイム言語Scalaの入門書!】株式会社インプレスR&Dより発行された「Scalaをはじめよう! ─マルチパラダイム言語への招待─」の立ち読みコーナー第4回です。
システム開発書籍・書評
第3回

Hello Worldを嚙み砕こう

2018/8/14
【Scalaはこわくない!マルチパラダイム言語Scalaの入門書!】株式会社インプレスR&Dより発行された「Scalaをはじめよう! ─マルチパラダイム言語への招待─」の立ち読みコーナー第3回です。
開発言語書籍・書評
第2回

Scalaの環境を作る

2018/8/9
【Scalaはこわくない!マルチパラダイム言語Scalaの入門書!】株式会社インプレスR&Dより発行された「Scalaをはじめよう! ─マルチパラダイム言語への招待─」の立ち読みコーナー第2回です。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています