Qual a importância da padronização?
O código é, no final das contas, lido com mais frequência do que é escrito, e manter a padronização é uma forma de manter a legibilidade, independentemente do desenvolvedor que passe pelo projeto. Evidentemente, um código mais fácil de ler, é mais fácil de dar manutenção. E é nesse aspecto que o Rubocop atua.
Além disso, conhecer padrões consistentes é também uma forma de aprender mais sobre a linguagem de programação em questão, e adotá-los é também uma forma de passar esse conhecimento adiante.
Padronização em Ruby
Ruby por si só tem como premissa ser uma linguagem fácil de se ler, e com o objetivo de aprimorar essa legibilidade e manter a consistências em códigos Ruby, o Ruby Style Guide foi criado.
O guia foi construído a partir da experiência da comunidade Ruby em si, além de usar como referência recursos importantes para a linguagem como, por exemplo, os livros “Programming Rub” e “The Ruby Programming Language”.
Rubocop
O Rubocop é uma ferramenta de análise de código, construída justamente a partir do Ruby Style Guide. O funcionamento dele é simples, visto que é uma gem que pode ser instalada no seu projeto, é possível executar o comando
rubocop
e seu código será analisado com base nas melhores práticas do guia de estilo Ruby. Além de verificar o estilo do código, o Rubocop se preocupa também com questões de indentação, possíveis erros de sintaxe, métricas, nomenclatura e até segurança. Cada aspecto analisado é chamado de “Cop”.
Cops
Essa é a forma como são chamadas as checagens feitas no código. Cada "cop"é agrupado em “departamentos”, categorizando cada verificação realizada. Os departamentos são:
- Style: análise de estilo com base no Ruby Style Guide;

- Layout: análise de questões de indentação, espaço em branco e alinhamento;

- Lint: análise de ambiguidades e possíveis erros;

- Métricas: análise de todas as propriedades que podem ser medidas, como quantidade de linhas da classe, quantidade de linhas do método, complexidade ciclomática, entre outros;

- Naming: análise de problemas com nomenclatura de variáveis, constantes, arquivos, entre outros;

- Security: análise de métodos associados a possíveis problemas de segurança;

- Bundler: análise de más práticas em arquivos Bundler, como por exemplo o Gemfile;

- Gemspec: análise de más práticas em arquivos gemspec;

Todos esses “cops”; são configuráveis, basta criar um arquivo .rubocop.yml na raíz do projeto. Dentre as opções, é possível excluir arquivos da análise, desabilitar cops, definir padrões a serem verificados, entre outros.
Instalando o Rubocop
Como o Rubocop é uma gem, ele pode ser instalado de duas formas:
- Pelo terminal:
gem install rubocop
- Pelo gemfile do projeto
group :development do
gem 'rubocop', require: false
end
bundle install # no terminal
Com o Rubocop instalado, agora é possível rodar:
rubocop # analisa o projeto inteiro
rubocop app/models/foo.rb # analisa um arquivo específico
rubocop -a # corrige possíveis problemas
Exemplo corrigindo apenas problemas de formatação:

Usando Rubocop com o Github Actions
Uma forma bem prática de adotar o Rubocop no seu projeto é criando um workflow no Github Actions, desta forma, é possível colocar o Rubocop para rodar em pull requests ou quando um push é feito, por exemplo. Com isso, o Rubocop analisa as alterações feitas e aponta os problemas a serem corrigidos.


Para configurar a action é simples, basta criar um arquivo .rubocop.yml no diretório .github/workflows do seu projeto com o conteúdo abaixo:
name: RuboCop
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Ruby 2.7
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7
- name: Cache gems
uses: actions/cache@v1
with:
path: vendor/bundle
key: ${{ runner.os }}-rubocop-${{ hashFiles('**/Gemfile.lock')
}}
restore-keys: |
${{ runner.os }}-rubocop-
- name: Install gems
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Run RuboCop
run: bundle exec rubocop --parallel
O arquivo acima realizará o setup do Ruby e das gems e, no fim, rodará o Rubocop. Esse setup é usado justamente pelo próprio repositório do rails.
Rails e RSpec
Usa Rails e/ou RSpec? Também é possível incluir as gems rubocop-rails e rspec-rails para ter seu código analisado conforme os guias de estilo do Rails e do RSpec. Tendo as gems instaladas, é só inserir as linhas abaixo no arquivo .rubocop.yml
require:
- rubocop-rails
VSCode
Por fim, ainda é possível instalar o Rubocop como uma extensão do VSCode. Desta forma, o VSCode vai apontar em tempo real os erros que o Rubocop apontar enquanto você escreve o código, além de fornecer um comando de autocorreção que utiliza o próprio Rubocop para arrumar os pontos possíveis:




