Scalaã®ç¾ç¶ã¨ä»å¾
Transcription
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 構文のクリーンアップ