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

10年モノのRailsアプリケーションにRuboCopの対応をした話

 10年モノのRailsアプリケーションにRuboCopの対応をした話

■イベント
Railsの伝統と革新をつなぐ各社の取り組み
https://sansan.connpass.com/event/315821/

■発表者
技術本部 Eight Engineering Unit Product Devグループ
大久保 滉太

■Sansan中途採用サイト
https://jp.corp-sansan.com/recruit/midcareer/

SansanTech

April 30, 2024
Tweet

More Decks by SansanTech

Other Decks in Technology

Transcript

  1. - 開発スピードの向上 - コードの可読性 - AutoCorrectによるスムーズな編集 - プロダクトの品質の向上 - メンテナビリティーの向上

    - バグを防ぎやすい - パフォーマンス改善 - セキュリティーの強化 RuboCop対応の目的
  2. 主な技術スタック - React - TypeScript フロントエンド - Ruby - Ruby

    on Rails バックエンド - AWS(CodeBuild, S3, CloudFront, …) - CircleCI / GitHub Actions - Datadog インフラ / ツール
  3. - .rubocop_todo.ymlの⾏数 - 8645⾏ → 1495⾏ (82%削減) - 違反があるCopの数 -

    285Cop → 56Cop (80%削減) - 残存Cop - UnsafeAutoCorrect:21Cop - AutoCorrectできない:35Cop RuboCop対応の結果
  4. 1. 自動生成コマンドを使って .rubocop_todo.yml を生成する 2. .rubocop_todo.ymlから修正するCopを選択する 3. 実際に修正を行う 参考 -

    たまってしまった .rubocop_todo.yml をGitHub Actionsで継続的かつ⾃動的に倒す⽅法 - 1200⾏あったRuboCopのTodoを半年かけて(ほぼ)解消した話 - 9万件のRuboCop警告を60%削減した話 RuboCop対応の事例を調査サマリ
  5. - Cop(ルール)を無効にできるYAMLファイル - 定義したCopは $ rubocop 実⾏時に無効にできる - 無効にしたCopを .rubocop_todo.yml

    から少しずつ消していき(有効化) 違反を修正することで、少しずつRuboCopの対応ができる .rubocop_todo.ymlとは
  6. 1. 対応したいCopを .rubocop_todo.yml の中から選択する 2. 選んだCopを .rubocop_todo.ymlから削除する 3. rubocop -a

    を⾏い、AutoCorrectされた差分を確認する 4. Pull Requestを作成し、レビュー依頼する RuboCop対応のざっくり流れ
  7. - 何をしてくれるか? - Metrics系の違反ファイルをMaxではなく、Excludeで無効にする - なぜ必要なのか? - .rubocop_todo.ymlのMetrics系の⾃動⽣成の仕様には、 プロジェクト内で違反しているCopのMax値を取る仕様の対策 -

    例:Metrics/CyclomaticComplexity - Cop違反している箇所で最⼤値が300だったとしたら、他が低かったとしても .rubocop_todo.ymlには Max: 300と記載されてしまう → 通常の開発に影響が出てしまうのを防ぐ –auto-gen-only-exclude
  8. 1. Cop対応表で⾃分の担当のCopを⼀つ選択する 2. .rubocop_todo.yml 対象のCopを削除し、$ rubocop -a を⾏う a. コード上で

    disableされていないかも確認する 3. 差分を確認しPullRequestを作成する a. AutoCorrectでバグることがあるので注意する b. 必要に応じて動作確認やテストコードを追加する 4. マージしてリリースする a. セルフレビュー + 1approve 5. Cop対応表のチェックをつける 対応のフローを作成しチームへ共有
  9. - .rubocop_todo.ymlの⾏数 - 8645⾏ → 1495⾏ (82%削減) - 違反があるCopの数 -

    285Cop → 56Cop (80%削減) - 残存Cop - UnsafeAutoCorrect:21Cop - AutoCorrectできない:35Cop RuboCop対応の結果
  10. - UnsafeAutoCorrectの対応完了 - 進捗:44 / 65 Copは修正対応済み(2024.3 〜 2024.4) -

    完了⾒込み:2024.5 - AutoCorrectできないCopへの対応⽅針検討 今後の展望