Rails 7.2から[RuboCopが新規アプリケーションでデフォルトで有効になりました](https://railsguides.jp/7_2_release_notes.html#rubocop%E3%81%AE%E3%80%8C%E3%81%8A%E3%81%BE%E3%81%8B%E3%81%9B%E3%80%8D%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%8C%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%A7%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F)。 このTopicでは、7.1以前で作成した既存RailsアプリにRuboCopを後から導入して、RuboCopに関して7.2の新規アプリ相当の状態にセットアップする方法をご紹介します。 ### RuboCop (Omakase Ruby styling for Rails) のインストール 基本的には[rubocop-rails-omakaseの公式ドキュメントのインストール手順](https://github.com/rails/rubocop-rails-omakase?tab=readme-ov-file#installation)に従います。 まず以下のように、Gemfileの`group :development, :test`のところにrubocop-rails-omakaseを追加します。 ```ruby group :development, :test do # Omakase Ruby styling [https://github.com/rails/rubocop-rails-omakase/] gem "rubocop-rails-omakase", require: false end ``` 次に`bundle install`を実行して、RuboCop等をインストールします。 ```sh bundle install ``` さらに、必須ではありませんが、`bin/rubocop`でRuboCopを実行できるように、以下のコマンドを実行します。 ```sh bundle binstubs rubocop ``` 最後に`.rubocop.yml`という名前でファイルを作成し、以下の内容を記述します。 ```yaml # Omakase Ruby styling for Rails inherit_gem: rubocop-rails-omakase: rubocop.yml ``` 以上でRuboCop (Omakase Ruby styling for Rails) のセットアップが出来ました。 ### ローカル環境でのbin/rubocopの実行とその結果に対する対応の進め方 以下のコマンドでbin/rubocopを実行でき、omakaseのチェックを行えます。 ```sh bin/rubocop ``` このチェックでの指摘事項が多かった場合、以下のオプションを付けて実行することで、 無視設定を記述した`.rubocop_todo.yml`というファイルが作成され、 `.rubocop.yml`にもこの無視ファイルを参照する設定が追加されますので、 とりあえず全ての指摘事項を無視するように設定が出来ます。 ```sh bin/rubocop --auto-gen-config ``` 設定が出来たら、`bin/rubocop`を実行して、とりあえず指摘事項の数が0となることを確認します。 #### 1つずつ指摘事項へ対応 ここから先は、以下の手順を繰り返します。 - `.rubocop_todo.yml`から1項目を削除 - `bin/rubocop`を実行して指摘内容を確認して対応 + `bin/rubocop -a`もしくは`bin/rubocop -A`を実行して自動修正できるものは自動修正し、その修正内容で問題ないことを確認 * [`-a`は安全なもののみ、`-A`は安全で無いものも含めて自動修正を行います](https://docs.rubocop.org/rubocop/usage/autocorrect.html)。 + 自動修正できなかったものは手作業で修正・確認 + 特定のファイルのみチェックを回避する場合は、`.rubocop.yml`にて`Exclude:`を用いて設定 + ソースコードの特定の箇所(行)のみチェックを回避する場合は、[ソースファイルのコメントに`# rubocop:disable`等を用いて設定](https://docs.rubocop.org/rubocop/configuration.html#disabling-cops-within-source-code) + 指摘内容に対応する規則を完全に採用しない場合には、`.rubocop.yml`にて`Enabled: false`の記述を用いて規則を無効にする 1項目ずつ対応を進め、`.rubocop_todo.yml`の中身が無くなったら、`.rubocop_todo.yml`を削除すると共に、`.rubocop.yml`内で`.rubocop_todo.yml`を参照している設定を削除します。ここまで終わればRuboCopの諸規則への対応は完了となります。お疲れ様でした。 ### GitHubワークフロー(CI)でのrubocopの実行 .github/workflows/ci.ymlに相当するファイルがなければ作成します。 この.ymlファイルを編集して、以下のようにjobsの下にlintジョブを追加します。 #### 注意点 - `timeout-minutes:`の設定は、実行時間に対して十分余裕を持たせて下さい。 - `ruby-version: .ruby-version`という設定は、プロジェクトルートにある.ruby-versionという名前のファイルで指定されているrubyのバージョンという意味になります。[この設定について詳しくはこちらのTopicをご覧下さい。](https://www.techtips.page/ja/topics/161) - [`-f github`オプションは、出力フォーマットをGitHub Actionsに適したものにするオプションです](https://docs.rubocop.org/rubocop/formatters.html)。 ```yaml jobs: lint: runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: .ruby-version bundler-cache: true - name: Lint code for consistent style run: bin/rubocop -f github ``` ### 公式情報 - RuboCopのその他の詳細については[RuboCop公式ドキュメント](https://docs.rubocop.org/rubocop/index.html)をご覧ください。 - [Omakase Ruby styling for RailsのRuboCop設定の最新の内容はGitHubで確認出来ます](https://github.com/rails/rubocop-rails-omakase/blob/main/rubocop.yml)。なお、最新ではなくインストールしたバージョンのRuboCop設定内容をご覧になりたい場合は、GitHubの操作でTagsから当該バージョンを選択するようにして下さい。