SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
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 で記述してみる

Weitere ähnliche Inhalte

Was ist angesagt?

株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状Kota Mizushima
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編Asami Abe
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaKazuhiro Sera
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門Yoshimura Soichiro
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekKazuhiro Sera
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみたAsami Abe
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Asami Abe
 
頑張りすぎないScala
頑張りすぎないScala頑張りすぎないScala
頑張りすぎないScalatakezoe
 
Skinny Meetup Tokyo 2 日本語スライド
Skinny Meetup Tokyo 2 日本語スライドSkinny Meetup Tokyo 2 日本語スライド
Skinny Meetup Tokyo 2 日本語スライドKazuhiro Sera
 
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jstakezoe
 
ネタじゃないScala.js
ネタじゃないScala.jsネタじゃないScala.js
ネタじゃないScala.jstakezoe
 
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)Eugene Yokota
 
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでAsami Abe
 
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティhirotakanosato
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-jaTIS Inc.
 
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksKazuhiro Sera
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.jsYuto Suzuki
 
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Haruki Okada
 
Contributing to Scala OSS from East Asia #ScalaMatsuri
 Contributing to Scala OSS from East Asia #ScalaMatsuri Contributing to Scala OSS from East Asia #ScalaMatsuri
Contributing to Scala OSS from East Asia #ScalaMatsuriKazuhiro Sera
 

Was ist angesagt? (20)

株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scala
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみた
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
頑張りすぎないScala
頑張りすぎないScala頑張りすぎないScala
頑張りすぎないScala
 
実戦Scala
実戦Scala実戦Scala
実戦Scala
 
Skinny Meetup Tokyo 2 日本語スライド
Skinny Meetup Tokyo 2 日本語スライドSkinny Meetup Tokyo 2 日本語スライド
Skinny Meetup Tokyo 2 日本語スライド
 
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
 
ネタじゃないScala.js
ネタじゃないScala.jsネタじゃないScala.js
ネタじゃないScala.js
 
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
 
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったで
 
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-ja
 
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
 
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
 
Contributing to Scala OSS from East Asia #ScalaMatsuri
 Contributing to Scala OSS from East Asia #ScalaMatsuri Contributing to Scala OSS from East Asia #ScalaMatsuri
Contributing to Scala OSS from East Asia #ScalaMatsuri
 

Ähnlich wie Scalaでのプログラム開発

Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!K Kinzal
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-PE-BANK
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?Takahiro YAMADA
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7TakumiIINO
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJavaTakashi Ito
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞYoshitaka Fujii
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたItaru Kitagawa
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
Scala界隈の近況
Scala界隈の近況Scala界隈の近況
Scala界隈の近況takezoe
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用Takuya Iwatsuka
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShiftEtsuji Nakai
 

Ähnlich wie Scalaでのプログラム開発 (20)

Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
Gradle handson
Gradle handsonGradle handson
Gradle handson
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
 
とりあえず使えるSBT
とりあえず使えるSBTとりあえず使えるSBT
とりあえず使えるSBT
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
Scala界隈の近況
Scala界隈の近況Scala界隈の近況
Scala界隈の近況
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
 
Trait in scala
Trait in scalaTrait in scala
Trait in scala
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
 

Mehr von Kota Mizushima

ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてKota Mizushima
 
こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラスKota Mizushima
 
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingAbout Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingKota Mizushima
 
Scala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful librariesScala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful librariesKota Mizushima
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力Kota Mizushima
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足Kota Mizushima
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit ScalaKota Mizushima
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-Kota Mizushima
 
ScalaのソースをEclipseでビルドしてみた
ScalaのソースをEclipseでビルドしてみたScalaのソースをEclipseでビルドしてみた
ScalaのソースをEclipseでビルドしてみたKota Mizushima
 
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Kota Mizushima
 
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Kota Mizushima
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 

Mehr von Kota Mizushima (20)

ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修について
 
kollectionの紹介
kollectionの紹介kollectionの紹介
kollectionの紹介
 
Macros in nemerle
Macros in nemerleMacros in nemerle
Macros in nemerle
 
Introduction to PEG
Introduction to PEGIntroduction to PEG
Introduction to PEG
 
Power of Scala
Power of ScalaPower of Scala
Power of Scala
 
こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラス
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
Scala is-unscared
Scala is-unscaredScala is-unscared
Scala is-unscared
 
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingAbout Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and Borrowing
 
Scala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful librariesScala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful libraries
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 
Scalaz
ScalazScalaz
Scalaz
 
ScalaのソースをEclipseでビルドしてみた
ScalaのソースをEclipseでビルドしてみたScalaのソースをEclipseでビルドしてみた
ScalaのソースをEclipseでビルドしてみた
 
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)
 
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 

Kürzlich hochgeladen

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Kürzlich hochgeladen (11)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

Scalaでのプログラム開発

  • 1. Scala でのプログラム開発 日本 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 がオススメ
  • 7.
  • 8.
  • 9.
  • 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 勉強会
  • 21. 6. Hello, World! (in Scalatra)
  • 22. import org.scalatra._ class HelloWorldFilter extends ScalatraFilter { get("/") { <html> <body> <h1>Hello, world!</h1> </body> </html> } }
  • 23. 7.コレクションライブラリと パターンマッチング
  • 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()
  • 26. 8 . Java to Scala
  • 27. 移行メリット ● より簡潔なコード  Java の 1/3 程度 ● 強力な静的型チェック  Good-by NullPointerException ● 内部 DSL を自作しやすい文法  e.g. sbt, Specs, Rogue ● 並列・分散を意識したミドルウェア  e.g. Akka
  • 28. 移行リスク ● 学習コスト  Java 文化とのギャップ ● コンパイル時間の増大 ● ライブラリの後方互換性  後方互換性を壊す変更が入りやすい
  • 29. 移行すべき? ● 開発チームによりけり  Ruby 等の言語経験があると良い ● 部分的な ( 導入 / 移行 ) 実験推奨  sbt に慣れる  RESTful API サーバを作成してみる  単体テストを Scala で記述してみる