Slide 1

Slide 1 text

%FWFMPQFST*0 # ߥҪ༞ี ⡥$MBTTNFUIPE *OD ೥݄೔ 4DBMB .PCJMF#BDLFOEPO"84 

Slide 2

Slide 2 text

#cmdevio2016 #B

Slide 3

Slide 3 text

whoami • Yusuke Arai • Classmethod (2014/11~) • Mobile Backend API Team (2015/02~) • AWS / Scala / Javascript / android • dev.classmethod.jp/author/arai-yusuke

Slide 4

Slide 4 text

Today's topics • Scalaͷoverview • ScalaΛ࢖ͬͨϞόΠϧόοΫΤϯυAPI • ͳͥAWSωΠςΟϒͷ࣌୅ʹScala͕ඞཁ͔ • How to આಘ your client in "Scala࢖͍·͢!"

Slide 5

Slide 5 text

Today's topics • Scalaͷoverview • ScalaΛ࢖ͬͨϞόΠϧόοΫΤϯυAPI • ͳͥAWSωΠςΟϒͷ࣌୅ʹScala͕ඞཁ͔ • How to આಘ your client in "Scala࢖͍·͢!"

Slide 6

Slide 6 text

Scalaͷoverview

Slide 7

Slide 7 text

Martin Odersky Deutscher Informatiker / 1958~

Slide 8

Slide 8 text

Scala • JVMݴޠʢJavaόΠτίʔυΛੜ੒ʣ • JavaͷطଘίʔυΛ௚઀ࢀরՄೳ • ڧ͍੩తܕ෇͚ݴޠ • ໊લ͸"Scalable"͔Β

Slide 9

Slide 9 text

Scala ͷจ๏ • ηϛίϩϯͷͳ͍JavaͬΆ͘΋ॻ͚Δ • RubyͬΆ͘΋ॻ͚Δ • هड़ྔ͕গͳ͍ • ৄ͘͠͸άά͍ͬͯͩ͘͞m(_ _)m

Slide 10

Slide 10 text

Scala ͷ΢ιɾϗϯτ

Slide 11

Slide 11 text

Αࣖ͘ʹ͢Δ࿩ • ؔ਺ܕͷϓϩάϥϛϯάݴޠ • Rubyʹ͍ۙͷͰLLܦݧऀͳΒָউ • Java͕Θ͔Ε͹͙͢ʹॻ͚ΔΑ͏ʹͳΔ • ΤίγεςϜʢPlayʣ͸RailsϥΠΫ

Slide 12

Slide 12 text

શ෦΢ιͰ͢ • ؔ਺ܕͷϓϩάϥϛϯάݴޠ • Rubyʹ͍ۙͷͰLLܦݧऀͳΒָউ • Java͕Θ͔Ε͹͙͢ʹॻ͚ΔΑ͏ʹͳΔ • ΤίγεςϜʢPlayʣ͸RailsϥΠΫ

Slide 13

Slide 13 text

Scala ͷϗϯτ

Slide 14

Slide 14 text

Scalaͷϗϯτ • ચ࿅͞ΕͨOOPݴޠ
 ͨͩ͠HaskellͷӨڹΛڧ͘ड͚͓ͯΓɺؔ਺ܕͷ ॻ͖ํͰॻ͘͜ͱ΋Մೳʹͳ͍ͬͯΔ • JVM΍Javaݴޠ΁ͷཧղ͕ඞཁ • ΤίγεςϜʢPlayʣ͸ڧྗͳܕγεςϜΛ಺แ͠
 FP, FRPΛલఏͱ͍ͯ͠Δ

Slide 15

Slide 15 text

Not ؔ਺ܕݴޠ • ݁ߏ͋Δצҧ͍ʮScala͸ؔ਺ܕݴޠDA!ʯ • Scalaࣗମ͸ચ࿅͞ΕͨOOPݴޠ • ͨͩ͠७ਮؔ਺ϕʔεͷ։ൃΛڧ͘αϙʔτͯ͠Δ • Haskellͱಉ͡ॻ͖ํΛ͠Α͏ͱࢥ͑͹Մೳ
 ओͳཧ༝ͱͯ͠Scala͕ΞυϗοΫଟ૬ੑΛදݱͰ͖ Δ͔Β

