Slide 1

Slide 1 text

גࣜձࣾiCARE αʔόʔαΠυΤϯδχΞ ࣉҪ লޗ(@krpk1900_dev) Rubyͷϋογϡͱ 
 ύεϫʔυͷϋογϡԽɺ 
 ·ͬͨ͘ผ෺ͩͱࢥ͍ͬͯ·ͤΜ͔ʁ

Slide 2

Slide 2 text

2 גࣜձࣾiCARE αʔόʔαΠυΤϯδχΞ ࣉҪ লޗ 2021೥8݄ʹגࣜձࣾiCAREʹೖࣾɻ
 2022೥8݄ΑΓԠ༻తೝՄػೳPJ։ൃϦʔμʔɺ
 2022೥10݄͔Β͸৽ن։ൃνʔϜͷϦʔμʔΛ݉೚ɻ RailsͱGraphQLΛ༻͍ͨ։ൃΛओʹ୲౰͍ͯ͠·͢ɻ ࣗݾ঺հ @krpk1900_dev

Slide 3

Slide 3 text

3 ࠓ೔ͷൃද಺༰͸ɺ RubyKaigi 2022ʹఏग़ͨ͠CFPΛ վมͨ͠΋ͷͰ͢ ͓͜ͱΘΓ

Slide 4

Slide 4 text

4 ఻͍͑ͨ͜ͱ ᶃ Rubyͷϋογϡʹؔ͢Δ஌ࣝ ᶄ Rubyͷൃలͷཪʹ͋ͬͨࢲ͕ײಈͨ͠Τϐιʔυ ᶅ ॳ৺ऀͰ΋CFPΛग़ͯ͠ྑ͍ͱ͍͏͜ͱ

Slide 5

Slide 5 text

5 ᶃ Rubyͷϋογϡʹ͍ͭͯ

Slide 6

Slide 6 text

6 Rubyͷϋογϡͬͯ ͝ଘ஌Ͱ͠ΐ͏͔ʁ Rubyͷϋογϡ

Slide 7

Slide 7 text

7 {key: value} Rubyͷϋογϡ

Slide 8

Slide 8 text

8 ύεϫʔυͷอଘͳͲͰग़ͯ͘Δ ϋογϡԽͬͯ ͝ଘ஌Ͱ͠ΐ͏͔ʁ ύεϫʔυͷϋογϡԽ

Slide 9

Slide 9 text

9 ϋογϡؔ਺ ύεϫʔυͷϋογϡԽ password d39a9902c2

Slide 10

Slide 10 text

10 Rubyͷϋογϡͱ 
 ύεϫʔυͷϋογϡԽɺ શ͘ผ෺ͩͱࢥ͍ͬͯ·ͤΜ͔ʁ RubyͷϋογϡͱύεϫʔυͷϋογϡԽ

Slide 11

Slide 11 text

11 ࣮͸ؔ܎͍ͯ͠ΔΜͰ͢ RubyͷϋογϡͱύεϫʔυͷϋογϡԽ

Slide 12

Slide 12 text

12 Rubyͷϋογϡͱ 
 ύεϫʔυͷϋογϡԽɺ ͲͪΒ΋ϋογϡؔ਺͕࢖ΘΕ͍ͯΔ RubyͷϋογϡͱύεϫʔυͷϋογϡԽ

Slide 13

Slide 13 text

13 • RubyͷHashͰ͸ɺkeyΛ୳ࡧ͢Δͱ͖ʹϋογϡؔ਺͕࢖ΘΕ͍ͯΔ • ԿͷͨΊʹʁ ԿͷͨΊʹϋογϡؔ਺͕࢖ΘΕ͍ͯΔͷ͔

Slide 14

Slide 14 text

