Scalaの現状と今後
日本Scalaユーザーズグループ 代表
水島 宏太
自己紹介
l  水島 宏太 (株式会社ドワンゴ所属)
l  Scala関係のお仕事
l  プログラミング言語好き
l  自作言語を公開中(最近更新してない)
http://github.com/onionlang/onion
処理系
l  Scala 2.11.6: 最新安定版
l  バージョン
l  Scala 2.11.X: 主流
l  Scala 2.10.X:
l  Scala 2.9.X: 一部プロジェクトが利用
☆ 今から始めるならScala 2.11.X
IDE
l  既存IDE のプラグインとして提供
l  Eclipse (Scala IDE for Eclipse)
l  IntelliJ IDEA (+ Scala Plugin)
☆ IntelliJ IDEA + Scala Pluginがオススメ
ビルドツール - sbt
l  Simple Build Tool (or Scala Build Tool)
l  Scala DSLとしてビルド設定を定義
l  既存のmavenリポジトリを活用
☆ sbtが標準ビルドツール
※ 最新版はsbt-0.13.8
ライブラリ
l  Scala標準ライブラリ
l  サードパーティのScalaライブラリ
l  ScalaTest, ScalaCheck, Scalazなど
l  Githubにプロジェクトがある事が多い
l  既存のJavaライブラリ
☆ sbtで利用ライブラリへの依存性を記述
例 (build.sbt)
name := "example"
version := "0.01-SNAPSHOT"
scalaVersion := "2.11.6"
libraryDependencies += "junit" % "junit" %
"4.7" % "test"
Web Appフレームワーク
l  Play 2
u  Typesafe社製
u  独自のScala Template
u  情報多数
l  Scalatra
l  RubyのSinatraに類似
l  Skinny Framework
l  日本人が開発者
☆ 新しく始めるならPlay 2が無難
4.適用事例(海外)
l  Twitter
l  (おそらく)Scalaを世界で最も活用している企業
l  LinkedIn
l  Foursquare
l  The Guardian(英国のメジャーな新聞社)
l  Netflix(動画配信サービス)
l  その他多数
4.適用事例(国内)
l  株式会社ドワンゴ
l  Play 2を主に採用
l  エムスリー株式会社
l  Skinny Frameworkなどを使ったサービス
l  株式会社はてな
l  芸者東京エンターテインメント株式会社
l  その他多数
海外コミュニティ
l  インターネット上
l  gitter https://gitter.im/scala/scala/scala-user
l  各種ML
l  世界各地にコミュニティが存在
l  Bay Area Scala Enthusiasts (BASE)
l  New York Scala Enthusiasts
l  http://scala.meetup.com/ で調べてみると…
l  Scala Days (2010∼2015)
国内コミュニティの動向
l  Scala Conference in Japan 2013
l  有料イベント, 150名超の参加者
l  Scala Matsuri(2014)
l  Scala作者のMartin Odersky教授を招待
l  有料イベント, 400名近くの参加者
l  Scala Matsuri 2015/2016(予定)
l  rpscala
l  140回超の勉強会開催
l  Scala関西ビギナーズ
import org.scalatra._
class HelloWorldFilter extends ScalatraFilter {
get("/") {
<html>
<body>
<h1>Hello, world!</h1>
</body>
</html>
}
}
コレクションライブラリ
case class Person(name: String, age: Int)
val persons = List(Person(name="Kota
Mizushima", age=31), …)
val underTwenty = persons.filter(_.age <
20).map(_.name)
Println(underTwenty.mkString(", "))
パターンマッチング (in Unfiltered)
l  エコープログラム
val echo = unfiltered.filter.Planify {
case Path(Seg(pathElement :: Nil)) =>
ResponseString(pathElement)
case _ =>
ResponseString("処理できません")
}
unfiltered.jetty.Http.anylocal.filter(echo).run()
移行すべきかどうか
l  (もちろん)開発チームによりけり
l  Ruby等の言語経験があると良い
l  これまでの事例ではRuby, PHPからの移行事例
が意外に多かった
l  本格移行の前に内部的な導入実験推奨
l  APIサーバを作成してみる
l  単体テストをScalaで記述してみる
移行メリット
l  簡潔なコード
l  Javaの1/3∼1/4程度
l  強力な静的型チェック
l  Good-by NullPointerException
l  内部DSLを自作するのに適した文法
l  sbt, Specs 2, parser combinator, その他色々
l  並列・分散を意識したミドルウェア
l  e.g. Akka, Apache Spark
l  標準的なWebフレームワーク(Play 2)
移行リスク
l  学習コスト
l  コンパイルが遅い
l  速いマシンを買いましょう
l  Scalaコードのバイナリ後方互換性
l  現在では、マイナーバージョンアップでは後方互換性を
壊さないようになった
l  メジャーバージョンが上がると後方互換性が保たれない
l  sbtのクロスビルドである程度リスクを吸収
今後のScala
l  Scala 2.12
l  Java 8が必須
l  Java 8 Lambdaと親和性の高いコードを吐く
l  http://jp.scala-users.org/2014/06/30/scala-2.12-
roadmap.html
l  Scala Aida
l  標準ライブラリの見直し(継承を少なくするなど)
l  Scala Don Giovanni
l  type memberに基づいた言語の単純化
l  構文のクリーンアップ

Scalaの現状と今後