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
linter と formatter で 自動的に人権を得る
Search
Hayato Kawai
May 26, 2018
Programming
0
470
linter と formatter で 自動的に人権を得る
#kosen12s LT 第 2 回資料
Hayato Kawai
May 26, 2018
Tweet
Share
More Decks by Hayato Kawai
See All by Hayato Kawai
Ruby as Shell script
fohte
0
84
rubocop-daemon 裏話: OSS の苦悩
fohte
2
350
RuboCop Server Mode の仕組み
fohte
1
120
Ruby を使ったプロダクト開発を支えるオブザーバビリティ基盤
fohte
2
82
インシデントコマンダーやってみた
fohte
5
840
Ruby でもなんとかなる - ISUCON13 公式反省会
fohte
0
90
k8s upgrade を 楽にする工夫
fohte
0
130
Other Decks in Programming
See All in Programming
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
効率化に挑戦してみたらモバイル開発が少し快適になった話
ryunakayama
0
130
雑に思考を整理する技術と効能
konifar
58
29k
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
educure_カリキュラム生操作マニュアル.pdf
linew_official
0
740
Site Reliability Engineering for GMO
pyama86
8
1k
Ruby Function Composition
bkuhlmann
1
330
Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets
hollycummins
0
230
Git Rebase
bkuhlmann
11
1.6k
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
310
Apache Hive 4 on Treasure Data
ryukobayashi
0
130
今、知っておきたい! 生成AIエージェントの世界
elith
3
350
Featured
See All Featured
The Cult of Friendly URLs
andyhume
74
5.7k
The Power of CSS Pseudo Elements
geoffreycrofte
60
5k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.6k
YesSQL, Process and Tooling at Scale
rocio
164
13k
GraphQLとの向き合い方2022年版
quramy
32
12k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
244
20k
Documentation Writing (for coders)
carmenintech
60
3.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
1k
The Language of Interfaces
destraynor
151
23k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Transcript
linter ͱ formatter Ͱ ࣗಈతʹਓݖΛಘΔ Hayato Kawai (@fohte) #kosen12s LT
2
͡Ίʹ
Linter, Formatter ͬͯΔਓ
• ͩΕ: Hayato Kawai (Twitter: @fohte) • ग़: ਆށߴઐ ిࢠֶՊ
• ॴଐ: גࣜձࣾγϯΫϩɾϑʔυ ։ൃ෦ ج൫νʔϜ • ݴޠ: Ruby, JavaScript • ΤσΟλ: Vim
• Ruby ༻ linter/formatter ͷհ • RuboCop (linter) • Rufo
(formatter) • linter/formatter Λ ࣮ࡍʹ͍ͬͯ͘ Agenda
͜Μͳίʔυʹ ݟ֮͑͋Γ·ͤΜ͔?
None
ίʔυ͕Ԛ͍
• εϖʔε͕ແ͍ • Πϯσϯτ͕ແ͍ • ෆཁͳվߦ͕͋Δ
໘͍͘͞ͷͰ ػց͕উखʹߟ͑ͯ΄͍͠
໘͍͘͞ͷͰ ػց͕উखʹߟ͑ͯ΄͍͠ → ࣗಈԽͰ͖·͢
Ͳ͏ͬͯࣗಈԽ͢Δͷ͔
Ͳ͏ͬͯࣗಈԽ͢Δͷ͔ • Linter/Formatter ͷग़൪ • Ruby ͳΒ… RuboCop, Rufo ͳͲ
RuboCop
• Ruby ༻੩తղੳπʔϧ (linter) • ίʔσΟϯάελΠϧ ྑ͘ͳͦ͞͏ͳίʔυʹܯࠂɾࣗಈमਖ਼ • ։ൃίϛϡχςΟ͕ඇৗʹ׆ൃ RuboCop
• ࣮ࡍʹద༻ͯ͠ΈΔ RuboCop
None
• ΊͬͪΌ͏Δ͍͞ • Ұͭͣͭ৬ਓͷख࡞ۀͰमਖ਼͢Δͷ໘ • ࣗಈमਖ਼Φϓγϣϯ —auto-correct Λ͏ RuboCop
None
auto-correct લ auto-correct ޙ
• ྑ͘ͳ͍ίʔυ͕ػցతʹݕग़ɾमਖ਼Ͱ͖Δ • (ࣗಈతʹमਖ਼Ͱ͖ͳ͍ͷ͋Δ) • ϓϩδΣΫτશମͰίʔυ͕౷Ұ͞ΕΔ • RuboCop Λ࠾༻͢ΔϓϩδΣΫτଟ͍ RuboCop
ͷϝϦοτ
• ઃఆ͕໘ • σϑΥϧτઃఆ͔ͳΓݫ͍͠ • ϝιουͷߦ 10 ߦҎͱ͔ ߦͷจࣈ 80
จࣈҎͱ͔… RuboCop ͷσϝϦοτ
Rufo
• Ruby ༻ϑΥʔϚολʔ • ઃఆ߲ՄೳͳݶΓݮΒ͠ɺίʔσΟϯά ελΠϧΛ౷Ұ͢Δ͜ͱΛࢦ͍ͯ͠Δ • Go ͷ gofmt,
JS ͷ prettier, Python ͷ autopep8 ͱಉ͡ϊϦ Rufo
• RuboCop ͱҟͳͬͯϑΥʔϚοτઐ • ྑ͘ͳ͍ίʔυͷݕग़Λߦ͏Θ͚Ͱͳ͍ Rufo
• ࣮ࡍʹద༻ͯ͠ΈΔ Rufo
None
Rufo ద༻લ Rufo ద༻ޙ
RuboCop (σϑΥϧτઃఆ) Rufo
• ઃఆ͕΄ͱΜͲແ͍ͷͰָ • దʹίʔσΟϯάͯ͠ྑ͍ײ͡ʹܗ ͯ͘͠ΕΔ • ߴ Rufo ͷϝϦοτ
• ։ൃ͕͋·Γ׆ൃͰͳ͍ • ·ͩ·ͩෆ҆ఆ (࠷৽൛͕ v0.3.1) • ࠐΈೖͬͨίʔυΛॻ͘ͱมʹܗ͞Εͯ ͠·͏͜ͱ Rufo
ͷσϝϦοτ
RuboCop VS Rufo
• RuboCop ͷ΄͏͕ίϛϡχςΟ͕େ͖͍ • RuboCop ͷ΄͏͕҆ఆ͍ͯ͠Δ • RuboCop ͷ΄͏͕ݕ߲͕ࠪ๛ •
Rufo ͷ΄͏͕ઃఆΛߟ͑Δͷָ͕ • Rufo ͷ΄͏͕ߴ RuboCop VS Rufo
• దࡐదॴ • ࠓͷͱ͜Ζ RuboCop ʹϑΥʔϚοτΛ ͤͯ͠·͏΄͏͕ྑ͍ • ࠓޙ Rufo
͕҆ఆ͖ͯͨ͠Β RuboCop ͷ ϑΥʔϚοτܥϧʔϧΛແޮʹͯ͠ Rufo Λ ͏Α͏ʹͯ͠ྑ͍ͷͰ? ͲͪΒΛ͏͖͔?
RuboCop, Rufo Ҏ֎ ແ͍ͷ?
RuboCop, Rufo Ҏ֎ແ͍ͷ? • reek: ྑ͘ͳͦ͞͏ͳίʔυΛ੩తʹݕग़ • ruby -w: ϝιουͷॏෳఆٛͳͲΛಈతʹݕग़
• brakeman (Rails): ੬ऑੑ͕͋Γͦ͏ͳίʔυΛ੩తʹ ݕग़ • prettier-ruby: JS ϑΥʔϚολʔ prettier ͷ Ruby ϓϥάΠϯ (·ͩϦϦʔε͞Ε͍ͯͳ͍)
RuboCop Λͬͱศརʹ
RuboCop Λͬͱศརʹ • ຖճ rubocop ίϚϯυΛୟ͘ͷ໘͍͘͞ • ΤσΟλʹϓϥάΠϯΛೖΕ·͠ΐ͏ • Vim
ͳΒ ale ͕͓͢͢Ί • https://github.com/w0rp/ale
RuboCop Λͬͱศརʹ • อଘ࣌ʹ auto-correct Λ͔͚ΔΑ͏ʹ͢Δͱ ͞Βʹศར • దʹॻ͍ͯউखʹ៉ྷʹܗ͞Εͯ ։ൃऀΑΓຊ࣭ʹूதͰ͖Δ
RuboCop Λͬͱศརʹ • ͔͠͠গ͕͠ग़ͯ͘Δ • RuboCop Λ࣮ߦ͠·͘ΔΑ͏ʹ͍ͯͨ͠Β ͪΐͬͱ͕͞ؾʹͳ͖ͬͯͨ • ߴԽπʔϧ࡞Γ·ͨ͠
• github.com/fohte/rubocop-daemon
RuboCop Λͬͱศརʹ • rubocop-daemon όοΫάϥϯυͰ RuboCop Λىಈ͠ଓ͚Δ • ىಈίετ͕ແ͘ͳͬͯߴʹͳΔ •
࣮ߦ͕࣌ؒ 1.46 ඵ → 0.59 ඵʹվળ • ߋͳΔߴԽՄೳ (README Έͯ)
·ͱΊ • linter ͱ formatter ͰࣗಈతʹਓݖΛಘΔํ๏ʹ ͍ͭͯհ͠·ͨ͠ • ࠓճ Ruby
ʹ͍͚ͭͯͨ͠Ͳɺ͖ͬͱ ଞݴޠʹ linter formatter ͋Δͣ