scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/c5-3-1... · eclipse (scala ide for...
TRANSCRIPT
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 構文のクリーンアップ