Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Toward a happy symbiosis with RuboCop

ydah
October 12, 2022

Toward a happy symbiosis with RuboCop

RubyKaigi 2022 After Talks 「Toward a happy symbiosis with RuboCop」の発表スライド
https://andpad.connpass.com/event/260735/ #rubykaigi_after_talks

ydah

October 12, 2022
Tweet

More Decks by ydah

Other Decks in Programming

Transcript

  1. • Name: Yudai T akada • GitHub: @ydah • T

    witter: @ydah_ • An Open Source Software programmer. • Software Engineer at ANDPAD, Inc. • Born and raised in Osaka. • Loves beer and coffee and heavy metal 🍻 ☕ 🤘 self.inspect
  2. In 2 sessions at RubyKaigi 2022 About RuboCop Day 2

    : Make RuboCop super fast @koic Day 3 : The Better RuboCop World to enjoy Ruby @nay3
  3. • 当初は9割以上の cop が無効化された状態で運用が始まった • 無意味な cop がないか精査して、必要な cop だけを入れたかった

    • まともに選定していたのは導入時のみ(つらい) • 導入時に有効化された cop もそもそも少ない(つらい) • それ以来メンテが全くされていない(つらい) Background
  4. • 一部の cop だけを有効化して使うのをやめて、全ての cop を有効化 • 但し、 Layout/LineLength や

    Metrics や Style の一部は無効化とした • .rubocop_todo.yml は 4500 行 • `--exclude-limit 100` で生成されており 43 cops が無効化されていた • TODOの解消は自動修正可能な cop から少しずつされていた • TODOとしてマークされていた違反が起因の障害が発生していた… Background
  5. r7kamura/rubocop-todo-corrector • .rubocop_todo.yml を解消する Pull Request を GitHub Actions で自

    動生成する Custom Action • 手動実行もできるけれど自動実行にすると世界が変わる • Approve するとマージされて次の Cop に対する TODO を autocorrect した Pull Request が自動生成される • まるで自分自身が GitHub Actions workflow に組み込まれる感覚に なれてよい(?)
  6. ydah/rubocop-todo-regenerator • 特定のラベルを Pull Request につけると .rubocop_todo.yml を再生 成したコミットを積んでくれる Custom

    Action • 大きいRailsアプリだと .rubocop_todo.yml を再生成するのになかな か時間が掛かる • よく使うケースだと、 RuboCop のバージョンを上げるときに使ってます • `bundle update rubocop` して、必要に応じて新しく追加された Cop を無効化して、 Pull Request 作って、実行する。
  7. • https://github.com/rubocop/rubocop/pull/10674/commits/ a83732be3767cd50f821aba4b3d01542ff6f6f86 • 社内で辛いと話されていたやつ • 最初は arguments forwarding からゆっくり剥がしていこうかと思っていた

    • そもそもこの cop が違反とみなすのは第一引数が arg の単純なセッターだけ で良いのでは?という話になったので、結果的に辛いと話されていたケースも 違反ではなくなった Fix a false positive for Naming/AccessorMethodName with type of the first argument is other than arg
  8. • https://github.com/rubocop/rubocop/pull/10722/commits/ a24174a4ad2158fc8a6a6bed54953b011339f275 • rescue => StandardError を防ぐ cop •

    弊社テックブログにも書いたやつ • https://tech.andpad.co.jp/entry/2022/08/25/100000 Add new Lint/ConstantOverwrittenInRescue cop
  9. • Fix bugs • Improved documentations • Add configuration options

    • Create new cops • Trivial maintenance of Rake tasks In addition…
  10. • Style/ObjectThen • Lint/ConstantOverwrittenInRescue • Lint/NonAtomicFileOperation • Rails/WhereMissing • Rails/FreezeTime

    • RSpec/ChangeByZero • RSpec/Capybara/SpecificFinders • RSpec/Capybara/SpecificMatcher Add new cops
  11. end