初めに
どうもCirkitアドカレ3日目を担当させていただく、SAKITOエンジニアのえいぽんです。
今回はSAKITOのコードの一貫性の管理を担うRubocopが整備された(整備したので)にこのことについての記事を書いていきたいと思います!今までで導入はされてはいましたが、とりあえず動くからまあいいや、ユーザー影響が出ないから良いやで放置されていたのがとうとう動くようになって感慨深いです。
開発環境・使用技術
Ruby on Rails, Docker, Git
そもそもRubocopとは?
Ruby用に開発された静的コード解析ツールで、コード品質を担保する目的で使われます。自分がコードを書いている際に、コードの不適切な書き方や助長な部分があると規約違反として表示され、修正案を提示してくれるものとなっています。
なぜ動くようにしたのか
- 誰が書いても同じ書き方になる。
- 今までは、コードの最後に
,を付けるのか、つけないのか問題などで議論が巻き起こりそのたびに先送りになっていた…
- 今までは、コードの最後に
- 余分なインデント、不要なスペースなどの指摘でそんなところまで見ないといけないのかということで、レビュワーの負担がかかっていた
- 非推奨な書き方が多いので保守性を上げたい
Rubocop Gem
airbnbを使用しています。
group :development, :test do
gem "rubocop-airbnb"
end
カスタマイズした内容
それぞれがどのようなカスタマイズしたかはコードブロック内のコメントアウトを見てもらえれば、良いかと思います。
inherit_from: .rubocop_airbnb.yml
# 要検討
require:
- rubocop-capybara
- rubocop-factory_bot
- rubocop-rspec_rails
AllCops:
NewCops: enable
Exclude:
- "db/**/*"
- "config/**/*"
- "script/**/*"
- "node_modules/**/*"
- "bin/*"
- "**/Gemfile"
- "vendor/**/*"
- ".git/**/*"
# Rails用に最適化
Rails:
Enabled: true
# ダブルクォートの使用を強制
Style/StringLiterals:
EnforcedStyle: double_quotes
# 引数のインデントを強制
Layout/ArgumentAlignment:
Enabled: true
# 行長の長さをfalseで許容
Layout/LineLength:
Enabled: false
# if/unless の書き方に関する Airbnb 独自 Cop を無効化
Airbnb/SimpleModifierConditional:
Enabled: false
Airbnb/SimpleUnless:
Enabled: false
# 日本語の許可
Rails/I18nLocaleTexts:
Enabled: false
# factory_bot / Airbnb 独自 Cop 無効化
Airbnb/FactoryClassUseString:
Enabled: false
Airbnb/FactoryAttrReferencesClass:
Enabled: false
# 「and」「or」の使用を許可
AndOr:
Enabled: false
修正コマンド
今回はDocker環境で動作しているので、上の設定をした後に、コンテナ内でコマンドを打って修正するといった感じです。
-
コンテナ内に入る
docker compose exec web bash -
修正コマンド
bundle exec rubocop -a
しかし、ここで問題なのは、自動修正できる部分と手動でなければならないところなどが分かれるので、手動で直すべき所は、規約に沿って直してあげる必要があります。(-Aで強制的に修正するという方法もあるのですが、既存の処理が壊れることになる場合があるので)
終わりに
今回はあくまでもCIが動くことを優先しているので、めちゃくちゃ細かい設定などはまだ設定しきれていないです。あくまでも、現時点のコードで必要最低限の設定をしている感じです。そのため今後は足りない部分の補完・修正を進めて、コードの品質を保てるようにしていきたいです!!
追伸
最初何も設定していない状態で実行したら、エラーが出る出る。日本語を許可したら一気に減ったのはびっくりしました。あと間違っていたことあれば指摘&こういう設定もあるよねって人いれば教えてください!!