14 • ޮ཰ͷྑ͍୳ࡧΛߦ͏ͨΊ • ϋογϡ୳ࡧͰ͸ɺ୳ࡧʹ͔͔Δܭࢉྔ͸O(1)ͱઆ໌͞ΕΔ ϋογϡ୳ࡧ ྫɿϋογϡͷཁૉ਺͕1000000Ͱ΋ ɹɹkey͕ teraiͰ͋Δσʔλͷ୳ࡧʹ͸ 
 ɹɹཁૉ਺ʹൺྫͤͣɺҰఆͷ࣌ؒͰ୳ࡧՄೳ 1000000ݸ {terai: 178, … , endo: 196} key value ộ ộ ito 113 shiga 64 terai 178 ộ ộ

Slide 15

Slide 15 text

15 • ཁૉ਺͕๲େͰ΋Ұఆͷ࣌ؒͰܭࢉͰ͖Δͱ͍͏ͷ͸ຊ౰ͳͷ͔ʁ • ୯७ʹߟ͑Δͱɺ্͔ΒॱʹҰக͍ͯ͠Δ͔Λݟ͍ͯ͘ඞཁ͕ 
 ͋ΔͨΊɺཁૉ਺ n ʹൺྫͦ͠͏ 
 ϋογϡ୳ࡧ key value ộ ộ ito 113 shiga 64 terai 178 ộ ộ n ݸ ộ terai Ұக͍ͯ͠Δ͔ʁ Ұக͍ͯ͠Δ͔ʁ Ұக͍ͯ͠Δ͔ʁ ộ terai terai

Slide 16

Slide 16 text

16 • ͔ͨ͠ʹ্͔Βॱʹ֬ೝ͍ͯ͘͠৔߹͸ O(n)ͱͳͬͯ͠·͏ • ͜͜Ͱ༻͍ΒΕΔ޻෉͕ϋογϡςʔϒϧ ϋογϡ୳ࡧ

Slide 17

Slide 17 text

17 • ϋογϡςʔϒϧͰ͸ɺkeyͱvalueΛϝϞϦʹ֨ೲ͢Δͱ͖ʹ 
 ϝϞϦͷͲ͜ʹ֨ೲ͢Δ͔ʹنଇ͕͋Δ ϋογϡ୳ࡧ ϝϞϦ൪஍ key value ộ ộ ộ 0x1020 0x1024 0x1028 ộ ộ ộ 1000000ݸ {terai: 178} ೖΕΔͳΒ͔͜͜͠ͳ͍

Slide 18

Slide 18 text

18 • نଇʹैͬͯ֨ೲ͢Δͱ͍͏͜ͱ͸ɺ୳ࡧ͢΂͖৔ॴΛಛఆͰ͖Δ • ͜Ε͕O(1)ͱͳΔཧ༝ • نଇ͕ͳ͍ͱɺઌ΄ͲͷΑ͏ʹ্͔Βॱʹ֬ೝ͢Δ͔͠ͳ͍ ϋογϡ୳ࡧ ϝϞϦ൪஍ key value ộ ộ ộ 0x1020 ito 113 0x1024 shiga 64 0x1028 terai 178 ộ ộ ộ 1000000ݸ ೖ͍ͬͯΔͳΒ͔͜͜͠ͳ͍ {terai: 178}

Slide 19

Slide 19 text

19 • Ͱ͸ͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔Βϋογϡ஋ΛٻΊΔ 3. ϋογϡ஋ΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4. ͦͷ஋ΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪஍Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ

Slide 20

Slide 20 text

20 • Ͱ͸ͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔Βϋογϡ஋ΛٻΊΔ 3. ϋογϡ஋ΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4. ͦͷ஋ΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪஍Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ ϝϞϦ൪஍ key value ộ ộ ộ 0x1020 0x1024 0x1028 ộ 0x1408 ộ ộ ộ ςʔϒϧαΠζ͸1000

Slide 21

Slide 21 text

21 • Ͱ͸ͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔Βϋογϡ஋ΛٻΊΔ 3. ϋογϡ஋ΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4. ͦͷ஋ΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪஍Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ ϋογϡؔ਺ terai d39a9902c2

Slide 22

Slide 22 text

22 • Ͱ͸ͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔Βϋογϡ஋ΛٻΊΔ 3. ϋογϡ஋ΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4. ͦͷ஋ΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪஍Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ ϋογϡؔ਺ terai d39a9902c2 ςʔϒϧαΠζ1000Ͱ 
 ׂͬͨ༨Γ 162

