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

Scalaでのプログラム開発

  • 3,120 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,120
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
7
Comments
0
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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