Slide 1

Slide 1 text

Ruby2.7Ͱಋೖ͞ΕΔ Pattern matchingͰ GemΛ࡞ͬͯΈͨ Ebisu.rb #25 @_morihirok

Slide 2

Slide 2 text

About me • Github: morihirok • Twitter: @_morihirok • STORES.jp inc,

Slide 3

Slide 3 text

Ruby 2.7ΑΓ Pattern matching ͱ͍͏ػೳ͕ೖΓ·͢

Slide 4

Slide 4 text

3VCZ,BJHJ1BUUFSONBUDIJOH/FXGFBUVSFJO3VCZΑΓҾ༻ IUUQTTQFBLFSEFDLDPNL@UTKQBUUFSONBUDIJOHOFXGFBUVSFJOSVCZEPU

Slide 5

Slide 5 text

3VCZ,BJHJ1BUUFSONBUDIJOH/FXGFBUVSFJO3VCZΑΓҾ༻ IUUQTTQFBLFSEFDLDPNL@UTKQBUUFSONBUDIJOHOFXGFBUVSFJOSVCZEPU

Slide 6

Slide 6 text

࢖ͬͯΈ͍ͨͷͰ Կ͔࡞Ζ͏

Slide 7

Slide 7 text

STORES.jp͸ϝΠϯDB͕ MongoDB • ओཁͳσʔλ͸શͯMongoDBʹೖ͍ͬͯΔ • ओཁͳΫΤϦ΋શͯMongoDBʹ޲͔͍ͬͯΔ • ౰વ࣮ߦܭը΋MongoDBͷ΋ͷΛ֬ೝ͢Δ • MongoDBͷexplain͸ಡΈͮΒ͍

Slide 8

Slide 8 text

MongoDBͷexplain݁Ռͷ αϯϓϧ > db.items.find({price: 119}).explain("executionStats") { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "sample_db.items", "indexFilterSet" : false, "parsedQuery" : { "price" : { "$eq" : 119 } }, "winningPlan" : { "stage" : "COLLSCAN", "filter" : { "price" : { "$eq" : 119 } શͯ+40/Ͱදݱ͞ΕΔ

Slide 9

Slide 9 text

Pattern matchingΛ࢖͑͹ JSONͷѻ͍͕ ָʹͳΔͷͰ͸ʁ

Slide 10

Slide 10 text

ͱ͍͏͜ͱͰ࡞ͬͨͷ͕͜Ε FYQMBJOͷ+40/Λ ͍͍۩߹ʹ.BSLEPXOͷ ςʔϒϧʹม׵͢Δ

Slide 11

Slide 11 text

ΠϯσοΫε͕ޮ͍ͯͳ͍ͱ͖ͷ explain݁Ռ ͕͜͜z$0--4$"/zʹͳΔ

Slide 12

Slide 12 text

͜͏ॻ͚Δ ͕͜͜z$0--4$"/zʹͳΔ

Slide 13

Slide 13 text

ΠϯσοΫε͕ޮ͍͍ͯΔͱ͖ͷ explain݁Ռ ͕͜͜z'&5$)zʹมΘΔ ͕͜͜z*94$"/zʹͳΔ ͜͜ʹΠϯσοΫε໊͕ೖΔ

Slide 14

Slide 14 text

͜͏ॻ͚Δ ͕͜͜z'&5$)zʹมΘΔ ͕͜͜z*94$"/zʹͳΔ ͜͜ʹΠϯσοΫε໊͕ೖΔ

Slide 15

Slide 15 text

͜͏ॻ͚Δ ม਺ΛόΠϯυͰ͖Δ ͜͜ʹΠϯσοΫε໊͕ೖΔ

Slide 16

Slide 16 text

࠷ऴతʹ͸͜͏ͳΔ

Slide 17

Slide 17 text

STORES.jpͰ΋ ͍͍ײ͡ʹ࢖͑ͦ͏

Slide 18

Slide 18 text

͓લ͸ຊ൪ͷRubyΛ 2.7ʹ্͛Δͭ΋Γͳͷ͔ʁ

Slide 19

Slide 19 text

Pattern matchingແ͠Ͱ ॻ͖׵͑Δͱ

Slide 20

Slide 20 text

Pattern matchingແ͠Ͱ ॻ͖׵͑Δͱ όʔδϣϯ͝ͱͷ ίʔυͷဃ཭͕ܹ͘͠ͳΔ

Slide 21

Slide 21 text

͜Μͳํ๏΋͋Γ·͢

Slide 22

Slide 22 text

pattern-matchΛར༻͢Δͱ 1SPDDBMM ͷγϯλοΫεγϡΨʔ͕ Ͱ͋Δ͜ͱΛར༻͍ͯ͠Δ

Slide 23

Slide 23 text

pattern-matchΛར༻͢Δͱ ͋Δఔ౓ࣅͨίʔυΛ อͭ͜ͱ͕Ͱ͖Δ

Slide 24

Slide 24 text

Ruby2.7Ҏ্Ͱ͸ Pattern matchingΛ࢖͍͍ͨ Ruby2.6ҎԼͰ΋ gem͸࢖͍͍ͨ

Slide 25

Slide 25 text

RubyͷόʔδϣϯʹΑͬͯ require͢ΔϑΝΠϧΛม͑Δ • mongo_clarify.rb 3VCZͷόʔδϣϯʹΑͬͯ ϑΝΠϧΛม͍͑ͨϞδϡʔϧ

Slide 26

Slide 26 text

RubyͷόʔδϣϯʹΑͬͯ require͢ΔϑΝΠϧΛม͑Δ • investigate.rb 3VCZҎ্ͳΒ 1BUUFSO.BUDIJOH൛Λ࢖͏

Slide 27

Slide 27 text

• ىಈதͷRubyͷόʔδϣϯจࣈྻΛอ࣋͢Δ ఆ਺ Gem::Version • όʔδϣϯจࣈྻΛൺֱՄೳʹ͢ΔΫϥε RUBY_VERSION

Slide 28

Slide 28 text

ςετ΋RubyͷόʔδϣϯʹΑͬͯ require͢ΔϑΝΠϧΛม͑Δ • mongo_clarify_spec.rb 3VCZͷόʔδϣϯʹΑͬͯ ϑΝΠϧΛม͍͑ͨϞδϡʔϧ

Slide 29

Slide 29 text

ςετ΋RubyͷόʔδϣϯʹΑͬͯ require͢ΔϑΝΠϧΛม͑Δ • .travis.yml $*ʹෳ਺όʔδϣϯͰ ςετͯ͠΋Β͏

Slide 30

Slide 30 text

RubyGemsʹస͕͍ͬͯ·͢ • https://rubygems.org/gems/mongo_clarify

Slide 31

Slide 31 text

༨ஊ Gemͷ࡞੒աఔͰ MongoDBͷexplainʹ׳Ε ͜ͷGem࢖͍ͬͯͳ͍