Slide 23

Slide 23 text

23 • Ͱ͸ͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔Βϋογϡ஋ΛٻΊΔ 3. ϋογϡ஋ΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4. ͦͷ஋ΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪஍Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ 162 ϝϞϦ൪஍ key value ộ ộ ộ 0x1024 ộ 0x10C6 terai 178 ộ 0x1408 ộ ộ ộ ೖΕΔͳΒ͔͜͜͠ͳ͍ {terai: 178}

Slide 24

Slide 24 text

24 ϋογϡςʔϒϧ͔Β୳ࡧ͢Δͱ͖ 162 ϝϞϦ൪஍ key value ộ ộ ộ 0x1024 ito 113 ộ 0x10C6 terai 178 ộ 0x1408 shiga 64 ộ ộ ộ ೖ͍ͬͯΔͳΒ͔͜͜͠ͳ͍ ্͔Βશ෦֬ೝ͠ͳͯ͘΋1ճͰ͍͚Δ • ಉ༷ͷखॱͰkey͔ΒΦϑηοτΛܭࢉ͢Δ͜ͱͰɺ 
 ϋογϡςʔϒϧ಺ͷ֬ೝ͢Ε͹ྑ͍ϝϞϦ൪஍ΛಛఆͰ͖Δ terai

Slide 25

Slide 25 text

25 ͨͩ͠1ͭ໰୊͕͋Δ ϋογϡςʔϒϧͷ໰୊఺

Slide 26

Slide 26 text

26 • িಥ ϋογϡςʔϒϧͷ໰୊఺ ϋογϡؔ਺ terai 10162 ςʔϒϧαΠζ1000Ͱ 
 ׂͬͨ༨Γ 162 niwa 20162 ςʔϒϧαΠζ1000Ͱ 
 ׂͬͨ༨Γ 162 takei 30162 ςʔϒϧαΠζ1000Ͱ 
 ׂͬͨ༨Γ 162 ςʔϒϧαΠζͰׂΔ͜ͱʹΑͬͯ 
 ςʔϒϧαΠζະຬʹม׵ͨ݁͠Ռ 
 ಉ͡஋ʹͳͬͯ͠·͏৔߹

Slide 27

Slide 27 text

27 ϋογϡςʔϒϧͷ໰୊఺ 162 ϝϞϦ൪஍ key value ộ ộ ộ 0x1024 ito 113 ộ 0x10C6 ? ? ộ 0x1408 shiga 64 ộ ộ ộ ೖΕΔͳΒ͔͜͜͠ͳ͍ • িಥ͕ى͖Δͱ… {terai: 178} ೖΕΔͳΒ͔͜͜͠ͳ͍ {niwa: 211} ೖΕΔͳΒ͔͜͜͠ͳ͍ {takei: 362}

Slide 28

Slide 28 text

28 ༗໊ͳղܾ๏ • νΣΠϯ๏ • ΦʔϓϯΞυϨε๏ ϝϞϦ൪஍ ஋ ộ ộ 0x1024 {ito: 113} ộ 0x10C6 ộ ộ {terai: 178} {niwa: 211} {takei: 362} ϝϞϦ൪஍ ஋ ộ ộ 0x1024 {ito: 113} ộ 0x10C6 {terai: 178} 0x10CA {niwa: 211} 0x10CE {takei: 362} ộ 0x1408 {shiga: 64} ộ ộ ͕࣌ؒͳ͍ͨΊ 
 ΞϧΰϦζϜͷઆ໌͸ׂѪ

Slide 29

Slide 29 text

29 • ͪͳΈʹRubyͷHashͷ༝དྷ͸ɺPerlͷHash Table͕͢ͰʹHashͱ 
 ݺ͹Ε͍͔ͯͨΒʢMatzʹ֬ೝࡁΈʣ • ࿈૝഑ྻͱ͸ɺ਺஋Ҏ֎Λఴࣈʹ͢Δ͜ͱ͕Ͱ͖Δ഑ྻͷ͜ͱ • ࿈૝഑ྻ͸ଞͷݴޠͰ͸ҎԼͷΑ͏ʹݺ͹ΕΔ • Ϛοϓ • ࣙॻʢσΟΫγϣφϦʣ • ࿈૝Ϧετ ༨ஊɿRubyͷϋογϡͷ༝དྷ

