Scalaでのプログラム開発
-
Upload
kota-mizushima -
Category
Technology
-
view
3.271 -
download
5
description
Transcript of Scalaでのプログラム開発
Scala でのプログラム開発
日本 Scalaユーザーズグループ代表っぽい (仮 )
水島 宏太
自己紹介● 水島 宏太 ( 株式会社ユビレジ所属 )● プログラミング言語好き
自作言語をたまに作って公開 http://github.com/kmizu/onion
注: Scala 言語自体の紹介は割愛
1.開発環境● 処理系● IDE● ビルドツール● ライブラリ● Web App フレームワーク
処理系● Scala 2.9.1: 最新安定版● バージョン
Scala 2.9.X: こちらが主流 Scala 2.8.X: 一部プロジェクトが利用
☆ 今から始めるなら Scala 2.9.1
IDE● 既存 IDE のプラグインとして提供
Eclipse (Scala IDE for Eclipse) IntelliJ IDEA (Scala Plugin) NetBeans (Scala Plugin)
☆ IntelliJ IDEA or Eclipse がオススメ
ビルドツール - sbt● Simple Build Tool (or Scala Build Tool)● Scala DSL としてビルド設定を定義
No more XML● 既存の maven リポジトリを活用可能
☆ 今からなら sbt ほぼ一択※ 0.11 系が主流 (0.7 系は一部で利用 )
例 (build.sbt)
name := "example"
version := "0.01"
scalaVersion := "2.9.1"
libraryDependencies += "org.scalatest" %% "scalatest" % "1.6.1" % "test"
ライブラリ● Scala 標準ライブラリ● サードパーティの Scala ライブラリ
ScalaTest, Specs, ScalaCheck Github にプロジェクトがある事が多い
● 既存の Java ライブラリ
☆sbt で利用ライブラリへの依存性を記述
Web App フレームワーク● Lift
フルスタック , View First● Play! (2.0 から Scala native サポート )
ホットデプロイ● Unfiltered
Scala の機能をフル活用● Scalatra
Ruby の Sinatra ライク☆ Wicket+Scala, Lift, Unfiltered
2. 導入メリット● 簡潔なコード + 強い静的型付け
対 Java 比で 1/3 〜 1/4 のコード量 コンパイル時のエラーチェック
● 既存の Java 資産をそのまま生かせる● 分散・並列処理のサポート
Akka (TypeSafe 社が公式に提供 )
☆ 特に Java 開発者は検討の価値あり
3.導入リスク● Java Platform の知識がほぼ必須
メリットと表裏一体● ( 国内での ) 開発者がまだ少ない● 学習曲線
最初が急カーブになりがち
☆ 部分的な導入を検討しよう 単体テスト記述など
4.適用事例 ( 海外 )● Twitter
バックエンドを中心に Scala を活用● LinkedIn● Foursquare
Scala + Lift● VMWare● Amazon.com
4.適用事例 ( 国内 )● 株式会社パテントビューロ
Scala + Lift を主力言語として開発● 有限会社 IT プランニング
NGMS 等● エムスリー株式会社
Unfilterd による Web API サーバ等● 芸者東京エンターテインメント株式会社
スマートフォン向けソーシャルアプリ開発
5.コミュニティの動向
海外コミュニティ● インターネット上
公式 ML([scala-language][scala-user]) など See http://www.scala-lang.org/node/1707
● 世界各地にコミュニティが存在 Bay Area Scala Enthusiasts (BASE) New York Scala Enthusiasts たくさんあるので以下略
国内コミュニティの動向● Scala 会議 ( 第 1 回 , 第 2 回 )● 日本Scala ユーザーズグループ (ScalaJP)
2 月 : 初心者向けハンズオン勉強会 http://groups.google.com/group/scala-jp
● Scala勉強会 in 渋谷● Akasaka.scala● 名古屋 Scala勉強会
6.Hello, World!(in Scalatra)
import org.scalatra._class HelloWorldFilter extends ScalatraFilter { get("/") { <html> <body> <h1>Hello, world!</h1> </body> </html> }}
7.コレクションライブラリとパターンマッチング
コレクションライブラリcase class Person(name: String, age: Int)
val persons = List(Person(name="Kota Mizushima", age=28), …)
val 20歳未満の人の名前 = persons.filter(_.age < 20).map(_.name)
println(20歳未満の人の名前 .mkString(", "))
パターンマッチング (in Unfiltered)
● エコープログラムval echo = unfiltered.filter.Planify { case Path(Seg(pathElement :: Nil)) => ResponseString(pathElement) case _ => ResponseString(" 処理できません ")}
unfiltered.jetty.Http.anylocal.filter(echo).run()
8 . Java to Scala
移行メリット● より簡潔なコード
Java の 1/3 程度● 強力な静的型チェック
Good-by NullPointerException● 内部 DSL を自作しやすい文法
e.g. sbt, Specs, Rogue● 並列・分散を意識したミドルウェア
e.g. Akka
移行リスク● 学習コスト
Java 文化とのギャップ● コンパイル時間の増大● ライブラリの後方互換性
後方互換性を壊す変更が入りやすい
移行すべき?● 開発チームによりけり
Ruby 等の言語経験があると良い● 部分的な ( 導入 /移行 )実験推奨
sbt に慣れる RESTful API サーバを作成してみる 単体テストを Scala で記述してみる