Scalaでのプログラム開発

29
Scala でのプログラム開発 日本 Scala ユーザーズグループ代表っぽい ( ) 水島 宏太

description

エンジニアサポート新年会2012 CROSS 次世代言語CROSS『Scala、Haskell、PythonでのWeb開発の紹介』 でのScala発表スライドです。

Transcript of Scalaでのプログラム開発

Page 1: Scalaでのプログラム開発

Scala でのプログラム開発

日本 Scalaユーザーズグループ代表っぽい (仮 )

水島 宏太

Page 2: Scalaでのプログラム開発

自己紹介● 水島 宏太 ( 株式会社ユビレジ所属 )● プログラミング言語好き

自作言語をたまに作って公開 http://github.com/kmizu/onion

Page 3: Scalaでのプログラム開発

注: Scala 言語自体の紹介は割愛

Page 4: Scalaでのプログラム開発

1.開発環境● 処理系● IDE● ビルドツール● ライブラリ● Web App フレームワーク

Page 5: Scalaでのプログラム開発

処理系● Scala 2.9.1: 最新安定版● バージョン

Scala 2.9.X: こちらが主流 Scala 2.8.X: 一部プロジェクトが利用

☆ 今から始めるなら Scala 2.9.1

Page 6: Scalaでのプログラム開発

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

Eclipse (Scala IDE for Eclipse) IntelliJ IDEA (Scala Plugin) NetBeans (Scala Plugin)

☆ IntelliJ IDEA or Eclipse がオススメ

Page 7: Scalaでのプログラム開発
Page 8: Scalaでのプログラム開発
Page 9: Scalaでのプログラム開発
Page 10: Scalaでのプログラム開発

ビルドツール - sbt● Simple Build Tool (or Scala Build Tool)● Scala DSL としてビルド設定を定義

No more XML● 既存の maven リポジトリを活用可能

☆ 今からなら sbt ほぼ一択※ 0.11 系が主流 (0.7 系は一部で利用 )

Page 11: Scalaでのプログラム開発

例 (build.sbt)

name := "example"

version := "0.01"

scalaVersion := "2.9.1"

libraryDependencies += "org.scalatest" %% "scalatest" % "1.6.1" % "test"

Page 12: Scalaでのプログラム開発

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

ScalaTest, Specs, ScalaCheck Github にプロジェクトがある事が多い

● 既存の Java ライブラリ

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

Page 13: Scalaでのプログラム開発

Web App フレームワーク● Lift

フルスタック , View First● Play! (2.0 から Scala native サポート )

ホットデプロイ● Unfiltered

Scala の機能をフル活用● Scalatra

Ruby の Sinatra ライク☆ Wicket+Scala, Lift, Unfiltered

Page 14: Scalaでのプログラム開発

2. 導入メリット● 簡潔なコード + 強い静的型付け

対 Java 比で 1/3 〜 1/4 のコード量 コンパイル時のエラーチェック

● 既存の Java 資産をそのまま生かせる● 分散・並列処理のサポート

Akka (TypeSafe 社が公式に提供 )

☆ 特に Java 開発者は検討の価値あり

Page 15: Scalaでのプログラム開発

3.導入リスク● Java Platform の知識がほぼ必須

メリットと表裏一体● ( 国内での ) 開発者がまだ少ない● 学習曲線

最初が急カーブになりがち

☆ 部分的な導入を検討しよう 単体テスト記述など

Page 16: Scalaでのプログラム開発

4.適用事例 ( 海外 )● Twitter

バックエンドを中心に Scala を活用● LinkedIn● Foursquare

Scala + Lift● VMWare● Amazon.com

Page 17: Scalaでのプログラム開発

4.適用事例 ( 国内 )● 株式会社パテントビューロ

Scala + Lift を主力言語として開発● 有限会社 IT プランニング

NGMS 等● エムスリー株式会社

Unfilterd による Web API サーバ等● 芸者東京エンターテインメント株式会社

スマートフォン向けソーシャルアプリ開発

Page 18: Scalaでのプログラム開発

5.コミュニティの動向

Page 19: Scalaでのプログラム開発

海外コミュニティ● インターネット上

公式 ML([scala-language][scala-user]) など See http://www.scala-lang.org/node/1707

● 世界各地にコミュニティが存在 Bay Area Scala Enthusiasts (BASE) New York Scala Enthusiasts たくさんあるので以下略

Page 20: Scalaでのプログラム開発

国内コミュニティの動向● Scala 会議 ( 第 1 回 , 第 2 回 )● 日本Scala ユーザーズグループ (ScalaJP)

2 月 : 初心者向けハンズオン勉強会 http://groups.google.com/group/scala-jp

● Scala勉強会 in 渋谷● Akasaka.scala● 名古屋 Scala勉強会

Page 21: Scalaでのプログラム開発

6.Hello, World!(in Scalatra)

Page 22: Scalaでのプログラム開発

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

Page 23: Scalaでのプログラム開発

7.コレクションライブラリとパターンマッチング

Page 24: Scalaでのプログラム開発

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

Page 25: Scalaでのプログラム開発

パターンマッチング (in Unfiltered)

● エコープログラムval echo = unfiltered.filter.Planify { case Path(Seg(pathElement :: Nil)) => ResponseString(pathElement) case _ => ResponseString(" 処理できません ")}

unfiltered.jetty.Http.anylocal.filter(echo).run()

Page 26: Scalaでのプログラム開発

8 . Java to Scala

Page 27: Scalaでのプログラム開発

移行メリット● より簡潔なコード

Java の 1/3 程度● 強力な静的型チェック

Good-by NullPointerException● 内部 DSL を自作しやすい文法

e.g. sbt, Specs, Rogue● 並列・分散を意識したミドルウェア

e.g. Akka

Page 28: Scalaでのプログラム開発

移行リスク● 学習コスト

Java 文化とのギャップ● コンパイル時間の増大● ライブラリの後方互換性

後方互換性を壊す変更が入りやすい

Page 29: Scalaでのプログラム開発

移行すべき?● 開発チームによりけり

Ruby 等の言語経験があると良い● 部分的な ( 導入 /移行 )実験推奨

sbt に慣れる RESTful API サーバを作成してみる 単体テストを Scala で記述してみる