Slide 30

Slide 30 text

30 ᶄ Rubyͷൃలͷཪʹ͋ͬͨ 
 ɹ ࢲ͕ײಈͨ͠Τϐιʔυ

Slide 31

Slide 31 text

31 • RubyͰ͸ɺνΣΠϯ๏͔ΒΦʔϓϯΞυϨε๏ʹมߋ͢ΔఏҊ͕ 
 2016೥ʹMakarov͞ΜʹΑͬͯߦΘΕͨ • CPUͷਐԽʹ൐͍ɺΦʔϓϯΞυϨε๏ͷํ͕ 
 ޮ཰͕ྑ͘ͳ͖ͬͯͨͨΊ • Python΍PHPͰ΋ಉ༷ͷมߋ͕ߦΘΕͨͨΊ RubyͷมߋͷఏҊ RubyKaigi 2022Ͱ΋ൃද͞Ε͍ͯͨ 
 Makarov͞Μ

Slide 32

Slide 32 text

32 • νΣΠϯ๏͔ΒΦʔϓϯΞυϨε๏΁ͷมߋʹ͍ͭͯɺ 
 Martin͞Μ͕ผͷ࣮૷ΛఏҊ͞Εͨ • ͲͪΒ͕RubyʹऔΓࠐ·ΕΔ͔ɺͱͯ΋೤͍ 
 ٞ࿦͕ߦΘΕͨ RubyͷมߋͷఏҊ Martin͞Μ͸RubyKaigi 2021Ͱ 
 ൃද͞Ε͍ͯΔ

Slide 33

Slide 33 text

33 • ύϑΥʔϚϯεʹେ͖ͳࠩ͸ͳ͔͕ͬͨ 
 Makarov͞Μͷ࣮૷ͷํ͕গ͚ͩ͠γϯϓϧͰ͋Δͱ൑அ͠ɺ 
 Matz ͸Makarov͞Μͷ࣮૷ΛRubyʹऔΓࠐΜͩ • ന೤͍ͯͨٞ͠࿦ΛݟΔͱɺ͓ͦΒ͘Martin͞Μͷதʹ͸ 
 չ͠͞΍൵͠͞ͷΑ͏ͳؾ࣋ͪ΋͋ͬͨͱࢲ͸ࢥ͍·͢ RubyͷมߋͷఏҊ

Slide 34

Slide 34 text

34 • ͔͠͠ɺٞ࿦ͷ࠷ޙʹMartin͞Μ͕࢒͞Ε͍ͯͨݴ༿Λ 
 ݟͨͱ͖ɺࢲ͸͘͢͝ײಈ͠·ͨ͠ Martin͞Μͷݴ༿

Slide 35

Slide 35 text

35 Φʔϓϯιʔειϑτ΢ΣΞ͸θϩαϜήʔϜͰ͸͋Γ·ͤΜɻ 
 ࠓRubyͷτϥϯΫʹ͋ΔύονΛ΋ͬͯ͢Ε͹ɺશһ͕ಘΛ͢Δͱ 
 ࢲ͸ߟ͍͑ͯ·͢ɻ 
 ͋ͳͨ΋ಘΛͯ͠ɺMakarov͞Μ΋ಘΛͯ͠ɺ 
 ଞͷΈͳ͞Μ΋ಘΛͯ͠ɺͦͯ͠Ruby΋ಘΛ͢ΔͷͰ͢ʂ 
 Έͳ͞Μɺຊ౰ʹ͋Γ͕ͱ͏͍͟͝·͢ɻ Martin͞Μͷݴ༿

Slide 36

Slide 36 text

