Slide 1

Slide 1 text

4DBMBMS 4DBMBͷݴޠػߏΛѱ༻ͯ͠
 ࠷ڧͷ%4-Λ࡞ΔϥΠϒϥϦ !QIFOBO 4DBMB.BUTVSJൃදࢿྉ

Slide 2

Slide 2 text

• Twitter: @phenan • Github: phenan • ࠓ೔ͷ࿩: ໘ന͍ϥΠϒϥϦΛ࡞ͬͨͷͰ঺հ͠·͢ • ͜ͷεϥΠυ: https://speakerdeck.com/phenan/scalalr

Slide 3

Slide 3 text

͜Μͳײ͡Ͱ%4-Λఆٛ͢Δ

Slide 4

Slide 4 text

JValue
 のDSL

Slide 5

Slide 5 text

JValue
 のDSL こうかいて これをよびたい

Slide 6

Slide 6 text

JValue
 のDSL こうかいて これをよびたい カンマくぎり

Slide 7

Slide 7 text

JValue
 のDSL JSONのObjectの かきかた Objectのそれぞれの プロパティ

Slide 8

Slide 8 text

͜Μͳײ͡Ͱ࢖͑Δʂ

Slide 9

Slide 9 text

͜Μͳײ͡Ͱ࢖͑Δʂ これ

Slide 10

Slide 10 text

͜Μͳײ͡Ͱ࢖͑Δʂ これ

Slide 11

Slide 11 text

͜Μͳײ͡Ͱ࢖͑Δʂ これ これ

Slide 12

Slide 12 text

ׅހ͕͍ͬͺ͍͋Δ

Slide 13

Slide 13 text

ׅހ͸ݴޠͷڥքΛ͋ΒΘ͢ JSON DSLに
 Scala value
 をわたしている

Slide 14

Slide 14 text

ׅހ͸ݴޠͷڥքΛද͢ Scalaに
 JSON DSLを
 わたしている 1ライナーのDSLなら()はいらない

Slide 15

Slide 15 text

஫໨ͯ͠΄͍͠఺

Slide 16

Slide 16 text

4DBMBͰ͜Μͳͷॻ͚͚ͨͬʁ

Slide 17

Slide 17 text

4DBMBͰ͜Μͳͷॻ͚͚ͨͬʁ [a, b] ?

Slide 18

Slide 18 text

4DBMBͰ͜Μͳͷॻ͚͚ͨͬʁ [a, b] ? : のあとは
 タイプでは?

Slide 19

Slide 19 text

4DBMBͰ͜Μͳͷॻ͚͚ͨͬʁ [a, b] ? : のあとは
 タイプでは? {a, b} ?

Slide 20

Slide 20 text

ίϯύΠϥ֦ுʁ

Slide 21

Slide 21 text

͍͍͑ɺ
 ૉͷ4DBMBͰ͢

Slide 22

Slide 22 text

'POU-JHBUVSF ͜Ε࣮͸…

Slide 23

Slide 23 text

'POU-JHBUVSF

Slide 24

Slide 24 text

'POU-JHBUVSF 7BMJEͳ4DBMBίʔυ

Slide 25

Slide 25 text

4DBMBMS w ઐ༻ϑΥϯτ4DBMJHͷར༻Λલఏͱͨ͠ίʔυΛੜ੒͢Δ w %4-ͷݟͨ໨Λࣗ༝ʹม͑ΒΕΔΑʂ΍ͬͨͶʂ w ίϯύΠϧʹ͕͔͔࣌ؒΔͷ͕ͪΐͬͱͨ͠໰୊
 ཁૉͷ+40/ͷ഑ྻͷίϯύΠϧʹ࣌ؒҎ্͔͔ͬͨ w ஍ຯʹଧͭͷ͕໘౗ͳͷͰΤσΟλαϙʔτ΋։ൃ͍ͨ͠ w IUUQTHJUIVCDPNQIFOBOTDBMBMS

Slide 26

Slide 26 text

ٕज़తৄࡉ w !ETM͸ΞϊςʔγϣϯϚΫϩ w JNQMJDJUQBSBNFUFSΛѱ༻ͯ͠ίϯύΠϧ࣌-"-3ߏจղੳ w ܕˠඇऴ୺ه߸ จ๏Λදݱ͢Δ΍ͭ  w ೚ҙͷ෦෼ࣜΛׅހͰׅͬͨ4DBMBࣜͰஔ͖׵͑Մೳʹ͢ΔͨΊʹ
 ͪΐͬͱෳࡶͳ͜ͱΛ͍ͯ͠Δ w ͜ͷख๏ΛԠ༻ͯ͠ࣈ۟ղੳΛมߋՄೳʹ͢Δ͜ͱ΋Ͱ͖Δ ͸ͣ  w ΞϯΧϯϑΝϨϯεͰ࿩ͯ͠Έ͍ͨ ͚ͲεϥΠυ͸༻ҙͯ͠ͳ͍

