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
構文のクリーンアップ
© Copyright 2025