Slide 1

Slide 1 text

&OUFSUIF044XPSME <3VCP$PQ> **MPTUCPVOEBSZ &OUFSUIF044XPSME <3VCP$PQ> **MPTUCPVOEBSZ &OUFSUIF044XPSME <3VCP$PQ> **MPTUCPVOEBSZ &OUFSUIF044XPSME <3VCP$PQ> **MPTUCPVOEBSZ &OUFSUIF044XPSME <3VCP$PQ> **MPTUCPVOEBSZ 5&$)1-":4)*#6:" ,PJDIJ*50FTN 4BU 3BJMT%FWFMPQFST.FFUVQ 5&$)1-":4)*#6:" ,PJDIJ*50FTN 4BU 3BJMT%FWFMPQFST.FFUVQ 5&$)1-":4)*#6:" ,PJDIJ*50FTN 4BU 3BJMT%FWFMPQFST.FFUVQ 5&$)1-":4)*#6:" ,PJDIJ*50FTN 4BU 3BJMT%FWFMPQFST.FFUVQ 5&$)1-":4)*#6:" ,PJDIJ*50FTN 4BU 3BJMT%FWFMPQFST.FFUVQ

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

8FMDPNFGFFECBDL (FNpMF HJU@TPVSDF HJUIVC \cSFQPcIUUQTHJUIVCDPN\SFQP^HJU^ ! HFNSBJMT HJUIVCSBJMTSBJMT HFNBDUJWFSFDPSEPSBDMF@FOIBODFEBEBQUFS HJUIVCbSTJNPSBDMF FOIBODFE Preparing for upgrade to Rails 5.2 uses master branch instead of beta.

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

0DUPCFS 3VCP$PQSFMFBTFE

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

೔ࠒ࢖͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ࿩ &QJTPEFT 1BSU* 1BSU** 1BSU*** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕࢖͏ܗʹͳ͍͔ͬͯ͘ͷ࿩

Slide 10

Slide 10 text

&QJTPEFT 1BSU* ೔ࠒ࢖͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ࿩ 1BSU** 1BSU*** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕࢖͏ܗʹͳ͍͔ͬͯ͘ͷ࿩

Slide 11

Slide 11 text

Enter the OSS world RuboCop I. presage comment

Slide 12

Slide 12 text

1SFNPOJUJPO

Slide 13

Slide 13 text

"3BJMTBQQMJDBUJPO EFWFMPQNFOU

Slide 14

Slide 14 text

3FWJFXDPNNFOU

Slide 15

Slide 15 text

ࣗ෼ͨͪͷࢦఠͨ͜͠ͱ͸ ଞͷػձͰ΋ࢦఠ͞Ε͏Δ

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

044 ৘ใԽٕज़Λ௨ͯ͡ʜ 3JEFPO044

Slide 18

Slide 18 text

IUUQTUXJUUFSDPNPOLTUBUVT

Slide 19

Slide 19 text

&QJTPEFT 1BSU* ೔ࠒ࢖͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ࿩ 1BSU** 1BSU*** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕࢖͏ܗʹͳ͍͔ͬͯ͘ͷ࿩

Slide 20

Slide 20 text

೔ࠒ࢖͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ࿩ &QJTPEFT 1BSU* 1BSU** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕࢖͏ܗʹͳ͍͔ͬͯ͘ͷ࿩ 1BSU***

Slide 21

Slide 21 text

Enter the OSS world RuboCop II. lost boundary

Slide 22

Slide 22 text

044ʹ΋໰୊͸ͦΕͳΓʹ͋Γɺ ΞϓϦέʔγϣϯ͔Βܨ͕͍ͬͯ ΔҎ্ɺଞਓࣄͷίʔυͰ͸ͳ͍ 3JEFPO044

Slide 23

Slide 23 text

ؔΘΓํͷελΠϧྫ w۩ମతʹࠔ͍ͬͯΔ໰୊ w͓΋͠Ζͦ͏ wແཧ͠ͳ͍ όʔϯΞ΢τ͠ͳ͍Α͏τϦΞʔδ͢Δ

Slide 24

Slide 24 text

$MJDLlCVHzMBCFM

Slide 25

Slide 25 text

3BJMT).PS)0%FQFOEFOU

Slide 26

Slide 26 text

8IBUJTUIJT$PQ

Slide 27

Slide 27 text

CCBUTPWSVCPDPQ <'JY>'JYA3BJMT)BT.BOZ0S)BT0OF%FQFOEFOUA JODPSSFDUMZqBHTAXJUI@PQUJPOTACMPDLT

Slide 28

Slide 28 text

8SJUFSFQSPEVDUJPOTQFDT DPOUFYUXJUI@PQUJPOTEFQFOEFOUEFTUSPZEP JUEPFTOPUSFHJTUFSBOP⒎FOTFEP FYQFDU@OP@P⒎FOTFT 36#:TUSJQ@JOEFOU DMBTT1FSTPO XJUI@PQUJPOTEFQFOEFOUEFTUSPZEP IBT@POFGPP FOE FOE 36#: FOE FOE # Goal: False positive don't occur below ! class Person with_options dependent: :destroy do has_one :foo end end