Slide 27

Slide 27 text

%4-ͷ࡞Γํ w ߏจղੳثΛ࡞ΔϓϩάϥϜ"45 w ΠϯλϓϦλΛ࡞Δ"45஋

Slide 28

Slide 28 text

%4-ͷ࡞Γํ w ߏจղੳثΛ࡞ΔϓϩάϥϜ"45 w ΠϯλϓϦλΛ࡞Δ"45஋ ؔ਺Λݺ΂͹ྑ͍͚ͩ

Slide 29

Slide 29 text

%4-ͷ࡞Γํ w ߏจղੳثΛ࡞ΔϓϩάϥϜ"45 w ΠϯλϓϦλΛ࡞Δ"45஋ ؔ਺Λݺ΂͹ྑ͍͚ͩ ͬͪ͜ΛͲ͏͢Δ͔

Slide 30

Slide 30 text

໰୊Λ؆୯ʹ͢Δ w %4-ΛBCDEFʜͷΑ͏ʹॻ͘΋ͷͱ͢Δ w ϝιουݺͼग़͠PSϑΟʔϧυࢀরͷνΣΠϯ w ࣮͸͜ͷه๏΋4DBMBMS͸αϙʔτ͍ͯ͠Δ

Slide 31

Slide 31 text

Կ͕Ͱ͖Ε͹ྑ͍͔ w ϓϩάϥϜBCDEFʜͷͦΕͧΕͷؔ਺ݺͼग़͠Λݕࠪ w ϓϩάϥϜஅยBCͷ͕࣍DͰ͋Δͷ͸ਖ਼͍͠ೖྗ͔ʁ w ΦʔτϚτϯΛ࡞Δʂ S1 S2 S3 S4 B C D

Slide 32

Slide 32 text

Ϋϥεͱϝιου w ঢ়ଶ4ͷͱ͖͚ͩݺ΂Δؔ਺DΛ࡞Ε͹ྑ͍ w Ϋϥε4ͷϝιουD͕4ܕͷ஋Λฦͤ͹ྑ͍ S1 S2 S3 S4 B C D

Slide 33

Slide 33 text

͜Εͩͱਖ਼نදݱ͘Β͍͔͠Ͱ͖ͳ͍ w ܾఆੑ༗ݶΦʔτϚτϯ w ΋͏গ͠ڧ͍ߏจղੳ͕͍ͨ͠ w -3ߏจղੳΛ࠶ݱ͢Δʂ S1 S2 S3 S4 B C D

Slide 34

Slide 34 text

-3ΦʔτϚτϯ w ܾఆੑ༗ݶΦʔτϚτϯͷࣗવͳ֦ு w SFEVDF࠷ۙಡΜ͍͔ͩͭ͘ͷτʔΫϯΛͳ͔ͬͨ͜ͱʹͯ͠ɺ
 ผͷτʔΫϯΛಡΜͩ͜ͱʹ͢Δ S1 S2 S3 S4 &YQS 5FSN S5 /VN /VN S6 5FSN

Slide 35

Slide 35 text

-3ΦʔτϚτϯ w ܾఆੑ༗ݶΦʔτϚτϯͷࣗવͳ֦ு w SFEVDF࠷ۙಡΜ͍͔ͩͭ͘ͷτʔΫϯΛͳ͔ͬͨ͜ͱʹͯ͠ɺ
 ผͷτʔΫϯΛಡΜͩ͜ͱʹ͢Δ SFEVDF5FSN/VN SFEVDF&YQS&YQS 5FSN S1 S2 S3 S4 &YQS 5FSN S5 /VN /VN S6 5FSN

Slide 36

Slide 36 text

*NQMJDJUQBSBNFUFSΛ࢖͏ʂ w 3FEVDFՄೳ͔Ͳ͏͔ΛJNQMJDJUQBSBNFUFSʹ͢Δ w 4͸4Λܦ༝ͯ͠4ʹSFEVDFՄೳͳͷͰ
 ϝιου͕ݺ΂ΔΑ͏ʹ͢Δ SFEVDF5FSN/VN SFEVDF&YQS&YQS 5FSN S1 S2 S3 S4 &YQS 5FSN S5 /VN /VN S6 5FSN

