Slide 1

Slide 1 text

Scala x AdTech Studio Scalaͷ(Զత)ΠέͯΔ
 ϥΠϒϥϦ঺հLT

Slide 2

Slide 2 text

஫ҙ - ScalaͰͷ։ൃܦݧ͋Δਓ޲͖ͷ಺༰ - Akkaͷ࿩͸͠·ͤΜ

Slide 3

Slide 3 text

ϥΠϒϥϦ঺հ

Slide 4

Slide 4 text

Refined - ܕʹಠࣗͷ੍໿ΛՃ͑ΒΕΔϥΠϒϥϦ - Haskellͷಉ໊ɾಉػೳͷϥΠϒϥϦ
 ʹΠϯεύΠΞ͞ΕͨΒ͍͠

Slide 5

Slide 5 text

Refined type UserId = Int Refined Positive val userId: UserId = 0 // compile error type Probability = Double Refined Closed[W.`0.0`.T, W.`1.0`.T] val p: Probability = 1.2 // compile error

Slide 6

Slide 6 text

PureConfig - ઃఆϑΝΠϧಡΈࠐΈ༻ϥΠϒϥϦ - TypesafeConfigͷϥούʔ - case classΠϯελϯεʹϚοϓͯ͘͠ΕΔ - HOCON, JSONʹରԠ - Refinedʹ΋ରԠ

Slide 7

Slide 7 text

PureConfig // development.conf (HOCONܗࣜ)
 include “application.conf” redis { host: “127.0.0.1” port: 6379 } // Config.scala case class Config(redis: RedisConfig) case class RedisConfig(host: String, port: Int) val confPath = ConfigFactory.load(“development.conf”) val config = loadConfig[Config](confPath).get assert(config.redis.host == “127.0.0.1”) assert(config.redis.port == 6379)

Slide 8

Slide 8 text

circe - JSONΛScalaͷΫϥεʹϚοϐϯά͢Δ
 - json4sΈ͍ͨͳ - ʮαʔγʔʯͱಡΉ - core෦෼͸reflectionͳ͠Ͱ࣮૷ - ύϑΥʔϚϯεΛͪΌΜͱܭଌɾߟྀ࣮ͨ͠૷ - RefinedʹରԠ

Slide 9

Slide 9 text

json4s΍ΊΑ͏ ͱ༗໊ͳ͋ͷํ΋ݴ͓ͬͯΓ·͢ - Twitter্Ͱʮ@xuwei_k json4sʯͰݕࡧ

Slide 10

Slide 10 text

Finch - finagle্Ͱಈ͘HTTP APIΛ࡞ΔͨΊͷ
 ϧʔςΟϯάϥΠϒϥϦ - circeͳͲͱͷ࿈ܞ͕ྑ͍ - ଎͍

Slide 11

Slide 11 text

Finch case class User(name: String, age: Int) val getUser: Endpoint[User] = get(“user” :: int) { userId: Int => val user: User = User.getById(userId) user } val createUser: Endpoint[Boolean] = post(“user” :: jsonBody[User]) { user: User => // create user true } Http.server.serve(“:80”, (getUser :+: createUser).toService)

Slide 12

Slide 12 text

doobie - RDBMS΁ͷΫΤϦ݁ՌΛऔಘ - ScalaͷΫϥεʹϚοϐϯά΋Մ - ORMͰ͸ͳ͍
 - SQL͸ࣗ෼Ͱॻ͔ͳ͍ͱ͍͚ͳ͍ - ΋͏͙͢RefinedʹରԠ

Slide 13

Slide 13 text

doobie sql”SELECT * FROM users WHERE age = $age” .query[String] .process .take(5) .list .transact(xa) .unsafePerformIO .foreach(println)

Slide 14

Slide 14 text

doobie sql”SELECT * FROM users WHERE age = $age” .query[String] .process .take(5) .list .transact(xa) .unsafePerformIO .foreach(println) ͜ͷ෦෼͸Prepared StatementΛ
 ࢖ͬͯจࣈྻૠೖ͞ΕΔͷͰɺ
 SQLΠϯδΣΫγϣϯʹ΋ڧ͍


Slide 15

Slide 15 text

Cats - ؔ਺ϓϩάϥϛϯά༻ϥΠϒϥϦ - ScalazͷޙൃϥΠϒϥϦ - ༗໊ϥΠϒϥϦ͸ Scalaz -> Cats
 ʹ৐Γ׵͑ͭͭ͋Δ(ؾ͕͢Δ)

Slide 16

Slide 16 text

ࣾ಺Ͱ͸͜Μͳ
 ϓϧϦΫΤετ΋…

Slide 17

Slide 17 text

ͦͷଞ

Slide 18

Slide 18 text

Typelevel.scala
 (ίϛϡχςΟ) - Refined, circe, Finch
 doobie, Cats
 ͳͲͷϥΠϒϥϦ͕ࢀՃ - ͜͜ʹ͋ΔϥΠϒϥϦ͸
 Ұ௨Γ͓͓͖͍͑ͯͨ͞

Slide 19

Slide 19 text

No content