$30 off During Our Annual Pro Sale. View Details »

Enter the OSS world [RuboCop] II. lost boundary

Koichi ITO
December 09, 2017

Enter the OSS world [RuboCop] II. lost boundary

Rails Developers Meetup 2017
https://railsdm.github.io/2017/

Koichi ITO

December 09, 2017
Tweet

More Decks by Koichi ITO

Other Decks in Programming

Transcript

  1. &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

    View Slide

  2. View Slide

  3. View Slide

  4. 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.

    View Slide

  5. View Slide

  6. View Slide

  7. 0DUPCFS
    3VCP$PQSFMFBTFE

    View Slide

  8. View Slide

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

    View Slide

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

    View Slide

  11. Enter the OSS world
    RuboCop
    I. presage comment

    View Slide

  12. 1SFNPOJUJPO

    View Slide

  13. "3BJMTBQQMJDBUJPO
    EFWFMPQNFOU

    View Slide

  14. 3FWJFXDPNNFOU

    View Slide

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

    View Slide

  16. View Slide

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

    View Slide

  18. IUUQTUXJUUFSDPNPOLTUBUVT

    View Slide

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

    View Slide

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

    View Slide

  21. Enter the OSS world
    RuboCop
    II. lost boundary

    View Slide

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

    View Slide

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

    View Slide

  24. $MJDLlCVHzMBCFM

    View Slide

  25. 3BJMT).PS)0%FQFOEFOU

    View Slide

  26. 8IBUJTUIJT$PQ

    View Slide

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

    View Slide

  28. 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

    View Slide

  29. XJUI@PQUJPOTPG"45
    SVCZQBSTFFXJUI@PQUJPOTEFQFOEFOUEFTUSPZEPcBTTPDc
    BTTPDIBT@POFGPPFOE`
    !
    CMPDL
    TFOEOJMXJUI@PQUJPOT
    IBTI
    QBJS
    TZNEFQFOEFOU

    TZNEFTUSPZ




    BSHT
    QSPDBSHBTTPD


    TFOE
    MWBSBTTPD
    IBT@POF
    TZNGPP



    View Slide

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

    View Slide

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

    View Slide

  32. 0QFOB13

    View Slide

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

    View Slide

  34. "CPVU/BNJOH1SFEJDBUF/BNF

    View Slide

  35. 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

    View Slide

  36. $POWFSTBUJPO

    View Slide

  37. "OUJGBU13

    View Slide

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

    View Slide

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

    View Slide

  40. 5IFpSTUEFTJHO
    /BNJOH
    1SFEJDBUF/BNF
    &YJTUJOH
    DPQDMBTT

    View Slide

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

    View Slide

  42. 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

    View Slide

  43. *NQMFNFOUBUJPOUFSN
    QPXFSFECZIUUQTHJUIVCDPNZZBHJKQDBM

    View Slide

  44. 0QFOB13

    View Slide

  45. View Slide

  46. $POWFSTBUJPO

    View Slide

  47. $POWFSTBUJPO

    View Slide

  48. *OUFSOBM"⒎BJSTEFQBSUNFOU
    JOUFSOBM"1*

    ˣ
    /BNJOHEFQBSUNFOU
    QVCMJTIFE"1*

    .BLFTFOTF✨

    View Slide

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

    View Slide

  50. 0QFOB13

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  55. View Slide

  56. w 044DPNNVOJUZJT
    $PODMVTJPO

    View Slide

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

    View Slide

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

    View Slide

  59. SVCZPOSBJMTPSH
    "O044DPNNVOJUZ

    View Slide

  60. View Slide

  61. $MJDLIFSF

    View Slide

  62. View Slide

  63. View Slide

  64. w ϓϩδΣΫτͰѻ͍ͬͯΔίʔυ
    ͱ044ͷίʔυ͸஍ܨ͕ΓͰ͋Δ
    &OUFSUIF044XPSME

    w Πϯλʔωοτͱ͍͏ڥքͷͳ͍
    ੈքͰ΍ΓͱΓ͢Δ͓΋͠Ζ͞
    w ࠷ॳͷҰา͕೉͚͠Ε͹044(BUF
    ͳͲ΁ͷࢀՃ͔Β࢝ΊΔͷ΋Ұͭ
    ·ͱΊ

    View Slide

  65. ࣍ճ༧ࠂ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  70. FOE

    View Slide