Slide 1

Slide 1 text

Rubocop対応のすゝめ 2021/08/06 hiroki_tanaka

Slide 2

Slide 2 text

Rubocop とは - Rubyお馴染みの静的コード解析ツール。 - 他言語だとFindBugs(Java)・ESLint(JavaScript)に当たるもの。 - Rubocopの良い所 - 各ファイルのインデントや改行・カンマの位置といった本来、人が考える必要がない部分を自動で 修正し、全体の整合性を取ってくれる。人が考えるべきことに集中出来る。 - 複数人開発時にコードの書き方をある程度統一出来るので、可読性が向上し、コード品質を保つ事 が出来る。コードの書き方が統一されるので、レビュアーの負荷も軽減出来る。 - PJによっては全ての警告を採用したくない場合があるが、状況に合わせて柔軟に警告のカスタマイ ズを行うことが出来る。 - 新規にJOINされた方が書き方に迷わず開発出来る。

Slide 3

Slide 3 text

実際の解析サンプル

Slide 4

Slide 4 text

実際の解析サンプル 無駄なself

Slide 5

Slide 5 text

実際の解析サンプル 無駄なself if文内に unless

Slide 6

Slide 6 text

実際の解析サンプル 無駄なself if文内に unless if文内に 後置if

Slide 7

Slide 7 text

実際の解析サンプル 無駄なself if文内に unless if文内に 後置if はこんな可読性の悪いコードを検知してくれます

Slide 8

Slide 8 text

Rubocop 導入の機運 - 社内で行ったRubocop導入に関するアンケートによると(回答数:20) - Rubocopを導入すべきだと思いますか?⇒ Yes:19票 - 理由(抜粋) - スペースやインデントが機械的に修正されるので、コードレビューで本質的なことに集中でき るようになる。 - 実装時によくないコードの書き方をレビュー前・リリース前に知ることができる。 - Rubyを触る機会が少ないメンバにとって、たまの実装時に自動チェックがあるのは安心感が ある。 ※202008時点でtanakaは入社前のため、アンケートには不参加。

Slide 9

Slide 9 text

2021年3月末の状況 - 早速、Rubocopをnoteリポジトリに導入し、本家のRuby on Railsと同じルールを適 用してみた。 - noteリポジトリ全体の4670のRubyファイルから92000件の警告が発生。 - (うわっ…当社のレポジトリ、警告多すぎ…)

Slide 10

Slide 10 text

2021年7月末の状況 - 4ヶ月間、粛々と対応を行った結果 - 当初、92000あった警告数を39000まで減らすことに成功。(約60%減少) - 担当者2名が各自10%対応の時間を使って対応を行った。 - 毎朝、1警告に対して自動で修正PRを発行してくれるRubocop_challengerも採用。 - リポジトリ内のファイル数は4670から4988に増えているものの警告数は減少しているので良い傾向。

Slide 11

Slide 11 text

ただ、Rubocop対応開始直後は… 手当り次第に出来そうな警告 を自動修正・手動修正問わず 修正! 修正後の確認フローも未確 立で属人化!

Slide 12

Slide 12 text

本番で軽微~中程度の障害が数件発生

Slide 13

Slide 13 text

どうすれば安全に Rubocop修正を進めることが出 来るだろうか…?

Slide 14

Slide 14 text

Rubocop対応の進め方:修正実施~PR作成編 1. .rubocop_todo.ymlからコメントにCop supports --auto-correct.と付いているcopを選択し、警告内容を確認。確認 後、.rubocop_todo.ymlからそのcopに関する部分を削除する。 2. 警告の出ていたファイルに対して、自動修正コマンドを実行する。 a. 実行コマンド:bundle exec rubocop -a --force-exclusion XXX(ファイル名) YYY(ファイル名) b. 修正箇所が巨大になりそうな場合はファイルを分割対応を行う。 c. -aオプションを使用して、破壊的変更の加わらない安全な自動修正のみを行う。 3. 自動修正が行われたことを確認し、PRを発行する。 a. 修正されたファイルを確認し、問題があれば手動で修正する。 b. 手動修正は変なインデントを直す程度なのでロジックには手を加えない。 4. レビューでapprove頂き次第、Rubocopの修正まとめブランチにPRをマージ。

Slide 15

Slide 15 text

Rubocop対応の進め方:検証~本番リリース編 - Rubocop修正のみをまとめたブランチからPRを作成し、毎週水曜16時~17時半に検 証環境で確認→本番リリース→本番検証を行う。 - 上記の時間はnote・note-frontへのマージブロック及び検証環境を専有する。 - 検証シナリオも事前に用意し、それに沿って確認を行う。 


Slide 16

Slide 16 text

堅牢なフローで運用をリニューアル!

Slide 17

Slide 17 text

ご清聴ありがとうございました