Slide 16

Slide 16 text

Java/JVMͷཧղ͕ඞཁ • JVM͕ܕফڈϞσϧͰ͋Δ͜ͱʢॏཁʣ • Generics͸Java 1.5Ͱ௥Ճ͞Εͨ͜ͱ, ClassManifestͷڍಈ, etc… • Javaͷจ๏ͳͲΑΓ΋ɺJavaͷྺ࢙ʹର͢Δ
 ཧղ͕ඞཁ

Slide 17

Slide 17 text

☓ LL࿩ऀͳΒೃછΈ΍͍͢ • Scala͸altJavaͱͯ͠΋ར༻Ͱ͖Δ͕
 ͦΕ͸"Scalaݴޠ"ʹݶͬͨ࿩ͰɺΤίγεςϜ͕ͦΕΛ
 ڐ͢ͱ͸ݶΒͳ͍ • Play Framework 2.4 ͸ڧྗͳܕγεςϜΛ಺෦ʹ࣋ͪɺ
 ਵॴͰܕγεςϜ΁ͷཧղΛཁٻ͢Δɻ • ྫ: JsResult ͸ Applicative Functor
 Writes ͸ Contravariant Functor

Slide 18

Slide 18 text

ࢹ఺Λม͑Δ

Slide 19

Slide 19 text

Scala Λ࢖͍͚ͬͯ͹…… • JVM΍Javaͷྺ࢙ʹ͍ͭͯਂ͘ཧղͰ͖Δ • ؔ਺ܕͷάουϓϥΫςΟε͕औΓࠐΊΔ • ܕΫϥεɺ୅਺తσʔλܕɺؔखɺϞφυ
 ͳͲͷమ൘ύλʔϯ͕࢖͑ΔΑ͏ʹͳΔ • ৽͠ΊͷݴޠͰ͸͍͍ͩͨˢ͕Ұ෦·ͨ͸શ෦࢖͑Δ
 ྫ͑͹Swiftʹ΋flatMapϝιου͕༻ҙ͞Ε͍ͯ·͢ • ৽͍͠ػೳΛ࢖͍͜ͳ͠඼࣭ͷߴ͍ΞϓϦΛ࡞Δ͜ͱ͕Մೳʹʂ


Slide 20

Slide 20 text

Scalaͷoverview ͸ ͜Μͳײ͡Ͱ͢

Slide 21

Slide 21 text

Today's topics • Scalaͷoverview • ScalaΛ࢖ͬͨϞόΠϧόοΫΤϯυAPI • ͳͥAWSωΠςΟϒͷ࣌୅ʹScala͕ඞཁ͔ • How to આಘ your client in "Scala࢖͍·͢!"

Slide 22

Slide 22 text

ScalaΛ࢖ͬͨ
 ϞόΠϧόοΫΤϯυAPI

Slide 23

Slide 23 text

ϞόΠϧAPIαʔόʔΛ࡞ͬͨ • डୗϞόΠϧΞϓϦҊ݅ • ϦϦʔεޙ͸C100K͕΄΅ؒҧ͍ͳ͍ • ҆ఆͯ͠ࡹͨ͘ΊʹϑϩϯτAPIαʔόʔʹ͸
 Play-ScalaΛ࠾༻ • όοΫΤϯυ΋AkkaΛ࢖͍͍ͨͱ͍͏ཧ༝͔Β
 Play-Scalaʹͨ͠

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

։ൃͷਐΊํ • ϑϧͰςετॻ͘
 ʢશΫϥεϢχοτςετɺAPIຖ࠷௿̍݁߹ςετʣ • pull reqϨϏϡʔඞਢ • Scalaz΍Cats͸࢖Θͳ͍ • ࠓϦϦʔεલͳͷͰύϑΥʔϚϯεɾӡ༻ʹ͍ͭͯͷ͜ͱ͸Կͱ΋ ݴ͑ͳ͍ʢϦϦʔεͰ͖͍ͯͨΒӡ༻ϊ΢ϋ΢Λ͓఻͔͑ͨͬͨ͠Ͱ͢……ʣ

