Skip to content

SonicGarden/sgcop

Repository files navigation

Sgcop

SonicGarden 標準の rubocop設定支援をするツール

Installation

gem 'sgcop', github: 'SonicGarden/sgcop', branch: 'main'

Usage

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

厳格版(strict)設定

標準設定ではデフォルト無効にしている汎用 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...>

カスタムCop一覧

sgcopが提供するカスタムCopの一覧です。

Rails関連

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メソッドの使用を制限

Capybara関連

Cop名 説明 デフォルト
Sgcop/Capybara/FillInArgument fill_inの第1引数をラベルまたはname属性のどちらかに統一
Sgcop/Capybara/FragileSelector 脆弱なCSSセレクタの使用を防止(data属性の使用を推奨)
Sgcop/Capybara/Matchers Capybaraマッチャーの適切な使用をチェック
Sgcop/Capybara/Sleep テストでのsleepの使用を制限
Sgcop/Capybara/SpecStabilityCheck 非同期処理テストで適切な待機マッチャーの使用を強制してテストを安定化

RSpec関連

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の使用を推奨(指定子と区切り記号 - / : . 空白 のみのフォーマットは許容)

Agent Skill

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 のように明示的に呼び出す。

設定ファイルにドキュメントのリンクを付加するスクリプト(sgcop 開発者向け)

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

Contributing

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.

License

The gem is available as open source under the terms of the MIT License.

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages