Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Enter the OSS world [RuboCop] II. lost boundary
Search
Koichi ITO
December 09, 2017
Programming
1
2.4k
Enter the OSS world [RuboCop] II. lost boundary
Rails Developers Meetup 2017
https://railsdm.github.io/2017/
Koichi ITO
December 09, 2017
Tweet
Share
More Decks by Koichi ITO
See All by Koichi ITO
Carving the Way to Ruby Engineering
koic
3
800
Beyond the RuboCop Defaults
koic
3
3.6k
Minify Ruby Code
koic
2
2.2k
Permanent Agility
koic
37
7.9k
RuboCop: LSP and Prism
koic
3
4.3k
Organizational Pattern Hatching
koic
0
1.5k
A Practitioner's Journey from Ruby 1.8 to Present
koic
1
2k
A Story Featuring Right Hand Archetype
koic
0
1.1k
Without Practice, No Emergence
koic
4
2.5k
Other Decks in Programming
See All in Programming
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
270
動作確認やテストで漏れがちな観点3選
starfish719
6
1k
チームリードになって変わったこと
isaka1022
0
200
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
3
750
楽しく向き合う例外対応
okutsu
0
120
クリーンアーキテクチャから見る依存の向きの大切さ
shimabox
2
300
AWS Organizations で実現する、 マルチ AWS アカウントのルートユーザー管理からの脱却
atpons
0
150
ファインディの テックブログ爆誕までの軌跡
starfish719
2
1.1k
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
270
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
9
2.2k
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
1k
CI改善もDatadogとともに
taumu
0
120
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
The Language of Interfaces
destraynor
156
24k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
It's Worth the Effort
3n
184
28k
A Philosophy of Restraint
colly
203
16k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Done Done
chrislema
182
16k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Transcript
&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
None
None
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.
None
None
0DUPCFS 3VCP$PQSFMFBTFE
None
ࠒ͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ &QJTPEFT 1BSU* 1BSU** 1BSU*** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕͏ܗʹͳ͍͔ͬͯ͘ͷ
&QJTPEFT 1BSU* ࠒ͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ 1BSU** 1BSU*** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕͏ܗʹͳ͍͔ͬͯ͘ͷ
Enter the OSS world RuboCop I. presage comment
1SFNPOJUJPO
"3BJMTBQQMJDBUJPO EFWFMPQNFOU
3FWJFXDPNNFOU
ࣗͨͪͷࢦఠͨ͜͠ͱ ଞͷػձͰࢦఠ͞Ε͏Δ
None
044 ใԽٕज़Λ௨ͯ͡ʜ 3JEFPO044
IUUQTUXJUUFSDPNPOLTUBUVT
&QJTPEFT 1BSU* ࠒ͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ 1BSU** 1BSU*** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕͏ܗʹͳ͍͔ͬͯ͘ͷ
ࠒ͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ &QJTPEFT 1BSU* 1BSU** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕͏ܗʹͳ͍͔ͬͯ͘ͷ 1BSU***
Enter the OSS world RuboCop II. lost boundary
044ʹͦΕͳΓʹ͋Γɺ ΞϓϦέʔγϣϯ͔Βܨ͕͍ͬͯ ΔҎ্ɺଞਓࣄͷίʔυͰͳ͍ 3JEFPO044
ؔΘΓํͷελΠϧྫ w۩ମతʹࠔ͍ͬͯΔ w͓͠Ζͦ͏ wແཧ͠ͳ͍ όʔϯΞτ͠ͳ͍Α͏τϦΞʔδ͢Δ
$MJDLlCVHzMBCFM
3BJMT).PS)0%FQFOEFOU
8IBUJTUIJT$PQ
CCBUTPWSVCPDPQ <'JY>'JYA3BJMT)BT.BOZ0S)BT0OF%FQFOEFOUA JODPSSFDUMZqBHTAXJUI@PQUJPOTACMPDLT
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
XJUI@PQUJPOTPG"45 SVCZQBSTFFXJUI@PQUJPOTEFQFOEFOUEFTUSPZEPcBTTPDc BTTPDIBT@POFGPPFOE` ! CMPDL TFOEOJMXJUI@PQUJPOT IBTI
QBJS TZNEFQFOEFOU TZNEFTUSPZ BSHT QSPDBSHBTTPD TFOE MWBSBTTPD IBT@POF TZNGPP
XJUI@PQUJPOTPG"45 QPXFSFECZIUUQTHJUIVCDPNLPJDSVCZ@BTU@WJTVBMJ[FS
*NQMFNFOUBUJPO 3FE (SFFO 3FGBDUPS 5FTUDPEFJTNPSFPCWJPVTBOEFBTJFSUP VOEFSTUBOEUIBOUIFPQFSBUJPOPG"45
0QFOB13
$POWFSTBUJPO AJT@IBT@NBOZ@PS@IBT@POF@XJUIPVU@PQUJPOT AJT BOFYJTUJOHNFUIPEOBNF
"CPVU/BNJOH1SFEJDBUF/BNF
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
$POWFSTBUJPO
"OUJGBU13
ผͱͯ͠Γग़ͤΔ Α͏Ͱ͋Εผͷ13Ͱ ରॲ͢ΔΑ͏ʹ͍ͯ͠Δ ͱͱજΜͰ͍ͨͱͷରቂ ͪΖΜͦͷ13Ͱͷมߋ͕దͰ͋Εɺͦͷ13Ͱ ରԠ͢Δ
CCBUTPWSVCPDPQ "EEOFXA*OUFSOBM"⒎BJST%ZOBNJD1SFEJDBUF/BNFADPQ
5IFpSTUEFTJHO /BNJOH 1SFEJDBUF/BNF &YJTUJOH DPQDMBTT
5IFpSTUEFTJHO /BNJOH 1SFEJDBUF/BNF NPEVMF $POpHVSBCMF 1SFEJDBUF/BNJOH /BNJOH 1SFEJDBUF/BNF NJYJO &YUSBDU
NPEVMF $IFDLTUBUJD NFUIPET &YJTUJOH DPQDMBTT 4IBSF DPOpHVSBUJPO
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
*NQMFNFOUBUJPOUFSN QPXFSFECZIUUQTHJUIVCDPNZZBHJKQDBM
0QFOB13
None
$POWFSTBUJPO
$POWFSTBUJPO
*OUFSOBM"⒎BJSTEFQBSUNFOU JOUFSOBM"1* ˣ /BNJOHEFQBSUNFOU QVCMJTIFE"1* .BLFTFOTF✨
CCBUTPWSVCPDPQ "EEA.FUIPE%FpOF.BDSPTAPQUJPOUP A/BNJOH1SFEJDBUF/BNFADPQ
0QFOB13
5IFTFDPOEEFTJHO /BNJOH 1SFEJDBUF/BNF /BNJOH 1SFEJDBUF/BNF "EE .FUIPE%FpOF.BDSPT PQUJPOUPDPOpHVSBUJPO *OUFSOBM *NQSPWFNFOU
&YJTUJOH DPQDMBTT
%FpOFEFGBVMUQVCMJTIFE"1* DPOpHEFGBVMUZNM /BNJOH1SFEJDBUF/BNF .FUIPEEFpOJUJPONBDSPTGPSEZOBNJDBMMZHFOFSBUFENFUIPET .FUIPE%FpOJUJPO.BDSPT EFpOF@NFUIPE EFpOF@TJOHMFUPO@NFUIPE RuboCopར༻ऀ͕͏σϑΥϧτͷެ։ϝ ιουΛconfig/default.ymlʹఆٛ͢Δ
%FpOFJOUFSOBM"1* SVCPDPQZNM /BNJOH1SFEJDBUF/BNF .FUIPEEFpOJUJPONBDSPTGPSEZOBNJDBMMZHFOFSBUFENFUIPE .FUIPE%FpOJUJPO.BDSPT EFpOF@NFUIPE EFpOF@TJOHMFUPO@NFUIPE EFG@OPEF@NBUDIFS EFG@OPEF@TFBSDI RuboCopࣗମͷ։ൃͰ͏෦తͳϝιου
ΛՃ͑ͯ.rubocop.ymlʹఆٛ͢Δ
w ར༻ऀʹରͯ͠ಈతͳϝιο υఆٛͷνΣοΫΛҰ؏͠ ͯͰ͖ΔΑ͏ʹͳͬͨ w ಈతͳϢʔβʔϝιουఆٛ ͕૿͑ΔΑ͏Ͱ͋ΕઃఆΛ Ճ͢ΕΑ͍ *NQSPWFEEFTJHO
None
w 044DPNNVOJUZJT $PODMVTJPO
044 1SPQSJFUBSZ 4PDJBM 6OTPDJBM FH"OBQQMJDBUJPO EFWFMPQNFOU BGUFS(JU)VC FH"OBQQMJDBUJPO EFWFMPQNFOU CFGPSF(JU)VC
*UJTPQFOUPUIF QVCMJDVOEFS044 MJDFOTFCVUUIFSFJT OPEJBMPHVF 044Y6OTPDJBM1VCMJDSFQP 044DPNNVOJUZ
044 1SPQSJFUBSZ 4PDJBM 6OTPDJBM FH"OBQQMJDBUJPO EFWFMPQNFOU BGUFS(JU)VC FH"OBQQMJDBUJPO EFWFMPQNFOU CFGPSF(JU)VC
*UJTPQFOUPUIF QVCMJDVOEFS044 MJDFOTFCVUUIFSFJT OPEJBMPHVF 044Y4PDJBM044DPNNVOJUZ 044DPNNVOJUZ
SVCZPOSBJMTPSH "O044DPNNVOJUZ
None
$MJDLIFSF
None
None
w ϓϩδΣΫτͰѻ͍ͬͯΔίʔυ ͱ044ͷίʔυܨ͕ΓͰ͋Δ &OUFSUIF044XPSME w Πϯλʔωοτͱ͍͏ڥքͷͳ͍ ੈքͰΓͱΓ͢Δ͓͠Ζ͞ w ࠷ॳͷҰา͕͚͠Ε044(BUF
ͳͲͷࢀՃ͔Β࢝ΊΔͷҰͭ ·ͱΊ
࣍ճ༧ࠂ
ࠒ͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ &QJTPEFT 1BSU* 1BSU** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕͏ܗʹͳ͍͔ͬͯ͘ͷ 1BSU***
ࠒ͍ͬͯΔ044ͰͷൃݟΛ VQTUSFBNʹؐݩ͢Δ &QJTPEFT 1BSU* 1BSU** ιʔγϟϧίʔσΟϯάΛ௨ͯ͡Ͳ͏ Ϣʔβʔ͕͏ܗʹͳ͍͔ͬͯ͘ͷ 1BSU***
&OUFSUIF044XPSME <3VCP$PQ> *** &OUFSUIF044XPSME <3VCP$PQ> *** &OUFSUIF044XPSME <3VCP$PQ> ***
l Ұͷ͏ͪίʔυॻ͖ɺ 3VCZ,BJHJͳͲͷΓؒ Ͱ։ൃऀͨͪͱͦͷΛ͢Δ ʔ3VCZ,BJHJ1BSUZΑΓ
FOE