Slide 26

Slide 26 text

։ൃͰײͨ͜͡ͱ

Slide 27

Slide 27 text

͑͛ͭͳ͍΄Ͳॻ͖΍͍͢ • ϘΠϥʔϓϨʔτίʔυͷগͳ͞ʹҺͼٽ͘ • ݴޠͦͷ΋ͷ͕ImmutableΛਪͯ͘͠ΕͯΔ ͜ͱͷ༗Γ೉ΈΛࢥ͍஌Δ • ผʹΧοίΑ͘ॻ͜͏ͱͯ͠ͳ͍ͷʹؔ਺͸
 ͍͍ͩͨ5ߦҎ಺ʹ·ͱ·Δ

Slide 28

Slide 28 text

ΊͬͪΌಡΈ΍͍͢ • ʮScala͸ه߸͹͔ͬͰಡΈʹ͍͘ʯͬͯ
 ͱ͓͍ੲʹฉ͍ͨ͜ͱ͕͋ͬͨ • ͦΕ͸௒HaskellͬΆ͘ॻ͍ͨ৔߹ͷ࿩ͩͬͨ • γϯϓϧʹॻ͍͍ͯ͘ͱӳޠͬΆ͍จ຺Λ࣋ͭ • pull reqϨϏϡʔ͕ḿΔ

Slide 29

Slide 29 text

ͳΜͱͳ͘ӳޠͬΆ͍ͷͰ͢

Slide 30

Slide 30 text

Akka • ࠓճ͸ϫʔΧʔΛAkka SchedulerͰ࣮૷ • AkkaͷFault ToleranceΛങͬͨ • Amazon SQS΍Amazon SNSͱ͏·݁͘߹͢Δ • DynamoDB Stream΍Kinesisͱ͚ͬͭͨ͘Β
 ઈରָ͍͠ͰΑ͢Ͷ

Slide 31

Slide 31 text

AWS Java SDK͕࢖͑Δ • AWSͷϑϧϚωʔδυαʔϏεʢCognito΍DynamoDBʣ ͱ΍ΓऔΓ͢ΔΞϓϦΛ࡞Δ৔߹ɺ
 AWS SDKͷυΩϡϝϯςʔγϣϯ۩߹͸ࢮ׆໰୊ • AWS Java SDKʹ͸Կͷ৺഑΋ͳ͔ͬͨ • Scalaͷݴޠࢥ૝ͱͯ͠ʮmutable࣮૷ΛimmutableͳΠϯ λϑΣʔεͰӅṭʯͱ͍͏ͷ͕͋Δ
 ˠ AWS Java SDK ͸Πϯϑϥ૚ͰӅṭͰ͖ΔͷͰແ໰୊

Slide 32

Slide 32 text

ΞʔΩςΫνϟͷར఺ʢ1ʣ • ७ਮؔ਺ܕݴޠͩͱmainؔ਺ͷ֎ଆɺͭ·Γࣗ෼Ͱίϯτ ϩʔϧͰ͖ͳ͍ྖҬ·Ͱ෭࡞༻Λ஗Ԇ͠ͳ͚Ε͹ͳΒͳ͍ ʢ͜ͱ͕ଟ͍ʣ • ScalaͰ͸෭࡞༻Λى͜͢λΠϛϯάΛࣗ෼Ͱ
 ίϯτϩʔϧͯ͠OK
 ※ Haskellʹ΋unsafePerformIOͱ͔͸͋Γ·͕͢…… • ຊ౰ʹ஗Ԇ͢΂͖෭࡞༻ʢυϝΠϯϩδοΫ͕ى͜͢෭࡞༻ʣ ͱͦΕҎ֎ʢϩάͱ͔ʣΛผͷ΋ͷͱͯ͠ѻ͏͜ͱ͕༰қ ιϑτ΢ΣΞ

