Skip to content

Instantly share code, notes, and snippets.

@junara
Last active March 6, 2021 07:34
Show Gist options
  • Save junara/5bba205f2123e45cdd975fe1a2f8ca6c to your computer and use it in GitHub Desktop.
Save junara/5bba205f2123e45cdd975fe1a2f8ca6c to your computer and use it in GitHub Desktop.

目的

  • 既存のRailsプロジェクトにrubocopを導入する
  • rubocopをチームで活用する・・・GitHub Actionsでrubocop自動でチェックする

概要

  • 前準備
  • rubocop導入
  • GitHub Actionsでrubocop

前準備

  • ruby
  • railsプロジェクト

repository作る

gh repo create hogehoge

railsのプロジェクト作る

bundle init 
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails"
bundle install
  • 最小限のオプションでrailsをインストールする

rails/rails#39282

rails new . --database=sqlite3 --minimal

動作確認する

rails s

rubocop導入

rubocopをinstallする

https://github.com/rubocop/rubocop https://github.com/rubocop/rubocop-rails https://github.com/rubocop/rubocop-performance

group :development do
  gem 'listen', '~> 3.3'
  gem 'rubocop', require: false
  gem 'rubocop-rails', require: false
  gem 'rubocop-performance', require: false
end
bundle install

動作確認する

rubocop

rubocopを設定する

rubocop --init
Style/AsciiComments:
  Enabled: false

Style/Documentation:
  Enabled: false

Style/ClassAndModuleChildren:
  Enabled: false

Style/FrozenStringLiteralComment:
  Enabled: false

Rails/UniqueValidationWithoutIndex:
  Enabled: false

Metrics/ClassLength:
  Enabled: false

Metrics/ModuleLength:
  Enabled: false

require:
  - rubocop-rails
  - rubocop-performance

Rails/Delegate:
  Enabled: false

AllCops:
  TargetRubyVersion: 3.0 # rubyのバージョン
  NewCops: enable # rubocopの新機能をactiveにする
  Exclude:
    - 'Gemfile'
    - 'log/**/*'
    - 'spec/**/*'
    - 'vendor/**/*'
    - 'tmp/**/*'
    - 'db/**/*'
    - 'bin/**/*'
    - 'assets/**/*'
    - 'node_modules/**/*'

rubocopを通す

安全ななものを自動的に修正する

rubocop -a

(option)デグレする可能性があるが自動的に直るモノを実行する

rubocop -A

あとは、 以下のコマンドで指摘箇所を地道に直す or 以下のコマンドで課題をとりあえず無視する(TODOにする)

rubocop --auto-gen-config

rubocop.ymlの一行目に下記を追加する。

inherit_from: .rubocop_todo.yml (rubocop_todoがあるならこれをアクティブにする)

GitHub Actionsを設定する

https://docs.github.com/ja/actions/guides/building-and-testing-ruby#introduction

.github/workflows/rspec.yml ファイルを追加して編集する

mkdir -p .github/workflows
touch .github/workflows/rubocop.yml

pull requestの時に必ずrubocopが実行されるようにするgithub actions

on: [pull_request] # プルリクエスト時のみに動かす
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Rubyをセットアップ
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: 3.0
    - name: Gemをインストールする
      run: bundle install
    - name: Rubocopを実行してチェックする
      run: bundle exec rubocop

活用

上記のコードがコミットされるとpull request時に github actionsが自動的にrubocopのチェックをしてくれるようになる。 これにより、レビュワーのコードチェックの手間がかなりらくになる。

チャレンジするとよいこと

  • rspecのgithub actionsを書く
  • bundle installをキャッシュする
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment