RuboCopと共存する
フォーマッターを
探した話
@hey_cube
I am へいきゅーぶ
- @hey_cube
- オプトテクノロジーズ
- web エンジニア
- TypeScript + React
- Ruby on Rails
フロントエンド
+
バックエンド
バックエンド
+
?
フォーマッターが欲しい
- コードに統一感が欲しい
- ファイルを保存したときに自動でフォーマットして欲しい
- どういうフォーマットが良いかはあまり議論したくない
Rufo
Rufo とは
- "one true format" を提供してくれる Ruby フォーマッター
- Prettier に近い思想を持っている
- RuboCop と併用されるユースケースも想定してるっぽい
導入してみる
Gemfile
group :development do
gem "rubocop-config-rufo", require: false
gem "rufo", require: false
end
.rubocop.yml
inherit_gem:
rubocop-config-rufo: rubocop.yml
.circleci/config.yml
- run:
name: run rufo check
command: bundle exec rufo --check app config db/seeds.rb db/seeds lib spec Gemfile Rakefile
コマンドが長いので
rake タスクにしちゃう
rufo.rake
# frozen_string_literal: true
require "bundler/setup"
require "rufo"
namespace :rufo do
desc "Rufo に違反していないか確認する"
task :check do
Rufo::Command.run(["--check", "app", "config", "db/seeds.rb", "db/seeds", "lib", "spec", "Gemfile", "Rakefile"])
end
desc "Rufo に従って整形する"
task :format do
Rufo::Command.run(["app", "config", "db/seeds.rb", "db/seeds", "lib", "spec", "Gemfile", "Rakefile"])
end
end
.circleci/config.yml
- run:
name: run rufo check
command: bundle exec rake rufo:check
.vscode/extensions.json
{
"recommendations": [
"rebornix.ruby",
"misogi.ruby-rubocop",
"mbessey.vscode-rufo"
],
"unwantedRecommendations": []
}
.vscode/settings.json
{
"ruby.lint": {
"rubocop": true
},
"[ruby]": {
"editor.defaultFormatter": "mbessey.vscode-rufo"
}
}
良いところ
- 自前でルールを書かなくて良い
- 早い
- Gemfile や Rakefile も整形してくれる
微妙なところ
- rubocop-config-rufo の開発がそんなに活発じゃなさそう
- オートフォーマットして欲しくないファイルがある場合はコマンドライン引数で頑張るしかない
参考 URL
細かい話は Qiita にて
良き Ruby ライフを!
RuboCopと共存するフォーマッターを探した話
By hey_cube
RuboCopと共存するフォーマッターを探した話
RuboCop を導入済みのプロダクトに Ruby 用フォーマッターである Rufo を導入するやり方とか / https://heiseirb.connpass.com/event/138210/
- 1,820