Slide 33

Slide 33 text

ΞʔΩςΫνϟͷར఺ʢ2ʣ • ݴޠϨϕϧͰDIΛڧ͘αϙʔτ͢ΔͷͰ
 DIPୡ੒ͷલఏ͕͋ΔΞʔΩςΫνϟͱೃછΉ • Layered Architecture, Onion Architecture… • DDDͳͲͰΑ͘࠾༻͞ΕΔΞʔΩςΫνϟ ιϑτ΢ΣΞ

Slide 34

Slide 34 text

ଓ͖͸·ͨޙͰ
 ࣌ؒʹ༨༟͕͋Ε͹

Slide 35

Slide 35 text

Today's topics • Scalaͷoverview • ScalaΛ࢖ͬͨϞόΠϧόοΫΤϯυAPI • ͳͥAWSωΠςΟϒͷ࣌୅ʹScala͕ඞཁ͔ • How to આಘ your client in "Scala࢖͍·͢!"

Slide 36

Slide 36 text

ͳͥAWSωΠςΟϒ࣌୅ʹ Scala͕ඞཁ͔

Slide 37

Slide 37 text

ϚΠΫϩαʔϏε ΞʔΩςΫνϟ

Slide 38

Slide 38 text

ϚΠΫϩαʔϏεΞʔΩςΫνϟ • Ұͭͷ໾ׂΛ΋ͬͨૄ݁߹Ͱখ͞ͳαʔϏε ʢίϯϙʔωϯτʣͷू߹Ͱେ͖ͳαʔϏε ʢΞϓϦέʔγϣϯʣΛߏங͢Δ • ͦΕͧΕͷαʔϏε͸Dockerίϯςφ΍EC2 Πϯελϯεͱͯ͠දݱ͞ΕΔ • ϚΠΫϩαʔϏεಉ࢜͸HTTPSͳͲͰ௨৴

Slide 39

Slide 39 text

© NGINX via https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/

Slide 40

Slide 40 text

࣮ࡍͲ͏ͳͷ • ScalaMatsuri 2016Ͱ৭ʑͳηογϣϯΛ
 ฉ͍ͯདྷ·͕ͨ͠ʮϦΞΫςΟϒʯ΍ʮϚΠΫϩ αʔϏεʯʹ·ͭΘΔηογϣϯ͕ଟ਺ • ೔ຊͷํΑΓ΋ւ֎ͷํͷηογϣϯଟ͠
 ˠ ւ֎Ͱ͸طʹσϑΝΫτʹͳ͖ͬͯͯͦ͏ • “ϦΞΫςΟϒ͸ResiliencyͷͨΊͷखஈͰ͋Δ”

Slide 41

Slide 41 text

ߋʹઌΛோΊΔ

Slide 42

Slide 42 text

ͦͷઌʹ߇͑Δͷ͸ ͕ओମͷΞʔΩςΫνϟ

Slide 43

Slide 43 text

AWS Lambda ͕ओମ΁ • όοΫΤϯυʹ͋Δmicro services΁ͷ
 ΦʔέετϨʔγϣϯͰ͸ͳ͍ • υϝΠϯϩδοΫ͕AWS Lambda Functionͱ
 ͯ͠දݱ͞ΕΔαʔόʔϨεΞʔΩςΫνϟ • ୯Ґ͕ micro services ͔Β functions ΁

Slide 44

Slide 44 text

Evolution of Compute – Public Cloud Infrastructure Instances Application code ©Amazon Web Services via http://www.slideshare.net/AmazonWebServices/arc308-the-serverless-company-using-aws-lambda/

Slide 45

Slide 45 text

Evolution of Compute – Containers Infrastructure Instances Application code Containers ©Amazon Web Services via http://www.slideshare.net/AmazonWebServices/arc308-the-serverless-company-using-aws-lambda/

Slide 46

Slide 46 text

Evolution of Compute – Serverless Application code ©Amazon Web Services via http://www.slideshare.net/AmazonWebServices/arc308-the-serverless-company-using-aws-lambda/

Slide 47

Slide 47 text

࣮ࡍͲ͏ͳͷ • AWS re:Invent 2015ͰϚΠΫϩαʔϏεؔ࿈ͷηο γϣϯ͕ଟ͘ൃද͞ΕΔதͰɺੈքʹ޲͚ͯൃ৴͞Ε ͨ֓೦ʢൃද͞Εͨͷ͸͢Ͱʹ࣮ફ͞Εͨ΋ͷʣ • ͍ͣΕɺඞͣདྷΔαʔόʔϨεͷະདྷΛ৅௃͍ͯ͠Δ • ͦͷ”ະདྷ”͕དྷΔ೔ͷ͜ͱΛɺ
 ݸਓతʹ”Lambda Xσʔ”ͱݺΜͰ·͢

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

ਂΈʹμΠϒ͍ͨ͠ํ͸ฐࣾ୮಺ͷهࣄΛͥͻνΣοΫʂ reinvent2015 ϚΠΫϩαʔϏε

Slide 50

Slide 50 text

For Your Information

Slide 51

Slide 51 text

2015.02 Lambda in VPC!! ©Amazon Web Services via http://aws.typepad.com/aws_japan/2016/02/access-resources-in-a-vpc-from-your- lambda-functions.html

Slide 52

Slide 52 text

ͯ͞

Slide 53

Slide 53 text

ͰΞϓϦέʔγϣϯ
 Λ։ൃ͢Δ৔߹ͷબ୒ࢶ

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

Scala in AWS Lambda • Lambda͸ScalaͰॻ͚·͢ɻ͜Ε͸Scalaʹݶͬͨ࿩ Ͱ͸ͳ͘ɺJVMݴޠͳΒOKɻ • ͬ͟ͱࢼͨ͠ײ͡Ͱ͸ແཧ΍Γײ͕ͰΔ͜ͱ΋ͳ͘ɺ ͍͍ײ͡ʹॻ͚·͢ɻ • ٕज़ௐࠪΛਐΊ͍ͯͯɺ΋͏গ͠φϨοδ͕ཷ·Ε͹
 ͍ۙ͏ͪʹຊ൪ద༻ՄೳʹͳΓͦ͏ɻ

Slide 58

Slide 58 text

Scala in AWS Lambda • Lambda͸ScalaͰॻ͚·͢ɻ͜Ε͸Scalaʹݶͬͨ࿩ Ͱ͸ͳ͘ɺJVMݴޠͳΒOKɻ • ͬ͟ͱࢼͨ͠ײ͡Ͱ͸ແཧ΍Γײ͕ͰΔ
 ͜ͱ΋ͳ͘ɺ͍͍ײ͡ʹॻ͚·͢ɻ • ٕज़ௐࠪΛਐΊ͍ͯͯɺ΋͏গ͠φϨοδ͕ཷ·Ε͹
 ͍ۙ͏ͪʹຊ൪ద༻ՄೳʹͳΓͦ͏ɻ ͜ͷลΓΛ۷ΓԼ͛Δ࿩Λ݄̑ʹ෱ԬͰ͠·͢ʂ
 ʲScala෱Ԭ2016ʳͰݕࡧݕࡧʂ

Slide 59

Slide 59 text

ͳͥScalaΛબͿ΂͖͔ • AWS LambdaΛ࢖͏্Ͱ৐Γӽ͑ͳ͚Ε͹ͳΒͳ ͍ͷ͸”݁߹ςετͷॻ͖ʹ͘͞” • ݁߹ςετΨϯΨϯॻ͍ͯͽΎΜͽΎΜਐΊΑ͏ͥ
 ͱ͍͏จԽͱ͸͏·͘߹க͠ͳ͍ • ϢχοτςετͷΈͰΑΓଟ͘ͷ৺഑ࣄΛ
 ղফ͢Δʹ͸Ͳ͏͢΂͖͔

