SonicGarden 標準の rubocop設定支援をするツール
gem 'sgcop', github: 'SonicGarden/sgcop', branch: 'main'
SonicGarden 標準スタイルを用意しています。
プロジェクトルートに .rubocop.yml ファイルをつくり、Rails ではないプロジェクトの場合は以下のように書く。
inherit_gem:
sgcop: ruby/rubocop.yml
Rails プロジェクトの場合は以下のように書く。
inherit_gem:
sgcop: rails/rubocop.yml
RSpec を使うが Rails ではないプロジェクトの場合は、ruby/rubocop.yml に加えて RSpec 関連の推奨設定
(RSpec/*, Sgcop/Rspec/*)を取り込む ruby/rubocop_rspec.yml も併せて指定する。rails/rubocop.yml
はこの ruby/rubocop_rspec.yml を内部で継承しているため、Rails プロジェクトでは何もしなくても RSpec
関連設定が適用される。
inherit_gem:
sgcop:
- ruby/rubocop.yml
- ruby/rubocop_rspec.yml
標準設定ではデフォルト無効にしている汎用 Cop のうち、コードの一貫性をより高めるためにおすすめの Cop(Layout/ClassStructure, Style/MethodCallWithArgsParentheses, Style/ClassMethodsDefinitions, Rails/WhereRange など)をまとめて有効化する「厳格版」設定を用意しています。新規プロジェクトや、より統一感を重視したいプロジェクトにおすすめです。
rubocop.yml の代わりに rubocop_strict.yml を参照すると一括で有効化できます。
# Rails ではないプロジェクト
inherit_gem:
sgcop: ruby/rubocop_strict.yml
# RSpec を使うが Rails ではないプロジェクト
inherit_gem:
sgcop:
- ruby/rubocop_strict.yml
- ruby/rubocop_rspec_strict.yml
# Rails プロジェクト
inherit_gem:
sgcop: rails/rubocop_strict.yml
一括ではなく個別に取り込みたい場合は、通常版を継承したうえで必要な Cop だけを .rubocop.yml にコピーする。導入を対話的に進めたい場合は sgcop-setup スキル(skills/sgcop-setup/)が利用できる。
そして実行。
rubocop <options...>
sgcopが提供するカスタムCopの一覧です。
| Cop名 | 説明 | デフォルト |
|---|---|---|
Sgcop/ActiveJobQueueAdapter |
ActiveJobのキューアダプタ設定をチェック | ✅ |
Sgcop/LoadDefaultsVersionMatch |
config.load_defaultsのバージョンがRailsバージョンと一致することを確認 | ✅ |
Sgcop/NestedResourcesWithoutModule |
ネストされたルーティングでmoduleオプションの使用を推奨 | ❌ |
Sgcop/NoAcceptsNestedAttributesFor |
accepts_nested_attributes_forの使用を制限 | ❌ |
Sgcop/NoModelMethodsInMigration |
マイグレーションでモデルのメソッド呼び出しを検出 | ✅ |
Sgcop/ErrorMessageFormat |
エラーメッセージはシンボルを使用することを強制 | ❌ |
Sgcop/FormLabelFirstArgument |
f.labelの第一引数にはテキストではなく属性名(Symbol)を指定することを強制 | ✅ |
Sgcop/OnLoadArguments |
on_loadブロックの引数使用をチェック | ✅ |
Sgcop/PreferAbsolutePathPartial |
パーシャルファイルのrenderは絶対パスで指定(autocorrect対応) | ✅ |
Sgcop/RequestRemoteIp |
request.remote_ipの適切な使用を確認 | ✅ |
Sgcop/ResourceActionOrder |
resourcesルーティングのアクション順序を統一 | ✅ |
Sgcop/ResourcesWithoutOnly |
resourcesルーティングでonlyオプションの使用を推奨 | ✅ |
Sgcop/RetryOnInfiniteAttempts |
retry_onでの無限リトライを防止 | ✅ |
Sgcop/SimpleFormat |
simple_formatメソッドの安全な使用を確認 | ✅ |
Sgcop/SimpleFormAssociation |
SimpleFormのassociationメソッドの適切な使用をチェック | ✅ |
Sgcop/StrictLoadingRequired |
N+1問題を防ぐstrict_loadingの使用を推奨 | ❌ |
Sgcop/TransactionRequiresNew |
requires_new: trueを使用したトランザクションをチェック | ✅ |
Sgcop/UjsOptions |
Rails UJSオプションの適切な使用を確認 | ✅ |
Sgcop/Unscoped |
unscopedメソッドの使用を制限 | ✅ |
| Cop名 | 説明 | デフォルト |
|---|---|---|
Sgcop/Capybara/FillInArgument |
fill_inの第1引数をラベルまたはname属性のどちらかに統一 | ❌ |
Sgcop/Capybara/FragileSelector |
脆弱なCSSセレクタの使用を防止(data属性の使用を推奨) | ❌ |
Sgcop/Capybara/Matchers |
Capybaraマッチャーの適切な使用をチェック | ✅ |
Sgcop/Capybara/Sleep |
テストでのsleepの使用を制限 | ✅ |
Sgcop/Capybara/SpecStabilityCheck |
非同期処理テストで適切な待機マッチャーの使用を強制してテストを安定化 | ✅ |
| Cop名 | 説明 | デフォルト |
|---|---|---|
Sgcop/Rspec/ActionMailerTestHelper |
ActionMailer::Base.deliveriesやhave_enqueued_mailの代わりにActionMailer::TestHelperの適切な使用を確認 | ❌ |
Sgcop/Rspec/ActiveJobTestHelper |
RSpecのActiveJobマッチャーの代わりにActiveJob::TestHelperのメソッド使用を推奨 | ❌ |
Sgcop/Rspec/ConditionalExample |
条件付きexpectを避け、常に無条件でアサーションを行うことを推奨 | ✅ |
Sgcop/Rspec/RedundantLetReference |
letを参照するだけの無意味な処理を検出し、let!の使用や直接セットアップを推奨 | ✅ |
Sgcop/Rspec/RedundantPerformEnqueuedJobs |
ActionMailer::TestHelperメソッドとperform_enqueued_jobsの冗長な使用を防止 | ✅ |
Sgcop/Rspec/NoMethodCallInExpectation |
RSpecのexpectationでメソッド呼び出しではなくリテラル値の使用を推奨 | ❌ |
Sgcop/Rspec/NoLetOverride |
子コンテキストで親のlet/let!/subjectをオーバーライドせず独立定義を推奨 | ❌ |
| Cop名 | 説明 | デフォルト |
|---|---|---|
Sgcop/ActiveStorageServiceConfiguration |
Active Storageでクラウドストレージを使う場合、本番のservice設定が無い・:localのままになっていないか確認 |
✅ |
Sgcop/EnumerizeDefaultOption |
Enumerizeのdefaultオプションの使用をチェック | ❌ |
Sgcop/EnumerizePredicatesOption |
Enumerizeのpredicatesオプションの使用を制限(メソッド名コンフリクトを防止) | ❌ |
Sgcop/HashFetchDefault |
Hash#fetchのデフォルト値の適切な使用を確認 | ✅ |
Sgcop/I18nLazyLookup |
I18nで明示的なキーの使用を強制(コントローラー、ビュー、コンポーネント対応、autocorrect対応) | ✅ |
Sgcop/I18nLocalizeFormatString |
I18n.lのformatオプションで文字列使用を制限し、シンボル使用を推奨 | ✅ |
Sgcop/MethodArgumentNameDuplication |
メソッド名と完全一致する引数名を禁止(紛らわしさを防止) | ✅ |
Sgcop/RestrictedViewHelpers |
特定のビューヘルパーメソッドの使用を制限(設定でカスタマイズ可能) | ✅ |
Sgcop/StrftimeRestriction |
リテラル単語を含むstrftimeの使用を制限し、I18n.lの使用を推奨(指定子と区切り記号 - / : . 空白 のみのフォーマットは許容) |
✅ |
sgcop は Claude Code 向けの Agent Skill を同梱しています。導入や .rubocop_todo.yml の解消を対話的に進められます。
| スキル名 | 説明 |
|---|---|
sgcop-setup |
導入先プロジェクトの .rubocop.yml に sgcop をセットアップ・更新する。標準/厳格版の方針決定、既存設定との重複整理、.rubocop_todo.yml の生成までを支援 |
rubocop-todo-fix |
.rubocop_todo.yml に残った違反を段階的に潰す。safe autocorrect だけで完結する Cop はまとめてバッチ、それ以外は1つずつ |
GitHub CLI で導入先プロジェクトにインストールする。
gh skill install SonicGarden/sgcop
gh skillは GitHub CLI のプレビュー機能。
また、bundler-skills gem を使うと、sgcop を更新するたびにスキルを同期できる。
いずれのスキルも自動発火はしないため、Claude Code 上で /sgcop-setup や /rubocop-todo-fix のように明示的に呼び出す。
ruby/rubocop.yml, ruby/rubocop_rspec.yml, rails/rubocop.yml, ruby/rubocop_strict.yml, ruby/rubocop_rspec_strict.yml, rails/rubocop_strict.yml に新しい cop(ルール)設定を追加した後、以下のコマンドを実行すると、rubocop の cop のドキュメントへのリンクをコメントとして追加します。
ruby add_doc_links.rb
# https://docs.rubocop.org/rubocop/cops_style.html#styleasciicomments
Style/AsciiComments:
Enabled: false
Bug reports and pull requests are welcome on GitHub at https://github.com/SonicGarden/sgcop. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
The gem is available as open source under the terms of the MIT License.