個人で運用しているRuby on Rails製のWebサービスでRubyCritic
を使ってCIで品質レポートを取得するようにしたので、そのあたりのやり方等をメモしておきます📝
rubycriticとは?
RubyCritic is a gem that wraps around static analysis gems such as Reek, Flay and Flog to provide a quality report of your Ruby code.
上記の通り複数の静的解析ツールを活用していい感じのレポートを作成してくれるgemです💎
実行すると以下のようなレポートを作成してくれます。
※htmlだけではなくjson等も出力可能のようです
RubyCritic
を導入する
以下をGemfilleに追記してbundle install
すればRubyCritic
が使用出来るようになります。
gem "rubycritic", require: false
しかしデフォルトだとすべてのファイルが対象になってしまいライブラリのコードも検査してしまうので、実行時に--path
で任意のディレクトリを指定するか、プロジェクトのルートに.rubycritic.yml
を作成すると良さそうです。
paths: - 'app/' - 'lib/'
RubyCriticで特定のルールを無効化する
RubyCritic
で特定のルールを無効化する場合には、RubyCritic
が利用するツールに沿って無効化してあげる必要があります。
例えばreek
が検知するIrresponsibleModule
を無効化したい場合には、プロジェクトのルートディレクトリに以下のような.reek.yml
を追加してあげると無効化することができます。
detectors: IrresponsibleModule: enabled: false
RubyCriticをCIで実行する
CircleCIの場合は以下のようなcommandを作ってあげると良さそうです、RubyCritic
を実行して結果をartifact
で永続化しています。
commands: store_atifacts: parameters: path: type: string steps: - store_artifacts: path: << parameters.path >> run_and_store_rubycritic: steps: - run: name: run rubycritic command: bundle exec rubycritic - store_atifacts: path: tmp/rubycritic
おわりに
個人での開発だとレビューとかあまり無いので、こういうツールを積極的に活用していきたいですね!!