Slide 60

Slide 60 text

ͳͥScalaΛબͿ΂͖͔ • AWS LambdaΛ࢖͏্Ͱ৐Γӽ͑ͳ͚Ε͹ͳΒͳ ͍ͷ͸”݁߹ςετͷॻ͖ʹ͘͞” • ݁߹ςετΨϯΨϯॻ͍ͯͽΎΜͽΎΜਐΊΑ͏ͥ
 ͱ͍͏จԽͱ͸͏·͘߹க͠ͳ͍ • ϢχοτςετͷΈͰΑΓଟ͘ͷ৺഑ࣄΛ
 ղফ͢Δʹ͸Ͳ͏͢΂͖͔ ڧ͍੩తܕγεςϜͷݎ࿚͞ͱ ؔ਺ܕͷҟৗܥදݱྗΛۦ࢖͢΂͠ʂ

Slide 61

Slide 61 text

rapture.core.Result via https://github.com/propensive/rapture

Slide 62

Slide 62 text

scalaz.\/ via https://github.com/scalaz/scalaz ʢEitherT΋͋ΔΜͩΑʂʣ

Slide 63

Slide 63 text

scala.util.Either via https://github.com/scala/scala

Slide 64

Slide 64 text

ؔ਺ܕͷҟৗܥදݱྗ • ͋ΔৼΔ෣͍Λςετ͢Δʹ͋ͨΓɺͦͷৼ Δ෣͍͕ى͜͢෭࡞༻ࠐΈͰςετ͢ΔͷͰ ͸ͳ͘ɺҟৗܥ΍IOΞΫηεΛදݱՄೳͳܕ Λѻ͍ɺ෭࡞༻ͷൃੜՕॴΛΪϦΪϦ·ͰΞ ϓϦέʔγϣϯͷ֎ଆʹ࣋ͪӽ͢Α͏ʹ͢Δ ͜ͱͰɺ෭࡞༻ൃੜ௚લͷ஋͕ਖ਼͍͜͠ͱ ʢ==ʣΛอূ͢Δςετ͕ॻ͚Δɻ

Slide 65

Slide 65 text

ݱঢ়ͷࡉ͔͍Cons • Artifact ZIPʹ50MB੍ݶ͕͋Δ
 → ࡞ΓํΛ޻෉͢Δඞཁ͕͋Δ΋ͷͷɺ
 ɹ ϚΠΫϩαʔϏεͷߟ͑ํΛܧঝ͢ΔͳΒ͹
 ɹ ରॲՄೳͳ੍ݶ • JVMͷॳճىಈίετ͕Φʔόʔϔουʹʁ
 ˠ Lambda in VPCͳΒ͹ENIίετ΋͋ΔͷͰɺ
 ɹ ॳճ͸஗͍΋ͷͱׂΓ੾Δ

Slide 66

Slide 66 text

Ұ൪఻͔͑ͨͬͨࣄͳͷͰ ͪΐͬͱৼΓฦΓ

Slide 67

Slide 67 text

ͳͥAWS࣌୅ʹScala͔ • Lambda Xσʔ͸ඞͣདྷΔ • େن໛ΞϓϦΛLambdaͰ࡞Δ೔͕͘Δ • AWS݁߹ςετΛແཧ΍Γॻ͘ͷͰ͸ͳ͘
 ϢχοτςετͰ୲อͰ͖ΔྖҬΛ૿΍͢ • ͦ͏͍͏ॻ͖ํΛڧ͘αϙʔτ͍ͯ͠Δͷ͕Scala

Slide 68

Slide 68 text

Today's topics • Scalaͷoverview • ScalaΛ࢖ͬͨϞόΠϧόοΫΤϯυAPI • ͳͥAWSωΠςΟϒͷ࣌୅ʹScala͕ඞཁ͔ • How to આಘ your client in "Scala࢖͍·͢!"

Slide 69

Slide 69 text

How to આಘ your client in "Scala࢖͍͍ͨ!"

Slide 70

Slide 70 text

