Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for...

19
Scalaの現状と今後 日本Scalaユーザーズグループ 代表 水島 宏太

Transcript of Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for...

Page 1: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

Scalaの現状と今後

日本Scalaユーザーズグループ 代表 水島 宏太

Page 2: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

自己紹介 l  水島 宏太 (株式会社ドワンゴ所属) l  Scala関係のお仕事 l  プログラミング言語好き

l  自作言語を公開中(最近更新してない) http://github.com/onionlang/onion

Page 3: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

処理系 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

Page 4: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

IDE l  既存IDE のプラグインとして提供

l  Eclipse (Scala IDE for Eclipse) l  IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

Page 5: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! 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

Page 6: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

ライブラリ

l  Scala標準ライブラリ l  サードパーティのScalaライブラリ

l  ScalaTest, ScalaCheck, Scalazなど l  Githubにプロジェクトがある事が多い

l  既存のJavaライブラリ ☆ sbtで利用ライブラリへの依存性を記述

Page 7: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

例 (build.sbt)

name := "example" version := "0.01-SNAPSHOT" scalaVersion := "2.11.6" libraryDependencies += "junit" % "junit" % "4.7" % "test"

Page 8: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

Web Appフレームワーク

l  Play 2 u  Typesafe社製 u  独自のScala Template u  情報多数

l  Scalatra l  RubyのSinatraに類似

l  Skinny Framework l  日本人が開発者 ☆ 新しく始めるならPlay 2が無難

Page 9: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

4.適用事例(海外)

l  Twitter l  (おそらく)Scalaを世界で最も活用している企業

l  LinkedIn l  Foursquare l  The Guardian(英国のメジャーな新聞社) l  Netflix(動画配信サービス) l  その他多数

Page 10: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

4.適用事例(国内)

l  株式会社ドワンゴ l  Play 2を主に採用

l  エムスリー株式会社 l  Skinny Frameworkなどを使ったサービス

l  株式会社はてな l  芸者東京エンターテインメント株式会社 l  その他多数

Page 11: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

海外コミュニティ

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)

Page 12: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

国内コミュニティの動向

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関西ビギナーズ

Page 13: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

import org.scalatra._ class HelloWorldFilter extends ScalatraFilter { get("/") { <html> <body> <h1>Hello, world!</h1> </body> </html> } }

Page 14: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

コレクションライブラリ 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(", "))

Page 15: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

パターンマッチング (in Unfiltered) l  エコープログラム val echo = unfiltered.filter.Planify { case Path(Seg(pathElement :: Nil)) => ResponseString(pathElement) case _ => ResponseString("処理できません") } unfiltered.jetty.Http.anylocal.filter(echo).run()

Page 16: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

移行すべきかどうか

l  (もちろん)開発チームによりけり l  Ruby等の言語経験があると良い l  これまでの事例ではRuby, PHPからの移行事例が意外に多かった

l  本格移行の前に内部的な導入実験推奨 l  APIサーバを作成してみる l  単体テストをScalaで記述してみる

Page 17: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

移行メリット

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)

Page 18: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

移行リスク

l  学習コスト

l  コンパイルが遅い l  速いマシンを買いましょう

l  Scalaコードのバイナリ後方互換性 l  現在では、マイナーバージョンアップでは後方互換性を壊さないようになった

l  メジャーバージョンが上がると後方互換性が保たれない l  sbtのクロスビルドである程度リスクを吸収

Page 19: Scalaの現状と今後qcontokyo.com/tokyo-2015/data_2015/img/C5-3-1... · Eclipse (Scala IDE for Eclipse) ! IntelliJ IDEA (+ Scala Plugin) ☆ IntelliJ IDEA + Scala Pluginがオススメ

今後の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  構文のクリーンアップ