Scalaでのプログラム開発
Upcoming SlideShare
Loading in...5
×
 

Scalaでのプログラム開発

on

  • 3,614 views

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

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

Statistics

Views

Total Views
3,614
Views on SlideShare
3,558
Embed Views
56

Actions

Likes
6
Downloads
7
Comments
0

8 Embeds 56

http://a0.twimg.com 44
http://us-w1.rockmelt.com 3
https://twitter.com 3
http://twicli.neocat.jp 2
http://paper.li 1
http://tweetedtimes.com 1
https://si0.twimg.com 1
https://abs.twimg.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 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="KotaMizushima", 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 で記述してみる