Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby: RubyCriticでコードを静的解析して品質を計測するMEMO📝

個人で運用している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です💎

github.com

実行すると以下のようなレポートを作成してくれます。

f:id:madogiwa0124:20210320154053p:plain

※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

github.com

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

おわりに

個人での開発だとレビューとかあまり無いので、こういうツールを積極的に活用していきたいですね!!

参考

github.com