"Play-ScalaΛ࢖͍·͢!" ͱ͍͏ఏҊΛ͢ΔͨΊʹ͸ ͍͔ͭ͘ͷFrameworkͱ ൺֱݕ౼Λߦ͏ඞཁ͕͋ͬͨ

Slide 71

Slide 71 text

୅දతFramework • Ruby on Rails (Ruby) • Express (Node.js) • Laravel (PHP) • Play Framework (Java) • etc

Slide 72

Slide 72 text

લḗઓ vs Rails, Node, PHP

Slide 73

Slide 73 text

vs Rails, Node, PHP • Play-Scalaͱ͸໰୊ղܾͷϞσϧ͕͸͖ͬΓ
 ҧ͏ͷͰɺઆ໌ʢઆಘʣ͠΍͍͢ɻ • ଱ো֐ੑʢResiliencyʣ, ৳ॖੑʢElasticityʣ
 ৴པੑʢReliabilityʣͳͲͰѹউ͢Δɻ • ڧ͍ͯݴ͑͹1ΠϯελϯεͰC100Kͷޭ੷͕͋Δ Node͕Ұ൪ͷϥΠόϧɻ

Slide 74

Slide 74 text

଱ো֐ੑʢResiliencyʣ • AkkaͷFault Toleranceઓུ͸Erlang/OTPͳͲ ͱฒͼ࠷ڧΫϥεͷ଱ো֐ੑΛఏڙ • ࢓૊ΈΛཧղͯ͠ਖ਼͘͠࢖͑͹ɺۚ༥ج൫΍ Πϯϑϥج൫ʹ༻͍͏ΔϨϕϧ • લḗઓͰ͸આಘͷϝΠϯ΢Σϙϯ

Slide 75

Slide 75 text

৳ॖੑʢElasticityʣ • ޿ٛͰͷεέʔϥϏϦςΟ • AkkaϕʔεͷΫϥελϦϯά͕༰қ • Play΋Akkaͷ࢓૊Έͷ্Ͱಈ͍͍ͯΔ • Play-Scalaͷ୯ମॲཧੑೳ͸NodeΑΓߴ͍
 ˞ 2015/05࣌఺ͷϕϯνϚʔΫ

Slide 76

Slide 76 text

৴པੑʢReliabilityʣ • ͳΜ͔ͩΜͩݴͬͯ΋JVMͰಈ͘ΞϓϦ • JVMͷྺ࢙ͱ৴པੑΛͦͷ··Ҿ͖ܧ͙͜ͱ͕Ͱ ͖Δ • νϡʔχϯά͔Βӡ༻·Ͱ࣮੷ɾจݙͱ΋ʹ๛෋ • javapίϚϯυͳͲͰղੳ͢Δͱ݁ߏಡΊ·͢

Slide 77

Slide 77 text

଱ো֐ੑɺ৳ॖੑɺ৴པੑΛ ͔ͬ͠Γ཈͑Ε͹ Rails, Node, PHPʹ ڝΓෛ͚Δ͜ͱ͸ͳ͍ ※ APIαʔόʔ։ൃͷ࿩Ͱ͢

Slide 78

Slide 78 text

೉߈ෆམ vs Java

Slide 79

Slide 79 text

ઌ΄Ͳڍ͛ͨ ଱ো֐ੑɺ৳ॖੑɺ৴པੑ͸ ͦΕͧΕ Play, Akka → ଱ো֐ੑ Akka → ৳ॖੑ JVM → ৴པੑ

Slide 80

Slide 80 text

Play-Java

Slide 81

Slide 81 text

Akka for Java

Slide 82

Slide 82 text

JVM

Slide 83

Slide 83 text

͑ͬɺ ͦΕJavaͰ͍͍Ͱ͢ΑͶʁ

Slide 84

Slide 84 text

೉߈ෆམ vs Java

Slide 85

Slide 85 text

