

Rubycriticは、Reek、Flay、Flogなどの静的な分析宝石を包み込み、Rubyコードの品質レポートを提供する宝石です。
この宝石は、次のような機能を提供します。
プロジェクトの概要: 
それぞれの臭いを持つプロジェクトファイルのインデックス: 
検出された匂いのインデックス: 
次のようなコードを分析する場合:
class Dirty
def awful ( x , y )
if y
@screen = widgets . map { | w | w . each { | key | key += 3 } }
end
end
endそれは基本的に次のようなものに変わります:

このようなものに:

ソース制御システム(GIT、Mercurial、Perforceのみが現在サポートされている)を使用して、現在コミットされていない変更を最後のコミットと比較します。
警告:Rubycriticを実行した後にコードが予想されていない場合は、ソースコントロールシステムのスタッシュを確認してください。
コアメトリックの詳細については、 /docsチェックアウトしてください。
Rubycriticは、次のコマンドでインストールできます。
$ gem install rubycriticBundlerを使用してRubycriticをインストールしたい場合は、この行をアプリケーションのGemfileに追加します。
gem "rubycritic" , require : falseそして実行してください:
$ bundle引数なしでrubycritic実行すると、現在のディレクトリ内のすべてのRubyファイルが分析されます。
$ rubycriticまたは、 rubycriticファイルとディレクトリのリストに渡すことができます。分析は、提供されたファイルとディレクトリにスコープされます。
$ rubycritic app lib/foo.rbコマンドラインオプションの完全なリストを実行するには:
$ rubycritic --help| コマンドフラグ | 説明 |
|---|---|
-v / --version | 現在のバージョンを表示して終了します |
-p / --path | レポートが保存されるパスを設定します(デフォルトでTMP/rubycritic) |
--coverage-path | SimpleCovが保存されるパスを設定します(デフォルトで/coverage) |
-f / --format | 特定の形式で臭いを報告します1 |
--custom-format path:classname | カスタムフォーマッタをロードしてインスタンス化する2 |
-s / --minimum-score | 最小スコア(フロート:例:96.28)を設定し、デフォルト:0 |
-m / --mode-ci | CIモード3を使用します |
-b / --branch | 比較するブランチを設定します |
-t / - --maximum-decrease | 2つのブランチ間のスコア差のしきい値4 |
--deduplicate-symlinks | 最終的なターゲットに基づいてシンリンクを非複製します |
--suppress-ratings | 文字評価を抑制します |
--no-browser | ブラウザでHTMLレポートを開かないでください |
html (デフォルト;ブラウザで開きます)jsonconsolelint-bを参照してください-b 、デフォルトでのみ動作します:0構成ファイルを使用することもできます。プロジェクトルートパスで.rubycritic.ymlを作成するだけです。
1つの例があります。
mode_ci :
enabled : true # default is false
branch : ' production ' # default is main
branch : ' production ' # default is main
path : ' /tmp/mycustompath ' # Set path where report will be saved (tmp/rubycritic by default)
coverage_path : ' /tmp/coverage ' # Set path where SimpleCov coverage will be saved (./coverage by default)
threshold_score : 10 # default is 0
deduplicate_symlinks : true # default is false
suppress_ratings : true # default is false
no_browser : true # default is false
formats : # Available values are: html, json, console, lint. Default value is html.
- console
minimum_score : 95 # default is 0
paths : # Files to analyse. Churn calculation is scoped to these files when using Git SCM.
- ' app/controllers/ '
- ' app/models/ 'Reek : RubyCritic 、 Reekのデフォルト構成読み込みメカニズムを利用しています。これは、既存のReek構成ファイルを持っている場合、これをプロジェクトルートに入れるだけで、 RubyCriticこの構成を尊重することを意味します。flay : flayのデフォルト構成を使用します。flog : flogのデフォルト構成を使用して、いくつかの小さな調整を備えています。all :すべてのクラスとメソッドのスコアを報告するようにflogします。このオプションがなければ、 flog特定のしきい値までの結果のみを与えます。continue :Rubyファイルを解析できないときにflogが中止されないようにします。methods :メソッドの外側にflogスキップコードに構成します。 flogが「メソッド」をprivateでprotectedを報告するのを防ぎます。また、 flogがbefore_actionやhas_manyなどのRailsメソッドの報告を防ぎます。あなたが警備員が好きなら、あなたはガード・ルービcriticが好きかもしれません。 Rubyファイルが変更されたときに自動的に分析されます。
継続的な統合のために、Jenkins CIにスピンを与えることができます。それで、あなたは簡単にあなた自身の(貧しい人の)コードの気候を構築できます!
このような最もシンプルな形でRubycriticとしてRake Commandを使用できます。
require "rubycritic/rake_task"
RubyCritic :: RakeTask . new利用可能なすべての構成オプションを使用するより洗練されたレーキタスクは、次のようになります。
RubyCritic :: RakeTask . new do | task |
# Name of RubyCritic task. Defaults to :rubycritic.
task . name = 'something_special'
# Glob pattern to match source files. Defaults to FileList['.'].
task . paths = FileList [ 'vendor/**/*.rb' ]
# You can pass all the options here in that are shown by "rubycritic -h" except for
# "-p / --path" since that is set separately. Defaults to ''.
task . options = '--mode-ci --format json'
# Defaults to false
task . verbose = true
# Fail the Rake task if RubyCritic doesn't pass. Defaults to true
task . fail_on_error = true
endRubycriticは、デフォルトでブラウザを使用して生成されたレポートを開きます。これを望まない場合は、それに応じてオプションを設定することでこの動作を防ぐことができます。
RubyCritic :: RakeTask . new do | task |
task . options = '--no-browser'
end複数のレーキタスクを作成したい場合(たとえば、ローカルおよびCI固有の構成用)、そうすることができます!これを行うことにした場合は、各タスクのより明確な説明を提供する必要があります。
# for local
RubyCritic :: RakeTask . new ( "local" , "Run RubyCritic (local configuration)" do | task |
# ...
end
# for CI
RubyCritic :: RakeTask . new ( "ci" , "Run RubyCritic (CI configuration)" do | task |
task . options = "--mode-ci"
# ...
end フォーマッタを参照してください
RubycriticはRubyバージョンをサポートしています:
| ルビーバージョン | 最新のRubycriticバージョン |
|---|---|
| 2.4 | v4.7.0 |
| 2.5 | v4.7.0 |
| 2.6 | v4.7.0 |
| 2.7 | v4.9.x |
| 3.0 | 最新 |
| 3.1 | 最新 |
| 3.2 | 最新 |
| 3.3 | 最新 |
Rubycriticは、他のコード品質分析サービスにとって2番目の選択肢である必要はありません。一緒に、私たちはそれを改善し、Rubyエコシステムで利用可能な優れたコードメトリックツールの上に構築し続けることができます。
間違いなく、Better_errorsの宝石は、ページデザインを変更した(かなり素晴らしい)プルリクエストを受け取った後にのみ人気がありました。
同様に、宝石のルックアンドフィールを改善する、評価の計算を微調整する、または既存の問題を修正するリクエストをプルすることを歓迎します。問題についてコメントし、何かがどのように機能するかについての洞察を与えるだけです。貢献が小さすぎることはありません。
Rubycriticの進行方法に関する貢献ガイドラインを参照してください。
RubyCritics初期著者はGuilherme Simesでした。
現在のコアチームは次のとおりです。

RubycriticはWhitesmithによって維持され、資金提供されています。質問や提案を@whitesmithcoにツイートします。