Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Enter the OSS world [RuboCop] II. lost boundary
Search
Koichi ITO
December 09, 2017
Programming
2.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Enter the OSS world [RuboCop] II. lost boundary
Rails Developers Meetup 2017
https://railsdm.github.io/2017/
Koichi ITO
December 09, 2017
More Decks by Koichi ITO
See All by Koichi ITO
Reframing the Agile Manifesto
koic
5
4.1k
The NotImplementedError Problem in Ruby
koic
1
2.1k
Exploring RuboCop with MCP
koic
0
7.1k
Ruby and LLM Ecosystem 2nd
koic
1
2.3k
STYLE
koic
1
2.2k
Ruby and LLM Ecosystem
koic
3
13k
Write Code Every Day
koic
1
2.7k
Bliki (ja), and the Cathedral, and the Bazaar
koic
7
3.3k
Welcome to the LLM Club
koic
0
430
Other Decks in Programming
See All in Programming
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
56
38k
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
230
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
780
Deep dive into the select statement (GopherCon UK)
jespino
0
170
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
530
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
670
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
500
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
140
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
AIとGame Jamで、ゲームを完成させた話
takahirosaeki
0
120
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
860
Featured
See All Featured
BBQ
matthewcrist
89
10k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
Technical Leadership for Architectural Decision Making
baasie
3
560
For a Future-Friendly Web
brad_frost
183
10k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
780
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
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