Slide 1

Slide 1 text

,PJDIJ*50&4. *OD A Practitioner's Journey from Ruby 1.8 to Present Have you been able to craft your job to be fun? େࡕ3VCZձٞ  4BU ϋʔτϯϗςϧ৺ࡈڮদ෩ϗʔϧ

Slide 2

Slide 2 text

@koic w044ϓϩάϥϚʔ w3VCP$PQίΞνʔϜ wגࣜձࣾӬ࿨γεςϜϚωδϝϯτ &4. *OD 
 ΤϯδχΞϦϯάϚωʔδϟʔ݉ 
 σΟεςΟϯάΠογϡυΤϯδχΞ

Slide 3

Slide 3 text

w ʰΦϒδΣΫτࢦ޲εΫϦϓτݴޠ3VCZʱ ͕ڭຊɻʰσεΫτοϓϦϑΝϨϯεʱΛ 
 ࣋ͪา͍ͯ௨ۈͯͨ͠ɻ 3VCZͱࢲ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

େࡕ3VCZձٞͷ&4.ϝϯόʔ 4 Q FBLFS @junk0612 4 Q FBLFS @koic -5 @maimux2x 4 UB f @haruguchiyuma " UUFOEFF @fugakkbn " UUFOEFF @nsgc " UUFOEFF @kakutani ϑΣϩʔ

Slide 6

Slide 6 text

w ೔ຊ3VCZΧϯϑΝϨϯε͔Βࠓ೥ͷ 3VCZ,BJHJ·Ͱ͢΂ͯεϙϯαʔͯ͠Δ 
 ੈք།Ұͷاۀ ެืͷͳ͍ আ͘  w 3VCZ,BJHJ -5          -5    ొஃഐग़ w ೔ຊࠃ಺Ͱ͸34QFDͱ)BNMॳظͷಋೖاۀ 3VCZͱ&4. *OD

Slide 7

Slide 7 text

044ίϛϡχςΟͱͷڞੜΛࢧԉ 3BJMT044ύονձ #esm_oss

Slide 8

Slide 8 text