JavaΑΓScalaΛ࢖͍͍ͨཧ༝ • ίʔυهड़ྔ͕ѹ౗తʹগͳ͍ʢφ΢͍ʣ • ؔ਺ܕͰॻ͚Δʢφ΢͍ʣ • Akka, Play͸ScalaͰॻ͔ΕͯΔ͔Β௥͍΍͍͢ • …͚ͩ͡Όͳ͘Sparkͱ͔Kafkaͱ͔࠷ۙͷ
 ॏཁͳOSS͕ScalaͰॻ͔Ε·ͬͯ͘Δʢφ΢͍ʣ

Slide 86

Slide 86 text

JavaΛ࢖ͬͯ΄͍͠ཧ༝ • ݴޠ࿩ऀͷ฼਺͕ѹ౗తʹଟ͍ • Ώ͑ʹϋΠΞϦϯάָ͕ • Ώ͑ʹอकɾӡ༻ମ੍Λཱͯ΍͍͢ • Ώ͑ʹ҆৺ײ͕͋Δ

Slide 87

Slide 87 text

ຊ౰ʹͦ͏Ͱ͠ΐ͏͔ʁ

Slide 88

Slide 88 text

Java8Λ࣮຿ϨϕϧͰॻ͚Δ ΤϯδχΞͬͯ ͦΜͳʹଟ͍ΜͰ͠ΐ͏͔ (StreamAPIʹflatMapͱ͔͋Γ·͚͢ͲͦΕ͸େৎ෉ͳΜͰ͔͢Ͷ) ※Scalaʹ΋Swiftʹ΋Haskell(*bind)ʹ΋͋ΔΑʂ

Slide 89

Slide 89 text

Java8࿩ऀ͔ͭDDD࿩ऀͷ ΤϯδχΞͷϋΠΞϦϯά ͬͯͦΜͳʹָͰ͠ΐ͏͔

Slide 90

Slide 90 text

Java7࿩ऀΛҭͯΕ͹Α͍ʁ

Slide 91

Slide 91 text

ͳΒScalaͰ
 ΍Γ·͠ΐ͏ʂ

Slide 92

Slide 92 text

"JavaΑΓ΋Scala"Λઆಘ͢Δ • ScalaΛ࢖ͬͨ৔߹ͷར఺Λઆ໌͠ • Java8࿩ऀ͕ඞͣ͠΋ଟ͘ͳ͘ɺ͔ͭJava8ʹ͸
 ͔ͳΓֶशίετ͕͔͔Δ͜ͱΛઆ໌͠ • ʢ্࢘ʹ͸ʣಉֶ͡शίετΛ෷͏ͳΒ͹ScalaΛ࢖͏΂͖ ͩͱ఻͑Δ΂͠ʂ • ʢ͓٬͞Μʹ͸ʣScalaͰ΋ϦεΫେࠩͳ͍ͱ఻͑Δ΂͠ʂ

Slide 93

Slide 93 text

࣌ؒʹ༨༟͕͋Ε͹͜͜Ͱ ScalaѪΛޠΔ ిܸɺॳ࿀ɺ૬खͷ͜ͱ΋ͬͱ஌Γ͍ͨɺ…

Slide 94

Slide 94 text

·ͱΊ

Slide 95

Slide 95 text

·ͱΊ • Scala͸ؔ਺ܕ΋Ͱ͖ΔOOPݴޠͰ͢Αʂ • དྷΔLambda Xσʔʹ͸ɺScala͸։ൃऀʹଟ͘ͷ޾ ͤΛ΋ͨΒ͢Ͱ͠ΐ͏ɻ • Resiliency, Elasticity, Reliability!! • ScalaΛ࢖͏ར఺Λ͔ͬ͠Γઆ໌্ͨ͠Ͱ
 “JavaͳΒ͹҆৺” ͱ͍͏ݬ૝ΛͿͪյ͢ʂ

Slide 96

Slide 96 text

No content

Slide 97

Slide 97 text

%FWFMPQFST*0 ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ εϥΠυ͸ޙ೔ϒϩάͰެ։͠·͢ɻ  " ⡥$MBTTNFUIPE *OD #cmdevio2016