Scalaの現状と今後

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 
l 
l 
Simple Build Tool (or Scala Build Tool)
Scala DSLとしてビルド設定を定義
既存のmavenリポジトリを活用
☆ sbtが標準ビルドツール
※ 最新版はsbt-0.13.8
ライブラリ
l 
l 
l 
Scala標準ライブラリ
サードパーティのScalaライブラリ
l 
ScalaTest, ScalaCheck, Scalazなど
l 
Githubにプロジェクトがある事が多い
既存の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 
u 
u 
l 
Scalatra
l 
l 
Typesafe社製
独自のScala Template
情報多数
RubyのSinatraに類似
Skinny Framework
l 
日本人が開発者
☆ 新しく始めるならPlay 2が無難
4.適用事例(海外)
l 
Twitter
l 
l 
l 
l 
l 
l 
(おそらく)Scalaを世界で最も活用している企業
LinkedIn
Foursquare
The Guardian(英国のメジャーな新聞社)
Netflix(動画配信サービス)
その他多数
4.適用事例(国内)
l 
株式会社ドワンゴ
l 
l 
エムスリー株式会社
l 
l 
l 
l 
Play 2を主に採用
Skinny Frameworkなどを使ったサービス
株式会社はてな
芸者東京エンターテインメント株式会社
その他多数
海外コミュニティ
l 
l 
l 
インターネット上
l 
gitter https://gitter.im/scala/scala/scala-user
l 
各種ML
世界各地にコミュニティが存在
l 
Bay Area Scala Enthusiasts (BASE)
l 
New York Scala Enthusiasts
l 
http://scala.meetup.com/ で調べてみると…
Scala Days (2010∼2015)
国内コミュニティの動向
l 
Scala Conference in Japan 2013
l 
l 
Scala Matsuri(2014)
l 
l 
l 
l 
Scala作者のMartin Odersky教授を招待
有料イベント, 400名近くの参加者
Scala Matsuri 2015/2016(予定)
rpscala
l 
l 
有料イベント, 150名超の参加者
140回超の勉強会開催
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 
l 
l 
Ruby等の言語経験があると良い
これまでの事例ではRuby, PHPからの移行事例
が意外に多かった
本格移行の前に内部的な導入実験推奨
l 
APIサーバを作成してみる
l 
単体テストをScalaで記述してみる
移行メリット
l 
簡潔なコード
l 
l 
強力な静的型チェック
l 
l 
sbt, Specs 2, parser combinator, その他色々
並列・分散を意識したミドルウェア
l 
l 
Good-by NullPointerException
内部DSLを自作するのに適した文法
l 
l 
Javaの1/3∼1/4程度
e.g. Akka, Apache Spark
標準的なWebフレームワーク(Play 2)
移行リスク
l 
l 
学習コスト
コンパイルが遅い
l 
l 
速いマシンを買いましょう
Scalaコードのバイナリ後方互換性
l 
l 
l 
現在では、マイナーバージョンアップでは後方互換性を
壊さないようになった
メジャーバージョンが上がると後方互換性が保たれない
sbtのクロスビルドである程度リスクを吸収
今後のScala
l 
Scala 2.12
l 
l 
l 
l 
Java 8 Lambdaと親和性の高いコードを吐く
http://jp.scala-users.org/2014/06/30/scala-2.12roadmap.html
Scala Aida
l 
l 
Java 8が必須
標準ライブラリの見直し(継承を少なくするなど)
Scala Don Giovanni
l 
type memberに基づいた言語の単純化
l 
構文のクリーンアップ