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
rubocop-headquarters-2018.pdf
Search
Koichi ITO
July 14, 2018
Programming
3
5.7k
rubocop-headquarters-2018.pdf
Rails Developers Meetup 2018 Day 3 Extreme (
https://techplay.jp/event/679666
)
Koichi ITO
July 14, 2018
Tweet
Share
More Decks by Koichi ITO
See All by Koichi ITO
Carving the Way to Ruby Engineering
koic
3
760
Beyond the RuboCop Defaults
koic
3
3.5k
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.4k
Other Decks in Programming
See All in Programming
時計仕掛けのCompose
mkeeda
1
100
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
120
Simple組み合わせ村から大都会Railsにやってきた俺は / Coming to Rails from the Simple
moznion
3
3.5k
ファインディの テックブログ爆誕までの軌跡
starfish719
1
700
2024年のkintone API振り返りと2025年 / kintone API look back in 2024
tasshi
0
160
Vue.jsでiOSアプリを作る方法
hal_spidernight
0
120
Rubyでつくるパケットキャプチャツール
ydah
0
420
動作確認やテストで漏れがちな観点3選
starfish719
5
750
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
29
4.7k
Amazon Bedrock Multi Agentsを試してきた
tm2
1
190
PicoRubyと暮らす、シェアハウスハック
ryosk7
0
250
Package Traits
ikesyo
2
230
Featured
See All Featured
Done Done
chrislema
182
16k
A Modern Web Designer's Workflow
chriscoyier
693
190k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Designing for Performance
lara
604
68k
VelocityConf: Rendering Performance Case Studies
addyosmani
327
24k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
30
2.1k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
What's in a price? How to price your products and services
michaelherold
244
12k
How STYLIGHT went responsive
nonsquared
96
5.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
590
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Transcript
4BU 3VCP$PQ )FBERVBSUFST 3BJMT%FWFMPQFST.FFUVQ%BZ&YUSFNF %3&$0.$P -UE The road to
RuboCop 1.0 after RubyKaigi 2018 ,PJDIJ*50FTN
!LPJD w 3VCP$PQDPNNJUUFS w "30SBDMFFOIBODFE BEBQUFSDPNNJUUFS w &JXB4ZTUFN .BOBHFNFOU *OD
!FTNJOD -VODI4QPOTPS )FSF
3BJMTENBOENF
3BJMTEN
3BJMTEN
3BJMTENEBZ
3BJMTENEBZ
None
None
None
3BJMTίϛϡχςΟҭͪͷࢹ
4BU 3VCP$PQ )FBERVBSUFST 3BJMT%FWFMPQFST.FFUVQ%BZ&YUSFNF %3&$0.$P -UE The road to
RuboCop 1.0 after RubyKaigi 2018 ,PJDIJ*50FTN
ࠓͷ
IUUQTTQFBLFSEFDLDPNLBLVUBOJBHJMFNBOJGFTUPEFDBEF TMJEF !LBLVUBOJ
w"CPVU3VCP$PQ)2 w5IFSPBEUP 3VCP$PQBGUFS 3VCZ,BJHJ "HFOEB
1FPQMF 1SPEVDU
1FPQMF
w ݄ʹདྷ͍ͯͨ͠ !CCBUTPWʹΑͬͯެ։͞ΕΔ w (JU)VC্ʹࢄ͍ͯͨ͠(BOH PG3VCP$PQΛ౷ׅ͍ͯ͠Δ (JU)VCPSHBOJ[BUJPO w "OFX044DPNNVOJUZ 3VCP$PQ)FBERVBSUFST
HJUIVCDPNSVCPDPQIR
None
w 3VCP$PQ$PSF w 3VCP$PQ1FSGPSNBODF w 3VCP$PQ3BJMT w 3VCP$PQ34QFD w 3VCZ4UZMF(VJEF
w 3BJMT4UZMF(VJEF w 3VCP$PQ+1 w FUD 3VCP$PQ)2ͷSFQP
w ࢄͨ͠ෳͷݸਓϦϙδτϦ͔Β ͍ͪίϛϡχςΟͷϦϙδτϦ w ݸਓϦϙδτϦͷਓ͕ͨͪ)2ʹू ·͖ͬͯͨ 044ίϛϡχςΟͷৢ
w 3VCP$PQ$PSFΛத৺ʹؔ৺ͷ͋ Δϝϯόʔɺ3VCP$PQ34QFDΛ த৺ʹ׆ಈ͍ͯ͠Δϝϯόʔ w ͯ͢ͷϦϙδτϦʹίϛοτݖ͕͋ ΔΘ͚Ͱͳ͍ w ྫ͑ࢲ$PSF1FSGPSNBODF 3BJMT+1
ϝϯόʔ͝ͱͷྖҬͷҧ͍
w $PSFCCBUTPWSVCPDPQͩͬ ͨͷͰɺ͍ΘΏΔ3VCP$PQͱݺ Ε͍ͯΔͷͷத৺ w 3VCP$PQ34QFDͳͲ֦ு$PQ͕ ґଘ͍ͯ͠Δ֦ுݩ(FNͷଆ໘ w $PSFͰܧঝʹؔ͢ΔΠϯλϑΣʔε ͕มΘΔͱ֦ு$PQӨڹΛड͚Δ
֦ுݩ$PQͱͯ͠ͷ$PSF
w ͜͜Ұͷഁյతมߋͱͯ͠ /PEF1BUUFSOͷOJM ͷมߋ 3VCP$PQ$PQ͔Βͷ 3BOHF)FMQϞδϡʔϧΓग़͠ ͕͋Δ ֤֦ு(FNਵ͕ඞཁ w
ؔ৺ͷ͋Δϝϯόʔ͕)2ʹू·ͬ ͨͷྑ͍ ҟͳΔϓϩδΣΫτؒͰͷಉظ
w ίϯτϦϏϡʔλʹൺͯΕΔ͜ ͱ͕૿͑Δ w ίϛολʔʹͳͬͯվΊͯࢥͬͨ͜ Ε·Ͱͱ͜Ε͔Β w (JU)VCϕʔεͷ3BJMTίϛϡχ ςΟͱൺֱ )2ઃཱͱಉ࣌ʹίϛολʔʹͳͬͨ
044ίϛϡχςΟʹΑΔҧ͍ SBJMTSBJMT CCBUTPWSVCPDPQ 3FWJFX ؔ৺Λ࣋ͬͨਓ ؔ৺Λ࣋ͬͨਓ $MPTF JTTVF *TTVFνʔϜɺίϛολʔɺί Ξϝϯόʔ
ίϛολʔ .FSHF13 ίϛολʔɺίΞϝϯόʔ ΄΅ϦϙδτϦΦʔφʔ NBTUFS QVTI ίϛολʔɺίΞϝϯόʔ ϦϙδτϦΦʔφʔͷΈ ؍ଌൣғ 3FMFBTF ϦϦʔεϚωʔδϟ ϦϙδτϦΦʔφʔ
ࢲ͕ۙະདྷʹඳ͘3VCP$PQ)2ͷੈք؍ SBJMTSBJMT SVCPDPQIRSVCPDPQ 3FWJFX ؔ৺Λ࣋ͬͨਓ ؔ৺Λ࣋ͬͨਓ $MPTF JTTVF *TTVFνʔϜɺίϛολʔɺί Ξϝϯόʔ
ίϛολʔ .FSHF13 ίϛολʔɺίΞϝϯόʔ ίϛολʔ NBTUFS QVTI ίϛολʔɺίΞϝϯόʔ ίϛολʔ 3FMFBTF ϦϦʔεϚωʔδϟ ϔουϝϯςφʔ 0S
SVCPDPQIRSVCPDPQ %SPQTVQQPSUGPS.3*
w HJUQVTIPSJHJONBTUFSʹͭ ͍ͯ w جຊ1VMM3FRVFTUΛ։͘ w ໌നͳ$PTNFUJDDIBOHF NBTUFSQVTIͰྑ͍ͷͰʁ ίϛολʔͷݖརͱن
None
w ͬͯΈͤ HJUQVTIPSJHJONBTUFS git push origin master
SVCPDPQIRSVCPDPQ!GGBF 'JY$)"/(-0(NE
None
None
IUUQTUXJUUFSDPNLPJDTUBUVT
w lNBTUFSQVTI͢Δͱ͖13Λ ૹΔͱ͖ΑΓ৻ॏʹ͍ͬͯΔz w l࣌ؒʹΘΕͯΔͱ͖Βͳ͍z w l ϛεͨ͋͠ͱ NBTUFSQVTIͷ จԽΛ࡞ΔͳΒઆ໌͏·͍͜ͱ͢
Δඞཁ͕͋Δz 3BJMTίϛολʔ͔Βͷॿݴ
None
None
͔͜͜Βগ͠ ৽ͨͳࢀೖͷώϯτ
ਓࡐ༗ݶͰ ͋Γྲྀಈ͢Δ IUUQTHJUIVCDPNSVCPDPQIRSVCPDPQJTTVFTJTTVFDPNNFOU
w 5IF3BJMT%PDUSJOF w ҟͳΔࢹɺ৽ͨͳίϛϡχςΟϝ ϯόʔΛܴ͑ೖΕΔ w HPPEpSTUJTTVF w 3VCP$PQ+1 l1VTIVQBCJHUFOUz
None
HPPEpSTUJTTVF
lHPPEpSTUJTTVFz
3VCP$PQ+1
None
w ͍͖ͳΓ͍͠Λղ͜͏ͱ͠ͳ͍ w lHPPEpSTUTUFQz͡ΊͷҰา ͷΦεεϝͷϥϕϧ w ِཅੑΤϥʔʹ͍ͭͯΠγϡʔΛ։͘ ͜ͱʹΑͬͯࢀՃ͢Δͱ͍͏Ұา w ΠγϡʔςϯϓϨʔτʹ४͡Δͱ(PPE
044ίϛϡχςΟͷࢀՃͷҰา
QPDLF .ZHPBMGPSUIJTPSHBOJ[BUJPOJTUPCFDPNFUIF DFOUSBMIVCGPSBMMUIFDPSF3VCP$PQSFMBUFE BDUJWJUJFT*XBOUVTUPCVJMEBCJHHFSDPSFUFBN TOJQ *UIBTO`UCFFOBQFSTPOBMQSPKFDUPGNJOFGPSRVJUF BXIJMF*GTPNBOZQFPQMFBSFVTJOHJU JGTPNBOZ UIJOHTBSFOFFEFEUPCFEPOF
UIJTCFMPOHTUPUIF DPNNVOJUZ IUUQTCMPHTJEFDJDPNJOUFSWJFXXJUICP[IJEBSCBUTPWCCGEB :FTUFSEBZ ZPVNPWFE3VCP$PQSFQPTJUPSZGSPN VOEFSCCBUPTWUPSVCPDPQIR TOJQ $BOZPVUFMMVTPUIFSQMBOTGPSUIFPSHBOJ[BUJPO CCBUTPW *OUFSWJFXXJUI#P[IJEBS#BUTPW 1SFTFOUFECZ4JEFS5FBN
1SPEVDU
IUUQTXXXZPVUVCFDPNXBUDI WOS)K7$V7T("
&YUSBDU3BJMT$PQTJOBTFQBSBUF &YUSBDU1FSGPSNBODF$PQTJOUPB TFQBSBUFHFN &YUFOEDPQNFUBEBUB *OUSPEVDFOFXDPQTXJUIBTQFDJBMTUBUVT JOTUFBEPGFOBCMFEEJTBCMFE
*NQMFNFOUPQUJPOTUPSVOPOMZTBGFDPQT BOETBGFBVUPDPSSFDUT #JHNJMFTUPOFUP3VCP$PQ
SVCPDPQIRSVCPDPQ &YUSBDU3BJMT$PQTJOBTFQBSBUF
None
w 3VCP$PQࣗମϑϨʔϜϫʔΫ ϥΠϒϥϦϥϯλΠϜʹґଘͤͣ 3VCZʹϑΥʔΧε͍ͨ͠ w ࡞ऀͱͯ͠ɺ͍·3BJMTΛ͋·Γ ͍ͬͯͳ͍Β͍͠ w ͨͷ·Ε·ͨ͠ 5-%3
w SVCPDPQSBJMTͱ͍͏HFN طʹଘࡏ͍ͯ͠Δ ΤίγεςϜ্ͷ՝
None
None
w SBJMTSBJMTͷSVCPDPQZNMΛө͠ ͨSEQBSUZDPQ w 3VCZ,BJHJͰCCBUTPW͞Μʹ ZBIPOEB͞Μ͕Λͯ͘͠Εͨ w 3VCZ,BJHJޙʹ%SFONJ͞ΜΒ͔Βϝ ϯγϣϯ͕͋Δ w
13Λૹ͍ͬͯͨࢲʹҾ͖ܧ͗ ྲྀΕ
None
None
None
None
!UPTIJNBSV͞Μ͋Γ͕ͱ͏͍͟͝·͢ʂ
w 3VCP$PQͷ3BJMT෦ॺʹ͍ͭͯ ελϒʹͯ͠ɺSVCPDPQSBJMT HFNͷՃΛଅ͢ϩάΛग़ྗ͢Δ w ͋Δ͍3VCP$PQ3BJMTʹ ϑΥʔϧόοΫ͢Δ 3VCP$PQ3BJMTͷҠߦ
SVCPDPQIRSVCPDPQ &YUSBDU1FSGPSNBODF$PQTJOUPBTFQBSBUFHFN
None
w ύϑΥʔϚϯεޮʹ͍ͭͯ.3* ʹಛԽͨ͠༰ʹͳ͍ͬͯΔ w 3VCP$PQ+3VCZαϙʔτ ͍ͯ͠Δ w 3VCP$PQ$PSFͱͯ͠ॲཧܥ ʹґଘ͠ͳ͍ܗΛࢦ͍ͯ͠Δ 5-%3
None
w ࣮ࡍͷޮՌʹ͍ͭͯɺެࣜυΩϡ ϝϯτͷϦϑΝϨϯεʹه͞Ε͍ͯ Δ߹͕͋Δ w ࠾ΛΜͩ࣌Ұಡ͔ͯ͠Β࣮ߦ ΛࢼΈͯྑͦ͞͏ 5JQTPG1FSGPSNBODFDPQ
1FSGPSNBODF4BNQMF
+VBOJUP'BUBTGBTUSVCZ
SBJMTSBJMT
CFODINBSLJQT
$PNQBSJTPO % ruby -v shuffle-first-vs-sample.rb ruby 2.5.1p57 (2018-03-29 revision 63029)
[x86_64- darwin17] Warming up -------------------------------------- Array#shuffle.first 35.171k i/100ms Array#sample 229.945k i/100ms Calculating ------------------------------------- Array#shuffle.first 400.180k (± 5.9%) i/s - 2.005M in 5.026934s Array#sample 6.407M (± 6.4%) i/s - 31.962M in 5.010117s Comparison: Array#sample: 6407183.3 i/s Array#shuffle.first: 400180.2 i/s - 16.01x slower
w !DPNQPTFSJOUFSBMJB͕ਐΊͯ ͘Ε͍ͯΔ w 3VCP$PQʹ͚ͯ 3VCP$PQ3BJMTಉ༷ਐḿ͍ͯ͠Δ w ͠Β͘3VCP$PQ$PSFͱͷಉ ظ͕৬ਓͷԹ͔ͳख࡞ۀ 1FSGPSNBODFDPQTͷநग़ঢ়گ
SVCPDPQIRSVCPDPQ &YUFOEDPQNFUBEBUB
None
w ͓ͦΒ͘3VCP$PQͷۄ w 3VCP$PQΛΞοϓάϨʔυͨ͠ࡍʹ ރΕ͍ͯͳ͍$PQͰͷ͕͋ͬͨΓ CSFBLJOHDIBOHFͨ͠Γͷ൵͠Έ ͷ͓ศΓͷػೳ w SVCPDPQZNM EFGBVMUZNM
ͷ ϝλσʔλͷՃ 5-%3
w 7FSTJPO"EEFEʜ$PQ͕Ճ͞Εͨόʔδϣ ϯ w 7FSTJPO$IBOHFEʜϢʔβʔʹӨڹͷ͋Δόʔ δϣϯ ৽͍͠ઃఆɺσϑΥϧτͷมߋ w 7FSTJPO3FNPWFEʜআ͞Εͨόʔδϣϯ
w 4BGFʜِཅੑͳͲͳ͘ઃܭͲ͓Γʹ৴པͰ͖Δ w 4BGF"VUP$PSSFDUʜࣗಈमਖ਼ͰյΕ͍ͯͳ͍ ͭͷϝλσʔλ
w 4BGFΦϓγϣϯͷΈ࣮ߦ͢Δ w 4BGF"VUP$PSSFDUͷΈ࣮ߦ͢Δ w σϑΥϧτͰͯ͢4BGFѻ͍ w ࠷৽όʔδϣϯͷ$PQΛআ֎ͯ͠ ࣮ߦ͢Δ ࣮ߦΦϓγϣϯͷީิ
w 4BGFͱ4BGF"VUP$PSSFDUͷ ఆʹ͍ͭͯͲ͏͢Δ͔ w طଘΠγϡʔ͕͋Δ͔͕ͻͱͭͷࢦඪ ʹͳΓͦ͏ ެ։͞Εͨ۩ମతඪຊ w ͕͋Ε3VCP$PQ$PSF͔
3VCP$PQ+1·Ͱ͓ศΓΛ ݒ೦
w HPPEpSTUJTTVFͱͯ͠ਐΜͰ ͍Δ ঢ়گ
SVCPDPQIRSVCPDPQ *OUSPEVDFOFXDPQTXJUIBTQFDJBMTUBUVT JOTUFBEPGFOBCMFEEJTBCMFE
None
w طଘͷFOBCMFEEJTBCMFE ͷ֦ுͱղऍͰ͖Δ w ৽ͨʹ/FX ͋Δ͍OJM Λ༻ҙ ͯ͠ɺͦͷͷ߹৽ͨͳ$PQ Λ͏͔Ϣʔβʔʹ༗ޮແޮΛΏ ͩͶΔܯࠂΛදࣔ͢Δ
5-%3
w ΞοϓάϨʔυ࣌ʹʹͳΔͷރ Ε͍ͯͳ͍৽͍͠$PQͷέʔε͕ଟ ͍ ϦάϨογϣϯΑΓͪ͜Β͕ଟ͍ w ϝλσʔλͷ7FSTJPO"EEFEɺ͋ Δ͍&OBCMFEͷ/FXΛݩʹͯ͠ ࠷৽ͷόʔδϣϯͰՃ͞Εͨ$PQ
Λআ֎͢ΕޡݕΛݮΒͤͦ͏ *.0ΞοϓάϨʔυͷ҆৺ͷ্
w ݱঢ়ͷ3VCP$PQͰແޮʹ͍ͨ͠ $PQEnabled: falseͱͯ͠ ରॲͰ͖Δ͕ɺԿ͔ͷҙਤ͕͋ͬͯ EJTBCMFEʹͨ͠ͷ͔ɺόʔδϣ ϯΞοϓ࣌ͷރΕ͍ͯͳ͍$PQͩ ͔Βແޮʹ͍ͯ͠Δͷ͔ͷঢ়ଶ۠ผ ͕͔ͭͳ͍ ৽ͨͳϥϕϦϯά
SVCPDPQIRSVCPDPQ *NQMFNFOUPQUJPOTUPSVOPOMZTBGFDPQT BOETBGFBVUPDPSSFDUT
None
w SVCPDPQίϚϯυͷΦϓγϣ ϯΛՃ͢Δ 5-%3
w --safeΦϓγϣϯʜ4BGFͷ$PQ ͷΈ࣮ߦ͢Δ w --safe-auto-correctΦϓγϣϯʜ 4BGF"VUP$PSSFDUͷ$PQͷΈ࣮ߦ ͢Δ w ͜ΕΒΛSVCPDPQZNMͰઃఆͰ͖ ΔΑ͏ʹ͢Δ
৽ͨͳ࣮ߦΦϓγϣϯ
QPDLF *UIJOLUIBUUIPTFBSFUIFLFZQPJOUT*EPO`UXBOU VTUPIBWFTPNFIVHFSPBENBQGPS*XBOUVT UPIBWFTPNFUIJOHUIBUXFDBOBDUVBMMZSFBDIJOB GFXNPOUIT IUUQTCMPHTJEFDJDPNJOUFSWJFXXJUICP[IJEBSCBUTPWCCGEB $BOZPVUFMMVTUIFSPBENBQPG3VCP$PQJO NPSFEFUBJMT CCBUTPW *OUFSWJFXXJUI#P[IJEBS#BUTPW
1SFTFOUFECZ4JEFS5FBN
͓ΘΓʹ
w 3BJMTͱ1FSGPSNBODF$PSF͔ Β֎ΕΔ $PSFͷϝϯςφϯεੑ w 3VCP$PQϝλσʔλΛͬͯ ҆৺͕͓͚ͦ͏ͳ$PQͱͦ͏Ͱͳ͍ $PQΛ৭͚Δ ར༻ऀͷ҆શੑ
w ։ൃ͕͡·͔ͬͨΓͳͷͰ࠷৽ͷಈ ϦϙδτϦΛݟ͍ͯͩ͘͞ ࠓޙͷ3VCP$PQ
wSVCPDPQIRSVCPDPQ wSVCPDPQIRSVCPDPQKQ wFTNJODBHJMF QSJWBUF wҙຯΘ͔Γ·͢Ͷʁ 3VCP$PQͷJTTVF
One more thing…
3BJMT044ύονձ ΄΅݄࣍։࠵
4PDJBMDPEJOHTUBSUTXJUIZPV :PV
!LPJD 5IBOLT .*/"48"/
IUUQTTQFBLFSEFDLDPNLBLVUBOJBHJMFNBOJGFTUPEFDBEF TMJEF !LBLVUBOJ