Upload
yoshitaka-fujii
View
116
Download
0
Embed Size (px)
Citation preview
3
Scalaをはじめて、1年3ヶ月が経ち、それなりに酸いも甘いもあれしてきたので、そろそろその辺りふまえて語ってみて、もしかしたらScalaに興味を持ってもらえて、同じチームでScalaで開発したいねんって直訴する人が出てきたりして、仲間が増えるとうれしいなーなんて狙いを
持って話します。
3
4
とはいえ、私は、言語マニアではありませんので、Scalaはこんな高尚な言語だが、こっちの言語のほーがここは優れていて、といった議論を展開したいわけではなく、ただ純粋にScalaやっててここ楽しいなーっ
ておもうあたりを紹介させていただければと思ってます。
6 . 3
6 . 4
一昔前は、全て手でダウンロードしてきた
ライブラリもSVNとかでバージョン管理してた
Pathを間違うと読み込まれないことがあった
最近は、Pythonでpip、Rubyでgem、C#でnugetみたいなやつある
NodeJsならnpmとか
6 . 5
// Specs2val specs2Core = "org.specs2" %% "specs2-core" % "3.6"val specs2Mock = "org.specs2" %% "specs2-mock" % "3.6"val specs2JUnit = "org.specs2" %% "specs2-junit" % "3.6"
// Modules4Lambdaval modulesVersion = "0.10.0"val modulesLambda4Kinesis = "com.hoge" %% "modules-lambda-aws-lambda4kinesis" % modulesVersionval modules3 = "com.hoge" %% "modules-lambda-aws-s3" % modulesVersionval modulesFirehose = "com.hoge" %% "modules-lambda-aws-firehose" % modulesVersion
// spray-jsonval sprayJson = "io.spray" %% "spray-json" % "1.3.2"
6 . 7
val anticorruptionDeps = Seq( modulesLambda4Kinesis, modules3, modulesFirehose, sprayJson, specs2Core % Test, specs2Mock % Test, specs2JUnit % Test)
val installedapplicationDeps = Seq( specs2Core % Test, specs2Mock % Test, specs2JUnit % Test)
7 . 1
2/7 AkkaScalaとJavaのApache2ライセンスで提供されているOSSのライブラリ
アクターモデルを適用したスケーラビルティや耐障害性に優れた並行処理が書けるライブラリ
Scalaなら並行処理が可読性高く書ける
7 . 2
class CheckService(check: ActorRef) extends AkkaHttpService with DefaultJsonFormats {
import akka.pattern.ask import scala.concurrent.duration._
implicit val timeout = Timeout(30.seconds)
implicit val checkRequestFormat = jsonFormat2(CheckRequest)
val route = postCheck
def postCheck = path("check") { originalHeaderExtract { header => post { entity(as[CheckRequest]) { request => onSuccessEx { (check ? convert2Input(header, request)).mapTo[ApiGatewayResponse] } }
7 . 2
7 . 3
class CheckActor extends Actor with ActorLogging { import CheckActor._
override def receive: Receive = { case m: InputModel => { val input = convert2InputStream(m) val output = execute(input)(new App().handleRequest) sender ! output } }}
7 . 3
8
3/7 traitMixin
部品化、再構成、リファクタリング、Unitテストコード
traitで書いておくと、後からどうとでもできる
多種多様な新たなデザインパターンを生み出している
DIがシンプルに実現できる
9 . 2
http://qiita.com/seratch@github/items/3be26b584f3d74aa1150https://github.com/seratch/sadamasashi-compiler
11
6/7 AWS相性が良い
AWS Java SDK がそのまま使える
なんなら、Scalaで扱いやすく、ラップできる
ラッパー書くのも、これまた楽しい
Scalaがあるのに、Javaでやる意味がわからん
21
エントリーは !!こちら
http://skug.connpass.com/event/38349/