Slide 37

Slide 37 text

࣮૷Πϝʔδ implicit class PlusTransition[Sn] (sn: Sn) { def plus (implicit reduce: SnからS2にreduce可能): S3 = { reduce(sn).plus() } } ೚ҙͷঢ়ଶ4O͸
 4ʹSFEVDFՄೳͰ͋Ε͹
 QMVTΛݺͿ͜ͱ͕Ͱ͖Δ

Slide 38

Slide 38 text

3FEVDFͷఆٛ trait Reduce[Sx, Sy] { def apply (sx: Sx): Sy } implicit def doubleReduce [Sx, Sy, Sz] (implicit reduce1: Reduce[Sx, Sy], reduce2: Reduce[Sy, Sz]) : Reduce[Sx, Sz] = { new Reduce[Sx, Sz] { def apply (sx: Sx): Sz = reduce2(reduce1(sx)) } } SFEVDFՄೳ͔Ͳ͏͔Λදݱ͢Δ
 NVMUJQBSBN ܕΫϥε SFEVDF͸ਪҠత 4Y4Z͔ͭ4Z4[ͳΒ4Y4[

Slide 39

Slide 39 text

3FEVDFͷఆٛ implicit val reduceFromS5ToS6: Reduce[S5, S6] = { new Reduce[S5, S6] { def apply (s5: S5): S6 = S6(Term(s5.value)) } } 44ͷSFEVDFఆٛ /VNͷ୅ΘΓʹ5FSNΛಡΜͩ͜ͱʹ͢Δ SFEVDF5FSN/VN SFEVDF&YQS&YQS 5FSN S1 S2 S3 S4 &YQS 5FSN S5 /VN /VN S6 5FSN

Slide 40

Slide 40 text

ຊ౰ͷ࣮૷͸΋͏গ͠ෳࡶ w -"-3ߏจղੳʹ͢ΔͨΊʹɺ
 3FEVDFՄೳ͔Ͳ͏͔ͷ൑அʹ΋࣍ͷτʔΫϯΛ࢖͏ w BCDEFʜͰ͸͕ඞཁͳͷͰɺ
 ຊ౰͸BC D E F ʜͷܗʹ͍ͨ͠ w ͜͏͢Ε͹BCDEFʜͷΑ͏ʹॻ͚Δʂ w CϝιουΛDΛҾ਺ʹͱΔϝιουʹͯ͠ɺ
 ͭͿΜͷঢ়ଶભҠΛҰؾʹ΍Ε͹ྑ͍

Slide 41

Slide 41 text

ຊ౰ͷ࣮૷͸ߋʹෳࡶ w ೚ҙͷ෦෼ࣜΛ 4DBMBͷࣜ Ͱஔ͖׵͑ΒΕΔΑ͏ʹ͍ͨ͠ w BC D E F ʜͷͲͷ෦෼Λஔ͖׵͑Δ͔ʹΑͬͯ࿩͕ҧ͏ w Bͷ෦෼JNQMJDJUDMBTTΛఆٛͯ͠CϝιουΛݺ΂ΔΑ͏ʹ w Dͷ෦෼Cϝιου͕4DBMBͷࣜΛҾ਺ʹऔΕΔΑ͏ʹ͢Δ w Cͷ෦෼ʹ4DBMB͕ࣜೖΔͱB C D E F ͱͳΓ݁߹͕มΘΔʂ w B C D Ͱͭ෼ͷঢ়ଶભҠΛҰ౓ʹ΍Ε͹ྑ͍ʂ w ಉ༷ʹOݸ෼ͷঢ়ଶભҠΛҰ౓ʹ΍Δ࢓૊Έ͕ඞཁ

Slide 42

Slide 42 text

4DBMBMS w ࣮ଶ͸-"-3  ύʔβδΣωϨʔλ w ී௨ͷύʔβͰ͸ͳ͘JNQMJDJUWBMVF౳ͷఆٛΛੜ੒͢Δ w !ETMΞϊςʔγϣϯϚΫϩʹΑΓίϯύΠϧ࣌ʹίʔυੜ੒ w ϚΫϩύϥμΠε͸ϚΫϩ஍ࠈͩͥ w %4-Ϣʔβ͸JNQPSU͢Δ͚ͩͰ%4-Λ࢖͑Δʂ w ίϯύΠϧʹ͕͔͔࣌ؒΔ w -"-3͸ઢܗͷΞϧΰϦζϜ͕ͩɺ࣮ଌͩͱ0 O ͘Β͍ʹݟ͑Δ