rails_best_practicesメモ
Rails用の静的コード解析ツール。rails_best_practices 1.20.0で確認。
Rails Best Practicesの内容に基づくチェックを行う。ただし、サイトを見ればわかる通り、定義された時期が相当古く、完全に時代遅れとなっているものも存在する。
以下のGemをインストールする。
group :development do
gem 'rails_best_practices'
end
bundle exec rails_best_practices
で実行すると以下のような結果が表示される。
Source Code: |=======================================================================================|
/app/app/models/user.rb:13 - remove unused methods (User#unused_method)
Please go to https://rails-bestpractices.com to see more useful Rails Best Practices.
Found 1 warnings.
bundle exec rails_best_practices -g
でconfig/rails_best_practices.yml
ファイルが生成される。
自分の考える推奨設定
AddModelVirtualAttributeCheck: { }
AlwaysAddDbIndexCheck: { }
#CheckSaveReturnValueCheck: { }
#CheckDestroyReturnValueCheck: { }
DefaultScopeIsEvilCheck: { }
DryBundlerInCapistranoCheck: { }
#HashSyntaxCheck: { }
IsolateSeedDataCheck: { }
KeepFindersOnTheirOwnModelCheck: { }
LawOfDemeterCheck: { }
#LongLineCheck: { max_line_length: 80 }
MoveCodeIntoControllerCheck: { }
MoveCodeIntoHelperCheck: { array_count: 3 }
MoveCodeIntoModelCheck: { use_count: 2 }
MoveFinderToNamedScopeCheck: { }
MoveModelLogicIntoModelCheck: { use_count: 4 }
NeedlessDeepNestingCheck: { nested_count: 2 }
NotRescueExceptionCheck: { }
NotUseDefaultRouteCheck: { }
NotUseTimeAgoInWordsCheck: { }
OveruseRouteCustomizationsCheck: { customize_count: 3 }
# Railsがマスアサインメント脆弱性対策を施している
# ProtectMassAssignmentCheck: { }
RemoveEmptyHelpersCheck: { }
RemoveTabCheck: { }
RemoveTrailingWhitespaceCheck: { }
RemoveUnusedMethodsInControllersCheck:
except_methods:
- SamplesController#sample_method
RemoveUnusedMethodsInHelpersCheck:
except_methods:
- SamplesHelper#sample_method
RemoveUnusedMethodsInModelsCheck:
except_methods:
- SampleModel#sample_method
ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 2 }
ReplaceInstanceVariableWithLocalVariableCheck: { }
RestrictAutoGeneratedRoutesCheck: { }
SimplifyRenderInControllersCheck: { }
SimplifyRenderInViewsCheck: { }
#UseBeforeFilterCheck: { customize_count: 2 }
UseModelAssociationCheck: { }
UseMultipartAlternativeAsContentTypeOfEmailCheck: { }
#UseParenthesesInMethodDefCheck: { }
UseObserverCheck: { }
UseQueryAttributeCheck: { }
UseSayWithTimeInMigrationsCheck: { }
UseScopeAccessCheck: { }
UseTurboSprocketsRails3Check: { }
設定ファイルでコメントアウトされているものはチェックされない(無論、削除しても同じ)。
RemoveUnusedMethodsInModelsCheck
などは、models.map(&:used_method)
のような形でしか呼ばれていないメソッド(この場合、used_method
メソッド)も違反として警告してくるので注意が必要。
警告の一覧と簡単な説明
- AddModelVirtualAttributeCheck
- AlwaysAddDbIndexCheck
- CheckSaveReturnValueCheck
- CheckDestroyReturnValueCheck
- DefaultScopeIsEvilCheck
- DryBundlerInCapistranoCheck
- HashSyntaxCheck
- IsolateSeedDataCheck
- KeepFindersOnTheirOwnModelCheck
- LawOfDemeterCheck
- LongLineCheck: { max_line_length: 80 }
- MoveCodeIntoControllerCheck
- MoveCodeIntoHelperCheck: { array_count: 3 }
- MoveCodeIntoModelCheck: { use_count: 2 }
- MoveFinderToNamedScopeCheck
- MoveModelLogicIntoModelCheck: { use_count: 4 }
- NeedlessDeepNestingCheck: { nested_count: 2 }
- NotRescueExceptionCheck
- NotUseDefaultRouteCheck
- NotUseTimeAgoInWordsCheck
- OveruseRouteCustomizationsCheck: { customize_count: 3 }
- ProtectMassAssignmentCheck
- マスアサインメント脆弱性のチェックのようだが、時代遅れなので無効化してよい。
- そもそも、Rails 6.1で
current_user.update_attributes(params[:user])
などを記述して実行してみたが検出されない。
- RemoveEmptyHelpersCheck
- 何も記述されていないヘルパーがある場合に警告する。
- RemoveTabCheck
- タブ文字を利用している場合に警告する。erbファイル内でも警告する。
- RemoveTrailingWhitespaceCheck
- 行末に余計なスペースがあると警告する。RuboCopで代替可能。
- RemoveUnusedMethodsInControllersCheck
- コントローラーで利用されていないメソッドがあれば警告する
- except_methodsには
FoosController#method
の形でメソッドを指定する
- RemoveUnusedMethodsInHelpersCheck
- ヘルパーで利用されていないメソッドがあれば警告する
- except_methodsには
FoosHelper#method
の形でメソッドを指定する
- RemoveUnusedMethodsInModelsCheck
- モデルで利用されていないメソッドがあれば警告する
models.map(&:used_method)
のような形でしか使われていない場合も警告されるので注意- except_methodsには
Model#method
の形でメソッドを指定する
- ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 2 }
- ReplaceInstanceVariableWithLocalVariableCheck
- RestrictAutoGeneratedRoutesCheck
- SimplifyRenderInControllersCheck
- SimplifyRenderInViewsCheck
- UseBeforeFilterCheck: { customize_count: 2 }
- UseModelAssociationCheck
- UseMultipartAlternativeAsContentTypeOfEmailCheck
- UseParenthesesInMethodDefCheck
- UseObserverCheck
- UseQueryAttributeCheck
- UseSayWithTimeInMigrationsCheck
- UseScopeAccessCheck
- UseTurboSprocketsRails3Check