Slide 29

Slide 29 text

XJUI@PQUJPOTPG"45 SVCZQBSTFFXJUI@PQUJPOTEFQFOEFOUEFTUSPZEPcBTTPDc BTTPDIBT@POFGPPFOE` ! CMPDL TFOEOJMXJUI@PQUJPOT IBTI QBJS TZNEFQFOEFOU TZNEFTUSPZ BSHT QSPDBSHBTTPD TFOE MWBSBTTPD IBT@POF TZNGPP

Slide 30

Slide 30 text

XJUI@PQUJPOTPG"45 QPXFSFECZIUUQTHJUIVCDPNLPJDSVCZ@BTU@WJTVBMJ[FS

Slide 31

Slide 31 text

*NQMFNFOUBUJPO 3FE (SFFO 3FGBDUPS 5FTUDPEFJTNPSFPCWJPVTBOEFBTJFSUP VOEFSTUBOEUIBOUIFPQFSBUJPOPG"45

Slide 32

Slide 32 text

0QFOB13

Slide 33

Slide 33 text

$POWFSTBUJPO AJT@IBT@NBOZ@PS@IBT@POF@XJUIPVU@PQUJPOT AJT BOFYJTUJOHNFUIPEOBNF

Slide 34

Slide 34 text

"CPVU/BNJOH1SFEJDBUF/BNF

Slide 35

Slide 35 text

EFG@OPEF@NBUDIFS EFG@OPEF@NBUDIFSJT@YYY 1"55&3/ TFOEOJM \IBT@NBOZIBT@POF^@ 1"55&3/ def_node_matcher dynamic defines a method which applies a pattern to an AST node. /PUF/BNJOH1SFEJDBUF/BNFDPQEPFTOPUBXBSFPG EZOBNJDBMMZEFpOFENFUIPEPSMPXFS -JLFEFpOF@NFUIPE EFpOF@TJOHMFHPO@NFUIPE

Slide 36

Slide 36 text

$POWFSTBUJPO

Slide 37

Slide 37 text

"OUJGBU13

Slide 38

Slide 38 text

ผ໰୊ͱͯ͠੾Γग़ͤΔ Α͏Ͱ͋Ε͹ผͷ13Ͱ ରॲ͢ΔΑ͏ʹ͍ͯ͠Δ ΋ͱ΋ͱજΜͰ͍ͨ໰୊ͱͷରቂ ΋ͪΖΜͦͷ13Ͱͷมߋ͕ద੾Ͱ͋Ε͹ɺͦͷ13Ͱ ରԠ͢Δ

Slide 39

Slide 39 text

CCBUTPWSVCPDPQ "EEOFXA*OUFSOBM"⒎BJST%ZOBNJD1SFEJDBUF/BNFADPQ

Slide 40

Slide 40 text

5IFpSTUEFTJHO /BNJOH 1SFEJDBUF/BNF &YJTUJOH DPQDMBTT

Slide 41

Slide 41 text

5IFpSTUEFTJHO /BNJOH 1SFEJDBUF/BNF NPEVMF $POpHVSBCMF 1SFEJDBUF/BNJOH /BNJOH 1SFEJDBUF/BNF NJYJO &YUSBDU NPEVMF $IFDLTUBUJD NFUIPET &YJTUJOH DPQDMBTT 4IBSF DPOpHVSBUJPO

Slide 42

Slide 42 text

5IFpSTUEFTJHO /BNJOH 1SFEJDBUF/BNF NPEVMF $POpHVSBCMF 1SFEJDBUF/BNJOH /BNJOH 1SFEJDBUF/BNF NJYJO *OUFSOBM"⒎BJST %ZOBNJD 1SFEJDBUF/BNF NJYJO &YUSBDU NPEVMF "QQFOE OFXDMBTT $IFDLTUBUJD NFUIPET $IFDLEZOBNJD NFUIPET &YJTUJOH DPQDMBTT 4IBSF DPOpHVSBUJPO

Slide 43

Slide 43 text

*NQMFNFOUBUJPOUFSN QPXFSFECZIUUQTHJUIVCDPNZZBHJKQDBM

Slide 44

Slide 44 text

0QFOB13

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

$POWFSTBUJPO

Slide 47

Slide 47 text

$POWFSTBUJPO

Slide 48

Slide 48 text

*OUFSOBM"⒎BJSTEFQBSUNFOU JOUFSOBM"1* ˣ /BNJOHEFQBSUNFOU QVCMJTIFE"1* .BLFTFOTF✨

Slide 49

Slide 49 text

CCBUTPWSVCPDPQ "EEA.FUIPE%FpOF.BDSPTAPQUJPOUP A/BNJOH1SFEJDBUF/BNFADPQ

Slide 50

Slide 50 text

0QFOB13

Slide 51

Slide 51 text

5IFTFDPOEEFTJHO /BNJOH 1SFEJDBUF/BNF /BNJOH 1SFEJDBUF/BNF "EE .FUIPE%FpOF.BDSPT PQUJPOUPDPOpHVSBUJPO *OUFSOBM *NQSPWFNFOU &YJTUJOH DPQDMBTT

Slide 52

Slide 52 text

%FpOFEFGBVMUQVCMJTIFE"1* DPOpHEFGBVMUZNM /BNJOH1SFEJDBUF/BNF .FUIPEEFpOJUJPONBDSPTGPSEZOBNJDBMMZHFOFSBUFENFUIPET .FUIPE%FpOJUJPO.BDSPT EFpOF@NFUIPE EFpOF@TJOHMFUPO@NFUIPE RuboCopར༻ऀ͕࢖͏σϑΥϧτͷެ։ϝ ιουΛconfig/default.ymlʹఆٛ͢Δ

Slide 53

Slide 53 text

%FpOFJOUFSOBM"1* SVCPDPQZNM /BNJOH1SFEJDBUF/BNF .FUIPEEFpOJUJPONBDSPTGPSEZOBNJDBMMZHFOFSBUFENFUIPE .FUIPE%FpOJUJPO.BDSPT EFpOF@NFUIPE EFpOF@TJOHMFUPO@NFUIPE EFG@OPEF@NBUDIFS EFG@OPEF@TFBSDI RuboCopࣗମͷ։ൃͰ࢖͏಺෦తͳϝιου ΛՃ͑ͯ.rubocop.ymlʹఆٛ͢Δ

Slide 54

Slide 54 text

w ར༻ऀʹରͯ͠΋ಈతͳϝιο υఆٛ΁ͷνΣοΫΛҰ؏͠ ͯͰ͖ΔΑ͏ʹͳͬͨ w ಈతͳϢʔβʔϝιουఆٛ ͕૿͑ΔΑ͏Ͱ͋Ε͹ઃఆΛ ௥Ճ͢Ε͹Α͍ *NQSPWFEEFTJHO

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

w 044DPNNVOJUZJT $PODMVTJPO

Slide 57

Slide 57 text

044 1SPQSJFUBSZ 4PDJBM 6OTPDJBM FH"OBQQMJDBUJPO EFWFMPQNFOU BGUFS(JU)VC FH"OBQQMJDBUJPO EFWFMPQNFOU CFGPSF(JU)VC *UJTPQFOUPUIF QVCMJDVOEFS044 MJDFOTFCVUUIFSFJT OPEJBMPHVF 044Y6OTPDJBM1VCMJDSFQP 044DPNNVOJUZ

Slide 58

Slide 58 text

044 1SPQSJFUBSZ 4PDJBM 6OTPDJBM FH"OBQQMJDBUJPO EFWFMPQNFOU BGUFS(JU)VC FH"OBQQMJDBUJPO EFWFMPQNFOU CFGPSF(JU)VC *UJTPQFOUPUIF QVCMJDVOEFS044 MJDFOTFCVUUIFSFJT OPEJBMPHVF 044Y4PDJBM044DPNNVOJUZ 044DPNNVOJUZ

Slide 59

Slide 59 text

SVCZPOSBJMTPSH "O044DPNNVOJUZ

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

$MJDLIFSF

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

w ϓϩδΣΫτͰѻ͍ͬͯΔίʔυ ͱ044ͷίʔυ͸஍ܨ͕ΓͰ͋Δ &OUFSUIF044XPSME w Πϯλʔωοτͱ͍͏ڥքͷͳ͍ ੈքͰ΍ΓͱΓ͢Δ͓΋͠Ζ͞ w ࠷ॳͷҰา͕೉͚͠Ε͹044(BUF ͳͲ΁ͷࢀՃ͔Β࢝ΊΔͷ΋Ұͭ ·ͱΊ

Slide 65

Slide 65 text

࣍ճ༧ࠂ

Slide 66

Slide 66 text

೔ࠒ࢖͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ࿩ &QJTPEFT 1BSU* 1BSU** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕࢖͏ܗʹͳ͍͔ͬͯ͘ͷ࿩ 1BSU***

Slide 67

Slide 67 text

೔ࠒ࢖͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ࿩ &QJTPEFT 1BSU* 1BSU** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕࢖͏ܗʹͳ͍͔ͬͯ͘ͷ࿩ 1BSU***

Slide 68

Slide 68 text

&OUFSUIF044XPSME <3VCP$PQ> *** &OUFSUIF044XPSME <3VCP$PQ> *** &OUFSUIF044XPSME <3VCP$PQ> ***

Slide 69

Slide 69 text

l Ұ೥ͷ͏ͪ೔ίʔυॻ͖ɺ 3VCZ,BJHJͳͲͷ࢒Γ೔ؒ Ͱ։ൃऀͨͪͱͦͷ࿩Λ͢Δ ʔ3VCZ,BJHJ1BSUZΑΓ

Slide 70

Slide 70 text

FOE