Rails 8.1.0がリリースされました。ハイライトはリリース記事を読むと良いです。
ここで取り上げるのは、Rails 8.1.0 で更新された GitHub Actions 向けに生成される RuboCop 実行ワークフローのテンプレートについての小ネタです。
以下の設定は、この PR で更新された bin/rails new におけるテンプレートを元にした差分のサンプルです。ファイルとしては .github/workflows/ci.yml に相当します。
lint:
runs-on: ubuntu-latest
+ env:
+ RUBY_VERSION: <%= ENV["RBENV_VERSION"] || ENV["rvm_ruby_string"] || "#{RUBY_ENGINE}-#{RUBY_ENGINE_VERSION}" %>
+ RUBOCOP_CACHE_ROOT: tmp/rubocop
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
- ruby-version: <%= ENV["RBENV_VERSION"] || ENV["rvm_ruby_string"] || "#{RUBY_ENGINE}-#{RUBY_ENGINE_VERSION}" %>
+ ruby-version: ${{ env.RUBY_VERSION }}
bundler-cache: true
+ - name: Prepare RuboCop cache
+ uses: actions/cache@v4
+ env:
+ DEPENDENCIES_HASH: ${{ hashFiles('.ruby-version', '**/.rubocop.yml', '**/.rubocop_todo.yml', 'Gemfile.lock' )}}
+ with:
+ path: ${{ env.RUBOCOP_CACHE_ROOT }}
+ key: rubocop-${{ runner.os }}-${{ env.RUBY_VERSION }}-${{ env.DEPENDENCIES_HASH }}-${{ github.ref_name == github.event.repository.default_branch && github.run_id || 'default' }}
+ restore-keys: |
+ rubocop-${{ runner.os }}-${{ env.RUBY_VERSION }}-${{ env.DEPENDENCIES_HASH }}-
- name: Lint code for consistent style
run: bin/rubocop -f github
この設定は RuboCop 実行においてキャッシュ利用での高速化を狙った更新です。コードベースの大きさによりますが、この PR を開いた人のアプリケーションでは 8 分掛かっていたものが 40 秒に短縮されたとのこと。bin/rails app:update で更新されるものではないので、既存コードに対する適用への関心があれば手動で行うことになります。
詳しくは PR を参照して導入を検討してみてください。ちょっと読むの面倒だなあという人は、Rails 8.1 と同日に OpenAI からリリースされた AI ブラウザーである ChatGPT Atlas なんか使って PR のサマリーなどプロンプティングしても面白いかもしれません。
それではハックを続けましょう。