Slide 1

Slide 1 text

Well-organized Transaction Script - ϦϑΝΫλϦϯάͷଥڠతख๏ - @qsona 2022-06-24 ઃܭφΠτ2022 ʮτϥϯβΫγϣϯεΫϦϓτʯ #sekkeinight

Slide 2

Slide 2 text

whoami • @qsona • Software Engineer at ελσΟαϓϦ (ϦΫϧʔτ) • Node.js / Rails / GraphQL / Microservices

Slide 3

Slide 3 text

ࠓ೔ͷ͋Β͢͡ • 1. ࠷ۙνʔϜͰߦΘΕͨ
 Transaction Script ͷϦϑΝΫλϦϯάͷ࿩ • 2. Transaction Script ͷϦϑΝΫλϦϯάํ਑ʹ͍ͭͯߟ࡯

Slide 4

Slide 4 text

࠷ۙνʔϜͰߦΘΕͨ
 Transaction Script ͷϦϑΝΫλϦϯά

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

https://studysapuri.jp/course/junior/release-2022-spring/

Slide 7

Slide 7 text

ࠓ೔ͷ࿩ͷίϯςΩετ • ελσΟαϓϦʹ͓͚ΔϚελʔσʔλ • ֶशऀֶ͕श͢ΔͨΊͷ໰୊΍ಈըͱɺ
 ͦΕΒΛ֊૚ߏ଄ʹ·ͱΊͨ΋ͷ • ʮίϯςϯπʯͱݺΜͰ͍Δ • (ฐνʔϜͰ͸) YAML, CSV ͳͲͰ؅ཧ͞Ε͍ͯΔ • ͜ΕΛσʔλϕʔεʹ౤ೖ͢ΔεΫϦϓτͷ࿩

Slide 8

Slide 8 text

ίϯςϯπΠϯϙʔτͷίʔυ֓ཁ • େ͖͘ҎԼͷ3ͭͷؔ਺ʹ෼͔Εɺॱʹ࣮ߦ͞ΕΔ • 1. processContentData ...
 CSV, YAML Ͱߏ੒͞Εͨ
 ίϯςϯπσʔλΛશͯparse͠ɺ
 1ຕͷ JS Object ʹม׵͢Δ • 2. deleteAllContents ... DB ্ͷίϯςϯπΛશ࡟আ • 3. insertContents ... 1 Ͱ࡞ͬͨσʔλΛ DB ʹ౤ೖ͢Δ ໿ 700 ߦ, ࠷ਂ 4 ॏϧʔϓ͕ग़ݱ͢Δ τϥϯβΫγϣϯεΫϦϓτɻ ίʔυͷೝ஌ෛՙ͕ߴ͍

Slide 9

Slide 9 text

τϥϯβΫγϣϯεΫϦϓτͷ՝୊ • Ͳ͜ͰԿͷॲཧΛ΍͍ͬͯΔ͔͕ύοͱΘ͔Βͳ͍ • ϧʔϓ͕ଟॏʹͳ͍ͬͯͯɺม਺ͷείʔϓ͕෼͔Γʹ͍͘ • => ίʔυͷೝ஌ෛՙ͕ߴ͘ɺॳݟࡴ͠ ϦϑΝΫλϦϯά͍ͨ͠

Slide 10

Slide 10 text

ϦϑΝΫλϦϯάͷํ਑? • ʮυϝΠϯʯΛߟ࡯ͯ͠ • ʮυϝΠϯϞσϧʯΛද͢ΫϥεΛ࡞ͬͯ • ͦΕΒͷϝιουΛݺΜͰ౷߹͢Δײ͡...?

Slide 11

Slide 11 text

ٙ໰ • ߟ࡯͢Δ΄ͲͷʮυϝΠϯʯ͕ଘࡏ͠ͳͦ͏ • ิ଍: ίϯςϯπͷ࡞੒ʙೖߘ͸ߟ࡯͕͍͠ͷ͋ΔυϝΠϯͷๅݿͳͷ͕ͩɺ
 ͜ͷ YAML, CSV ΛΠϯϙʔτ͢ΔՕॴ͚ͩΛݟΔͱ͋·Γͳ͍ͱ͍͏ҙຯ • TypeScript ͰΫϥε͋Μ·Γ࢖͍ͨ͘ͳ͍

Slide 12

Slide 12 text

ϦϑΝΫλϦϯάͷํ਑ɾվ • Ұ୴ɺͦΕͬΆཻ͍౓ͷؔ਺ʹ෼ׂ͍ͯ͜͠͏

Slide 13

Slide 13 text

యܕత τϥϯβΫγϣϯεΫϦϓτ

Slide 14

Slide 14 text

͜Μͳײ͡ʹ ෳ਺ͷॲཧʹ෼ׂ͢Δ ͜ΕΛҾ͖ଓ͖ਐΊ͍ͯ͘

Slide 15

Slide 15 text

݁Ռ • ී௨ʹ͏·͍͘͘ (ຊ౰ʹී௨Ͱ͢Ͷɾɾɾ) • before: Ͳ͜ͰԿͷॲཧΛ΍͍ͬͯΔ͔͕ύοͱΘ͔Βͳ͍
 => after: ؔ਺ʹ෼ׂ͞Εɺ໊લ͕෇͚ΒΕͯɺΘ͔Γ΍͘͢ͳͬͨ • before: ϧʔϓ͕ଟॏʹͳ͍ͬͯͯม਺ͷείʔϓ͕෼͔Γʹ͍͘
 => after: ֤ϧʔϓ಺ͷॲཧ͕ؔ਺ʹͳͬͨͷͰɺείʔϓ͸Θ͔Γ΍͘͢ͳͬͨ • ෼ׂͨ͠୯ҐͰ୯ମςετ΋ॻ͚ΔΑ͏ʹ

Slide 16

Slide 16 text

ϙΠϯτ • ୯ʹಡΈ΍͘͢ͳͬͨ & 
 มߋ͍ͨ͠ͱ͖ʹมߋ͢΂͖Օॴ͕Θ͔Γ΍͘͢ͳ͚ͬͨͩ • ΞʔΩςΫνϟʹຊ࣭తͳมԽ͸ͳ͍ • ͕ɺ໨ઌͷ՝୊͸ղܾͨ͠ͱ͍͏࿩

Slide 17

Slide 17 text

Transaction Script ͷ ϦϑΝΫλϦϯάํ਑ʹ͍ͭͯߟ࡯

Slide 18

Slide 18 text

Transaction Script ͱ͸ • ͜͜Ͱ͸ʮಛఆͷϢʔεέʔε͕ͦͷ··දݱ͞Εͨίʔυʯ ͱଊ͑Δ ͍·͞Β͖͚ͳ͍ʮυϝΠϯϞσϧʯͱʮτϥϯβΫγϣϯεΫϦϓτʯ - ͻ͕΍͢Λٕज़ϒϩά

Slide 19

Slide 19 text

ϦϑΝΫλϦϯάԦಓϧʔτ (ϘτϜΞοϓܕ) • υϝΠϯΛߟ࡯͠ɺυϝΠϯϞσϧΛ࡞Δ • ͦͷυϝΠϯϞσϧΛϢʔεέʔεͰར༻͢Δ

Slide 20

Slide 20 text

ϦϑΝΫλϦϯάଥڠϧʔτ (τοϓμ΢ϯܕ) • Lv.0 Ϣʔεέʔε͕΂ͬͨΓ௕ͬͨΒ͘͠ίʔυͰදݱ͞Ε͍ͯΔ
 (యܕతͳτϥϯβΫγϣϯεΫϦϓτ) • Lv.1 ؔ਺܈ʹ෼ղ͢Δ (Composed Method ύλʔϯ) • Lv.2 ؔ਺܈Λ public ʹͯ͠ɺͦΕͧΕςετΛॻ͘
 (Ծশ: Well-organized Transaction Script) • Lv.3 ֤ؔ਺܈ʹυϝΠϯϞσϧͱͯ͠ͷৼΔ෣͍Λ࣋ͨͤΔ

Slide 21

Slide 21 text

Lv.0

Slide 22

Slide 22 text

Lv.1

Slide 23

Slide 23 text

Lv.2 (Well-organized Transaction Script) export Λ͚͍ͭͯΔ "͚ͩ" ͕ͩɺ ͦΕʹ͸Ұఆͷઃܭ൑அΛཁ͢Δ

Slide 24

Slide 24 text

Well-organized Transaction Script • ͋͘·ͰϢʔεέʔεΛ෼ղ͍ͯ͠Δ͚ͩͰɺ
 ຊ࣭తͳมԽ͸ى͖͍ͯͳ͍ (υϝΠϯϞσϧͰ͸ͳ͍) • ؔ਺ཻ͕౓Λߟ͑ͯ෼ղ͞Εɺ୯ମςετՄೳʹͳ͍ͬͯΔɻ
 ֤ؔ਺͸ɺࠓޙυϝΠϯϞσϧʹͳΔީิʹͳ͍ͬͯΔ
 (Lv.3΁ͷมԽ)

Slide 25

Slide 25 text

ࢲݟ: Lv.1 ͰࢭΊͪΌ͏ਓଟ͍ • ʮ͜ͷϝιου͸͜ͷϢʔεέʔε͔Β͔͠࢖ΘΕͳ͍͔Β private ϝιουʹ͠·͢ʯ=> ؒҧͬͯ͸ͳ͍͕ • 1ͭͷϢʔεέʔε͔Β͔͠࢖ΘΕͳͯ͘΋ public Ͱྑ͍ • public ʹ͢Δͱಉ࣌ʹɺྑ͍ΠϯλʔϑΣΠεΛҙࣝ͢Δɻ
 ݁Ռςετ΋͠΍͘͢ͳΔɻ

Slide 26

Slide 26 text

͍ͭଥڠϧʔτΛબͿͷ͔ • υϝΠϯϞσϧΛߟ࡯͢Δҙຯ͕ബ͍ͱ͖ • υϝΠϯϞσϧΛຊ֨తʹߟ࡯͢Δೳྗ·ͨ͸͕࣌ؒͳ͍ͱ͖ • ͦΕͰ΋ஈ֊తʹલʹਐΉ͜ͱ͕Ͱ͖Δ

Slide 27

Slide 27 text

͓·͚: υϝΠϯϞσϧͷදݱํ๏ • ݴޠಛੑʹΑͬͯදݱํ๏͸มΘΓ͏Δ • TypeScript Ͱ͸ΫϥεΛ࣋ͪग़͞ͳ͍΄͏͕͏·͍͖͘΍͍͢ • σϑΥϧτ͸ؔ਺ϕʔεͰɻΫϥε͸ಛผͳ࣌ʹɻ

Slide 28

Slide 28 text

·ͱΊ

Slide 29

Slide 29 text

ຊൃදͷ·ͱΊ • τϥϯβΫγϣϯεΫϦϓτΛϦϑΝΫλϦϯά͢Δͱ͖ɺ
 ࠷ॳ͔ΒυϝΠϯϞσϧΛߟ࡯͢Δख๏ (Ԧಓϧʔτ) ͱ
 Ұ୴ϢʔεέʔεΛ෼ղ͍ͯ͘͠ख๏ (ଥڠϧʔτ) ͕͋Δ • ଥڠϧʔτ͔ΒͰ΋ɺ࠷ऴతʹυϝΠϯϞσϧ͕ߟ࡯͞Εͨঢ়ଶ ʹొΔ͜ͱ͕Ͱ͖Δ • ͦ΋ͦ΋υϝΠϯΛߟ࡯͢Δҙຯ͕ബ͍ͱ͖΋͋ΔΑ

Slide 30

Slide 30 text

എܠʹڵຯ΋ͬͯԼͬͨ͞ํ΁ • ͜ͷ୊ࡐͱͳͬͨτϥϯβΫγϣϯεΫϦϓτ
 ͕ੜ·ΕͨഎܠͳͲ͸
 jsconfjp 2021 Ͱొஃͨ͠ࢿྉ (ӈ) Λ
 ͥͻ͝ࢀর͍ͩ͘͞ • ελσΟαϓϦͰ͸ɺڭҭ/ֶशυϝΠϯʹڵຯͷ͋Δ
 ΤϯδχΞΛืू͍ͯ͠·͢
 (ڵຯ͋Δํ Twitter @qsona ʹϝϯγϣϯ΍DM͍ͩ͘͞)

Slide 31

Slide 31 text

కΊͷҰ۟ • P of EAA 2002೥ Զͨͪੜ͖ͯΔ 2022೥