w !KVOL-SBNBίϯτϦϏϡʔλʔ w !4)QBSTFZίϯτϦϏϡʔλʔ w !LPJD1BSTFSHFNίϛολʔ w !JNB[VNJ*3#ίϛολʔ w !GVHBLLCO3#4ίϯτϦϏϡʔλʔ ߏจղੳثݚڀ෦ IUUQTNBHB[JOFSVCZJTUOFUBSUJDMFT'PMMPX6Q,JSJTIJNB3VCZIUNM /&8

Slide 9

Slide 9 text

w3VCZͱΞδϟΠϧιϑτ ΢ΣΞ։ൃΛ௨ͯ͡ίϛϡ χςΟͱ੒௕͍ͨ͠ਓ w೔ຊશࠃ͔Βઈࢍืूத ΤϯδχΞืूத ͜Εɺωλ͡Όͳ͍Ͱ͔͢ΒͶʁ 🗾

Slide 10

Slide 10 text

3VCZ࣌୅͔Βݱࡏͷ࠷৽։ൃ൛Ͱ͋Δ 3VCZ·Ͱɺ3VCZͷόʔδϣϯΞοϓʹ ΑͬͯͲͷΑ͏ͳΠϕϯτ͕͋Γɺ౰࣌ͷ࢓ ࣄͰͷΞϓϦέʔγϣϯ։ൃ͋Δ͍͸044 
 ΤίγεςϜͰͲͷΑ͏ͳग़དྷࣄ΍ίʔυ΁ ͷมֵ͕͔͋ͬͨԹނ஌৽Λ͓࿩͠͠·͢ɻ ࠓ೔ͷ࿩ $'1ఏग़֓ཁΑΓ

Slide 11

Slide 11 text

ྺ࢙

Slide 12

Slide 12 text

 #FGPSF3BJMT 

Slide 13

Slide 13 text

w ຊ൪ϥϯλΠϜʹ3VCZ͕ೖ͍ͬͯͳ͍ w ։ൃ؀ڥͰ͋Ε͹3VCZΛΠϯείͰ͖Δ w +BWBͩͱෳ਺छͷ+&&αʔόʔʹσϓϩΠ͢Δ 
 &"3ϑΝΠϧͷBQQMJDBUJPOYNMͳΜ͔ͷ 
 αʔόʔݻ༗9.-ଐੑͷฤूΛ3&9.-ͰࣗಈԽ w 0ODF8SJUF3VO"OZXIFSF΁ͷάϧʔݴޠ🤔 U%JBSZ͕ΩϥʔΞϓϦ࣌୅

Slide 14

Slide 14 text

0.(ʹ࠾୒ʁ !LLE IUUQPCKFDUDMVCKQNMBSDINBHB[JOFIUNM

Slide 15

Slide 15 text

 "GUFS3BJMT 

Slide 16

Slide 16 text

w 3BJMTͱ͍͏ࠇધ͕΍͖ͬͯͨ w ౰࣌3BJMTͷ࠾୒͸·ͩϦεΫ w 3BJMTొ৔ͷ౰࣌͸TDB ff PMEͰ·ͱ΋ͳΞϓϦ ࡞ΕΔͷٙ࿭ʁ΍ͬͯΈͨΒશવͰ͖ͨ w ࣮ࡍͷͱ͜ΖTDB ff PME࢖͏ػձ͕ͳ͍Α͏ͳ ͓࢓ࣄͰ3VCZΛΩϝΔ࣌୅

Slide 17

Slide 17 text

w 3VCZPO3BJMTͰ΋Γ΋ΓίʔυΛॻ͚ΔΑ ͏ʹͳͬͨ୅ΘΓʹΩϚΓ͗͢ͷΦʔόʔ ϫʔΫʹͳͬͯ͠·ͬͨࣄྫ΋͋Γ w ౰࣌ੜ࢈ੑഒͱݴΘΕ͍ͯͨཪ͸  w 3VCZPO3BJMTͰఆ࣌ʹؼΖ͏"8%X3 Ωϝա͗஫ҙใ͕ग़Δ

Slide 18

Slide 18 text

w has_manyͳͲͰݴޠ಺%4-ͷڧྗ͞Λྲྀ෍ w Ҿ਺࠷ޙͷϋογϡͷϒϨʔεͷলུͰ 
 ΩʔϫʔυҾ਺ͬΆ͞ ౰࣌͸=>ه๏ͷΈ  w 3BJMTͰಋೖ͞ΕͨSymbol#to_proc͕3VCZ ʹϙʔςΟϯά͞ΕΔ 
 3BJMTʹΑΔ3VCZͷදݱྗ

Slide 19

Slide 19 text

͸͡·ΓͷSymbol#to_proc https://github.com/rails/rails/commit/69bf71f5e9b537f88acc0d4492a057336e7305d1

Slide 20

Slide 20 text

 .FSHF:"37 

Slide 21

Slide 21 text

w :"37͕ೖͬͯɺ"45ϕʔεͷ௚઀ධՁث͔ Β7.ʹΑΔόΠτίʔυ࣮ߦʹͳͬͨ w άϦʔϯεϨου͔ΒωΠςΟϒεϨουʹ ͳͬͨ (7-͕͋Δ΋ͷͷ*0଴ͪͳͲͷϒ ϩοΫத͸ଞͷεϨου͕࣮ߦͰ͖Δ  w ͭ·ΓΞοϓάϨʔυ͢Δͱ଎͘ͳΔ࣌୅ ΞϓϦίʔυԼͰͷมԽ

Slide 22

Slide 22 text

w key => valueʹՃ͑key: valueͷ)BTIه๏ಋೖ w ྩ࿨೥ ࣌୅͸3VCZEFW ʹ 
 ʮ3VCZͷ)BTIه๏ʯͱίϝϯτ͢Δ͜ͱ͕ʂ w ΩʔϫʔυҾ਺͕ೖͬͨͷ͸3VCZ͔Β͕ͩɺϝιο υҾ਺ͷ࠷ޙͷϋογϡ͕ຊ౰ʹͦΕͬΆ͘ w ౰࣌ࢍ൱྆࿦ͷlambdaͷ->ه๏͕ೖͬͨ w จࣈͱه߸ͷࣝผௐ࿨͕ઈົ ΞϓϦίʔυ͕ݱ୅తͳݟͨ໨ʹ

Slide 23

Slide 23 text

w 3VCZҎલͷจࣈྻ͸όΠτͷγʔέϯε w ⤴Ͱଟ͘ͷEncoding::CompatibilityErrorͱରቂ w # encoding: UTF-8ϚδοΫίϝϯτʹΑΔ 
 εΫϦϓτΤϯίʔσΟϯάͷࢦఆͱ String#force_encodingͳͲʹΑΔετϦʔϜ 
 ΤϯίʔσΟϯάม׵Ͱ৐Γ੾ͬͨΑ͏ͳ w ͓͔͛Ͱ΁ͷΞοϓάϨʔυ͸೉͘͠ͳ͔ͬͨʁ ΞϓϦίʔυ΁ͷඇޓ׵ աڈ࠷େ

Slide 24

Slide 24 text

 5IF'JSTU4UBCMF 

Slide 25

Slide 25 text

w 3VCZ(FNT͕ඪ४ఴ෇ʹͳΔ w ruby setup.rbίϚϯυʹΑΔΠϯετʔϧ΍ 
 apt-get install railsͱ͍͏gem؅ཧͱࠞ ͥΔͳةݥͷ౫ଡ w ͜ͷޙ͘Β͍ʹ3BJMTʹ#VOEMFS͕౷߹͞Εͯ ύοέʔδ؅ཧͷΤίγεςϜ͕҆ఆͨ͠ ܥ࠷ॳͷ҆ఆόʔδϣϯ

Slide 26

Slide 26 text

 .BOZ/FX'FBUVSFT 

Slide 27

Slide 27 text

w ΩʔϫʔυҾ਺ɺModule#prependɺ 
 γϯϘϧϦςϥϧɺEnumerable#lazyɺ 
 َӢɺTracePointɺ3F fi OFNFOUTͳͲͳͲ w ໿೥ӽ͠ͷΞοϓάϨʔυͰຊ౰ʹ৽ػೳ੝ Γͩ͘͞Μͩͬͨ w ϝλϓϩΪϟϯά΋େتͼʁ ޫͷػೳͱҋͷػೳͨ͘͞Μ

Slide 28

Slide 28 text

w εΫϦϓτΤϯίʔσΟϯάͷσϑΥϧτ͕ 65'ʹͳͬͨ ࠓ౓͸Ϛδίϝෆཁ εΫϦϓτΤϯίʔσΟϯάෆཁ

Slide 29

Slide 29 text

 *NQSPWFNFOUT 

Slide 30

Slide 30 text

w ΞϓϦ໘Ͱେ͖ͳมߋ͸ࢥ͍ग़ͤͳ͍ վળʹײँ

Slide 31

Slide 31 text

 4ZNCPM($ 

Slide 32

Slide 32 text

w 3BJMTͰ͸4ZNCPM($ඞਢͷͨΊಋೖ 
 ͞Εͨ3VCZҎ্Λཁٻ͢Δ w ݫີʹ͸όάϑΟοΫεͷҎ্͕ཁ݅ վળʹײँ

Slide 33

Slide 33 text

 4FWFSBM6TFGVM4ZOUBYFT 

Slide 34

Slide 34 text

w 4BGF/BWJHBUJPO0QFSBUPS ΅ͬͪԋࢉࢠ 
 ʹΑΔ3BJMTΞϓϦͷtryͱtry!ͷஔ͖׵͑ w .Ͱे෼ͳ৔߹ʹ&.Λكʹݟ͔͚Δ 4BGF/BWJHBUJPO0QFSBUPS

Slide 35

Slide 35 text

w 4RVJHHMZ)FSFEPDʹΑΔ3BJMTΞϓϦͷ strip_heredocͷஔ͖׵͑ 4RVJHHMZ)FSFEPD

Slide 36

Slide 36 text

• # frozen_string_literal: trueʹΑ ΔϚδοΫίϝϯτͰfreeze͞Εͨ String͕खʹೖΔΑ͏ʹͳͬͨ • RubyͷॊΒ͔͕͞ݮͬͨʁ w ౰࣌෺͕ٞৢ͞Ε͍ͯͨ GTUSJOHMJUFSBMͷಋೖ

Slide 37

Slide 37 text

3VCZͰԆظޙͷԻࠫଡ͸ʁ https://mametter.hatenablog.com/entry/20151004/p1

Slide 38

Slide 38 text

3BJMTͱGTUSJOHMJUFSBMT https://github.com/rails/rails/pull/30342

Slide 39

Slide 39 text

 *OUFHFS6OJ fi DBUJPO 

Slide 40

Slide 40 text

ܯࠂͷ઒͕ྲྀΕΔ w 3VCZͷͱ͖ͱҟͳΓɺ·ͣඇޓ׵΁ͷ 
 ඇਪ঑ܯࠂ͞Ε͍ͯͨ w 3VCZEFWΛ࢖͏͜ͱͰϦϦʔε࣌ ʹ઒ͷ൙ཞ͕ݮΔΑ͏ʹύονΛૹ͍ͬͯͨ

Slide 41

Slide 41 text

044ͱ೔ৗ w HIR HFNTSD ؅ཧϦϙδτϦ ͷඇਪ঑ܯࠂ΁ ύονΛग़͢Τί γεςϜࢀՃͷ ͖͔͚ͬʹͳΔ

Slide 42

Slide 42 text

 *NQSPWFNFOUT 

Slide 43

Slide 43 text

w rescueelseensure͕doend 
 ϒϩοΫʹॻ͚ΔΑ͏ʹͳͬͨͷ͸ॻ͖৺஍ ྑ͍ վળʹײँ

Slide 44

Slide 44 text

 .+*53VCZ7."45 

Slide 45

Slide 45 text

w ͍ͪ͹Μ࣮༻໘ͰӨڹ͍ͯͦ͠͏ w 3VCZΛΠϯετʔϧͨ͠ޙʹ 
 gem i bundlerͱ͍͏ఆܕّྱ͕ෆཁʹ #VOEMFS͕ඪ४ఴ෇͞ΕΔ

Slide 46

Slide 46 text

w .+*5͕ಋೖ͞Ε͕ͨɺ3BJMTΞϓϦέʔγϣ ϯͰͷ࣮༻ࣄྫ͸Չฉʹͯ͠ฉ͔ͣͩͬͨ w 3VCZ7."CTUSBDU4ZOUBY5SFFʹΪϟϯά ͕ΞϓϦ৔֎Ͱ੝Γ্͕ΓΛݟ͍ͤͯͨ w ΞϓϦͷ࣮༻໘Ͱ͸FOEMFTTSBOHFͳͲͷ 
 ৽ػೳΛ࢖͑ΔΑ͏ʹͳͬͨ ͍Ζ͍Ζͱ࣮ݧతͳ೩ྉ౤Լ

Slide 47

Slide 47 text

 4VQFS)BSE.PEF3VCZ 

Slide 48

Slide 48 text

LXBSHT෼཭ w ͍͍ͩͨฐࣾͷ ύονձʹग़ͯͨ ਓͷपลͰΤί γεςϜଆͷ LXBSHTͷ෼཭ͷ ରԠΛਐΊ͍ͯͨ ҹ৅

Slide 49

Slide 49 text

w OVNCFSFEQBSBNFUFSͷελΠϧੋඇʹͭ ͍ͯʮ3VCZ͸8FCΛ࡞ΔͨΊͷݴޠͰ͸ 
 ͳ͘εΫϦϓτݴޠʯͱ͍͏ͷ͸ͳΔ΄Ͳ w ݸਓతʹ͸อक͢Δίʔυʹ͸໊લ͕͍ͭͯ ͍ͯ΋Β͍͍͚ͨΕͲɺॻ͖ࣺͯ΍εϥΠυ ෼ྔΛݮΒ͢ͷʹศར ύλʔϯϚον΍φϯύϥ

Slide 50

Slide 50 text

 "CTUSBDU*OUFSQSFUBUJPO 

Slide 51

Slide 51 text

CVHTSVCZMBOHPSHJTTVFT 3VCZݴޠʹ͍͔ͳΔܗͰ͋Εܕએݴ ΍ܕ஫ऍΛಋೖ͢Δͭ΋Γ͸͋Γ·ͤΜ

Slide 52

Slide 52 text

w ܕΛॻ͔ͣʹɺܕͷϝϦοτΛڗड͍ͨ͠ w 3#4ͩͱΞϓϦͰ·ͩܕΛॻ͘ίετ͕ߴ͘ ࠳ં͢ΔͷΛݟ͔͚Δ %3:Ͱͳ͘ਏ͍  w 3#*ͷಋೖίʔυ͸΋͸΍3VCZʹݟ͑ͣਏ͍ w ྫ͑͹3#4͕πʔϧؒͷཪଆͷ௿ϨΠϠʔݴޠ ʹͳΔະདྷ͸ʁ ந৅ղऍͱ͍͏ୈͷಓ

Slide 53

Slide 53 text

 :+*5 

Slide 54

Slide 54 text

w .+*5ʹՃ͑ͯ-##7ʹج͍ͮͨ4IPQJGZ੡ +*5Ͱ͋Δ:+*5͕ಋೖ͞Εͨ w 3BJMTΞϓϦͰ༗ޮԽͨ͠ޮՌଌఆ͕࿩୊ʹ ͳΔ͜ͱ͕͋Δ͚ΕͲ-41Ͱ΋ΫϥΠΞϯτ ͔ΒRUBY_YJIT_ENABLED=trueͯ͠ΈΑ͏ w FHWTDPEFSVCPDPQ TUFFQWTDPEF :+*5

Slide 55

Slide 55 text

 3VTU:+*58"4. 

Slide 56

Slide 56 text

w :+*5ͷ࣮૷͕3VTUʹͳͬͨ w 3VTU:+*5ͷϏϧυͰࠔΔͱ͍͏࿩ΛपลͰ ฉ͔ͳ͍ w %0$,&30''*$*"-*."(&͕࢖ΘΕ͍ͯΔ ͷ͔ɺ3VTUΠϯετʔϧ͸ڭཆͳͷ͔ɺ :+*5ແޮͰͷϏϧυͱ͍ͯ͠Δͷ͔ 3VTU:+*5

Slide 57

Slide 57 text

w ࠷ۙ5SZ3VCZͷσϑΥϧτ͕0QBM͔Β 8"4.ʹͳ͍ͬͯͨ ΑΓྑ͍ೖ໳ʹ 8FC"TTFNCMZ 8"4. IUUQTUSZSVCZMBOHPSHQMBZHSPVOE

Slide 58

Slide 58 text

w ਖ਼نදݱ·ΘΓվળʹΑΔ3F%P4߈ܸରࡦ ͸࣮༻త w 3FBEPOMZͷStruct.new૬౰ͱͯ͠ Data.define͕ಋೖ͞Εͨ w 3BDUPSͷར༻ʹؔΘ͍͖ͬͯͦ͏ ͷݸਓతਪ͠

Slide 59

Slide 59 text

 6OJWFSTBM1BSTFS3BDJOH 

Slide 60

Slide 60 text

-SBNBBOE:"31 6OJWFSTBM1BSTFS೼ݖ૪ୣͷηϝϯτ

Slide 61

Slide 61 text

w !KVOL-SBNBίϯτϦϏϡʔλʔ w !4)QBSTFZίϯτϦϏϡʔλʔ w !LPJD1BSTFSHFNίϛολʔ w !JNB[VNJ*3#ίϛολʔ w !GVHBLLCO3#4ίϯτϦϏϡʔλʔ ߏจղੳثݚڀ෦ IUUQTNBHB[JOFSVCZJTUOFUBSUJDMFT'PMMPX6Q,JSJTIJNB3VCZIUNM

Slide 62

Slide 62 text

"CPWF"MM .BLF*U'VO