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