36 Martin͞Μͷݴ༿ • ͜ͷΑ͏ͳ͜ͱΛॻ͘͜ͱࣗମ͕ࣦྱʹ͋ͨΔ͔΋͠Ε·ͤΜ͕ɺ 
 ࣗ෼ͷ࣮૷͕औΓࠐ·ΕΔ͜ͱʹΑͬͯಘΒΕΔ໊༪ͳΜ͔Ͱ͸ 
 ͳ͘ɺਅʹRubyͷൃలΛئ͍ͬͯΔਓ͔Β͔͠ग़ͯ͜ͳ͍ݴ༿ 
 ͩͱɺࢲ͸͜ΕΛݟͨͱ͖ʹײ͡·ͨ͠ • Έͳ͞Μʹ΋஌ͬͯ΋Β͍͍ͨͱࢥͬͯࠓ೔঺հ͠·ͨ͠

Slide 37

Slide 37 text

37 ᶅ ॳ৺ऀͰ΋CFPΛग़ͯ͠ 
 ɹ ྑ͍ͱ͍͏͜ͱ

Slide 38

Slide 38 text

38 • ࢲ͸ΤϯδχΞʹͳ͔ͬͯΒ·ͩ໿1೥ͰɺԿΛͱͬͯ΋ 
 ࣗ৴͕͋Δͱ͸ݴ͑·ͤΜ • ͔͠͠ɺRubyKaigiͱKaigi on RailsʹCFPΛग़ͯ͠Έ·ͨ͠ • CFPͷaccept / reject ΛܾΊΔͷ͸ӡӦଆͳͷͰɺ 
 ॳ৺ऀ͕ʢ΋͔ͨ͠͠ΒϨϕϧͷ௿͍ʣCFPΛఏग़ͯ͠΋ 
 ୭ʹ΋໎࿭͸͔͔Βͳ͍ͱࢥ͍·͢ • ࠷ॳ͸ΈΜͳॳ৺ऀͩͬͨ͸ͣ • Ή͠Ζॳ৺ऀͷൃද಺༰͕͞͞Δ૚΋͖ͬͱ͍Δ͸ͣ ॳ৺ऀͰ΋CFPΛग़ͯ͠ྑ͍ͱ͍͏͜ͱ

Slide 39

Slide 39 text

39 • CFPΛఏग़͢Δͱ͍͏ߦಈΛͨ͜͠ͱʹΑͬͯಘΒΕΔ 
 ஌ࣝ΍ܦݧɺਓͱͷग़ձ͍͕͋Δͱࢥ͍·͢ • ࠷ॳ͸ؾ͕Ҿ͚ͨΓͳ͔ͳ͔༐ؾ͕ग़ͳ͍͔΋͠Ε·ͤΜ͕ɺ 
 ࢲͷΑ͏ʹ஌ࣝ΍ܦݧ͕গͳ͍ਓ͕CFPΛग़ͯ͠΋ 
 ໎࿭͸͔͔͍ͬͯ·ͤΜ͠ɺग़ͯ͠Έͯྑ͔ͬͨͳͱײ͍ͯ͡·͢ • ΋͠໎͍ͬͯΔํ͕͓ΒΕͨΒɺ͜ͷ࿩͕ͦͷਓͷഎதΛԡ͢ 
 ͖͔͚ͬʹͳΔ͜ͱΛئ͍ͬͯ·͢ ॳ৺ऀͰ΋CFPΛग़ͯ͠ྑ͍ͱ͍͏͜ͱ

Slide 40

Slide 40 text

40 • Ruby master Feature #12142 
 ʢνΣΠϯ๏͔ΒΦʔϓϯΞυϨε๏΁ͷมߋͷఏҊ͕ߦΘΕͨ 
 ɹεϨουʣ • Rubyͷ഑ྻ(Array)Λຐվ଄ͯ͠ɺ࿈૝഑ྻͱͯ͠࢖ͬͯΈͨ 
 ʢϋογϡςʔϒϧͷنଇΛࢀߟʹͨ͠هࣄʣ ࢀߟʹͨ͠هࣄ

Slide 41

Slide 41 text

͝ਗ਼ௌͲ͏΋͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

Slide 42

Slide 42 text

42 ಇ͘ͻͱͷ݈߁Λੈքதʹ૑Δ