Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

RubyCritic で Ruby コードの品質を向上:視覚的な分析と継続的な改善

RubyCritic は、Ruby アプリケーションのコードの匂い、コード構造、テストの容易さ、テスト カバレッジを強調する視覚的なレポートを提供します。

現在開発が活発に行われており、新しいコード分析ツールが新機能として頻繁に導入されています。 RubyCritic のリリースを追跡しておく価値は十分にあります。

この記事では、RubyCritic の利点、依存関係、コード レポートの読み方の一部について触れます。

さあ、始めましょう!

Ruby on Rails アプリケーションに RubyCritic を選ぶ理由

プロジェクトのコード改善を単一の場所でレビューしたい場合は、RubyCritic の使用を検討してください。 RubyCritic を開発プロセスに組み込むと、開発チームが技術的負債の処理に費やす時間が確実に削減されます。ほとんどの技術的負債は開発時に計画されます。

RubyCritic がプロジェクトと開発プロセスに提供できる利点には、次のようなものがあります。

  • 情報を 1 か所に統合
  • ビジュアルレポート
  • 簡単なインストール
  • ゼロ構成
  • カスタマイズが可能
  • 拡張可能 - 独自のオープンソース統合を作成できる
  • バッジジェネレーター 🎉

RubyCritic がどのように動作するかを理解するために、レポートの作成に使用される内部依存関係を見てみましょう。

RubyCritic の内部依存関係

RubyCritic をプロジェクトに追加すると、いくつかの依存関係も含まれます。

魔法を実現する依存関係、つまり Reek、Flay、Flog の宝石に焦点を当ててみましょう。これらの依存関係により、RubyCritic はコードに関する貴重な情報を表示できるようになります。 RubyCritic がどのように機能するかを理解すると、RubyCritic が使いやすくなります。

Reek:Ruby でコードの匂いを検出する

Reek は、Ruby のコードの匂いを検出するための gem です。コード内の嫌な臭いは、間違ったコードを特定することではなく、コードをより適切に記述できるかどうかを分析することです。

Reek の分析により、if が特定されます。 何かを別の方法で実装できる可能性があります。それは方法を示唆するものではありません。 ほとんどのコードの匂いはビジネス ロジックと開発者の言語経験に関連付けられているためです。

たとえば、if を簡単に書き換えることができます。 メタプログラミング技術を使用したステートメント。ただし、それを修正する方法は、プロジェクトのコンテキストに応じて開発者次第です。この場合、どのライブラリも最適な解決策を示すことができません。

Reek は広範囲にわたる臭いのリストを検出します。以下の臭いの可能性を調べて特定します。

  • クラス
  • 属性
  • メソッド
  • パラメータ
  • モジュール
  • イテレータ
  • ポリモーフィズムの実装

匂いを見つけることで、コードをより読みやすく、保守しやすくするための措置を講じることができます。

Reek では、次のようなカスタム構成が可能です。

  • タイプに応じてディテクタを無効にする
  • ディレクトリをスキャンから除外する
  • フィルタを使用して警告を消す

スキャンで抑制する特定のコードを定義することもできます。これは、コードがまだ完成していないかリファクタリングされていない場合、またはレガシー コードであっても、非常に便利な機能です。

Reek がどのように機能するかのサンプルを見てみましょう。このコードでは、例外は e として定義されています。 .

 

e であることは容易に想像できます。 は例外を意味しますが、他にも例外がある場合はどうなるでしょうか?それらを正しく識別することが、良好なコードを維持するための最良の方法です。

リークは e を識別します UncommunicativeVariableName として警告を表示します。

 

Flay:Ruby コードの重複をチェックする

Flay は、次のような構造的な Ruby コードの類似点を特定します。

  • プロジェクト内のコードの重複を検出する
  • あらゆるコードレベルでの違いを確認する
  • コードの良さを測定するスコアを生成します(スコアが低いほど、コードは優れています)

Flay がコード内の類似性を報告した場合、それはリファクタリングが必要であることを示す高い指標です。これを無視しないでください。重複コードはバグの入り口です。ある場所で何かを修正しても別の場所を忘れると、さらに多くのバグが発生します。

Flay を独自のソース コードで実行することで、Flay がどのように動作するかを確認できます。

 

Flay は、次の 2 つの類似点を特定します。

 

コードのスペルはまったく同じではありませんが、機能は同じであり、重複を避けるためにリファクタリングできることに注意してください。それがフレイの魔法です!

フロッグ:Ruby のコードの複雑さを調べる

Flog は、コードのテストの難易度をチェックします。コードの各行に複雑さのスコアを設定し、各メソッドとクラスのスコアを合計します。

スコアが高いほど、実装が非常に複雑であることを意味するため、より多くのコードをリファクタリングする必要があります。

Flog の動作を見てみましょう!わずかな変更によりスコアが変動する可能性があります。

 
 

コードの最初の部分には or があることに注意してください。 スコアを 0.4 ポイント増加させるチェック。

 
 

その他の RubyCritic 依存関係

RubyCritic は、次のような他のランタイム依存関係も使用します。

  • byebug - これにより、Ruby アプリケーションのデバッグが向上します。これにより、プログラムを 1 行ずつ実行し、ブレークポイントを追加し、実行時に値を評価および追跡することができます。まだ puts を使用している場合 デバッグするには、Byebug の機能とコマンドを理解する時期です。
  • rubocop - Ruby コミュニティで使用されているスタイル ガイドに従うか、独自のコード スタイルを適用するのに役立つ Ruby コードのリンター。チーム内で基準を設定し、スペースやタブに関する愚かな衝突を避けることは非常に役立ちます。
  • SimpleCov - Ruby アプリケーションのコード カバレッジをチェックするツール。テストと一緒に実行するように構成できます。コード カバレッジに関する指標が提供されるため、より良いテストケースを作成するために何に注意を払う必要があるか、どこに時間を投資すべきかを特定できます。

RubyCritic の依存関係のリストを詳しく見てみましょう。

Ruby on Rails アプリに RubyCritic を使用する

RubyCritic には、多くの設定を行わずに開始するのに役立つ優れたドキュメントが用意されています。したがって、レポートの分析に役立つリソースを活用することに重点を置きます。

RubyCritic は、「コード」、「匂い」、および「カバレッジ」レポートを提供します。これらの各機能を順番に見ていきます。

RubyCritic の概要

「概要」ページには、プロジェクトの合計スコアが評価とともにドーナツ チャートで表示されます (A が最高の評価、F が最悪の評価)。 「概要」セクションには、ファイル数、チャーン (コミット変更)、見つかった匂いなど、各評価の詳細が表示されます。

RubyCritic で Ruby コードの品質を向上:視覚的な分析と継続的な改善

ここの「チャーン vs 複雑さ」セクションでは、最も複雑なクラスを特定することがすでに可能であり、おそらく最初に注目すべき点です。

このグラフをより深く理解するには、コード チャーンについて復習する価値があります。コードが頻繁に変更されると、ロジックやビジネス ドメインなどで何かが間違っているという警告が発せられることがあります。いずれにせよ、「チャーン vs 複雑さ」に注目すると、プロジェクト全体のどこに問題点があるかを知ることができます。

コードレポート

「コード」レポートには、チャーン、複雑さ、重複、臭いなどの指標を含む各クラスのスコアが表示されます。

このリストを任意の列で並べ替えて、最も順位の高い要素を表示し、最も重要な問題に最初に対処できます。

RubyCritic で Ruby コードの品質を向上:視覚的な分析と継続的な改善

さらに、このリストには、クラス名ですばやく検索できるフィルターが含まれています。

クラス名をクリックすると、次のようなクラス コードとメトリクスを含む詳細ページが開きます。

  • コード行
  • 数量メソッド
  • 計算されたチャーン
  • メソッド別の複雑さ
  • 複雑さのスコア (クラスごとの合計)
  • 見つかった重複の数
  • 匂いの数

問題が見つかったコード行が強調表示されます (Reek gem によって提供される情報に基づいて)。

Flog が問題を特定すると、スコアが表示されます。また、Flay レポートで重複コードが検出されたかどうかも確認できます。

RubyCritic で Ruby コードの品質を向上:視覚的な分析と継続的な改善

臭いレポート

「臭い」ページには、臭いのタイプ、臭いが発生する正確な場所、修正ステータスが表示されます。

前述したように、匂いは Reek によって検出され、並べ替えとフィルタリングもこのページで利用できます。

クラス名をクリックすると、コードの詳細が記載されたページが開きます。また、匂いのタイプごとにグループ化されたクラスを確認することもできます (これは、匂いの数のみが表示される「コード」ページにはありません)。

RubyCritic で Ruby コードの品質を向上:視覚的な分析と継続的な改善

カバレッジレポート

最後に、「カバレッジ」レポートでクラス分類と各クラスのカバレッジの割合を確認できます。 「コード」レポートと「匂い」レポートのリストとは対照的に、「カバレッジ」レポートのリストでは情報の並べ替えやフィルタリングができません。

コード カバレッジの割合のみが表示されます。追加情報はありません。

RubyCritic で Ruby コードの品質を向上:視覚的な分析と継続的な改善

SimpleCov レポートを統合すると、このページにさらに価値と有用性が追加される可能性があります。ただし、いずれの場合でも、プロジェクトのテスト カバレッジを調べるための簡単なレポートが必要な場合は、「カバレッジ」レポートが役に立ちます。

まとめ

この投稿では、内部依存関係である Reek、Flay、Flog について詳しく説明する前に、Ruby アプリケーションに対する RubyCritic の利点を簡単に説明しました。次に、RubyCritic のレポートを読んで分析する方法を説明しました。

次のステップとして、パイプラインで RubyCritic を使用する方法を見つけます。

コードのリファクタリングを楽しんでください!

追記Ruby Magic の投稿を報道後すぐに読みたい場合は、Ruby Magic ニュースレターを購読して、投稿を 1 つも見逃さないようにしてください。

RubyCritic で Ruby コードの品質を向上:視覚的な分析と継続的な改善

ブレナ モンテイロ

ゲスト著者の Brena は、新しい開発者の指導に情熱を注ぐ技術リーダーであり、高パフォーマンスのチームの開発と指導に経験があります。彼女は、スケーラブルな API の構築とクラウド サービス間の統合の経験があり、進化的なアーキテクチャに熱心で、拡張現実 (XR) の見習いです。

Brena Monteiro によるすべての記事


  1. AppSignal を使用して Ruby on Rails アプリのパフォーマンスを効率的に監視する

    この記事シリーズの最初の部分では、シンプルな Ruby on Rails アプリケーションを DigitalOcean のアプリ プラットフォームにデプロイしました。また、Rails アプリを AppSignal に接続し、単純なエラーがどのように追跡され、AppSignal のエラー ダッシュボードに表示されるかを確認しました。 シリーズのこのパートでは、AppSignal を使用して Ruby on Rails アプリケーションに以下を設定する方法について詳しく説明します。 パフォーマンスのモニタリング Rails バックグラウンド ジョブの監視(単純な API 呼び出しの監視方法を含

  2. 「PaaS を使用しない」アプローチは Rails 開発者にとって賢明な選択ですか?

    Rails 8 は、「PaaS は必要ない」という大胆な前提のもとに出荷されました。クラウド プラットフォームのコストが上昇するにつれて、Ruby on Rails は外部インフラストラクチャの依存関係を削減することに移行し、開発者がこれまでよりも少ないサービス依存関係でアプリケーションをデプロイおよび実行できるようにしました。 従来、Rails アプリをインターネットにデプロイするには、データベース サーバー (PostgreSQL など) と、キャッシュ、バックグラウンド ジョブ、WebSocket 用の Redis などの追加サービスをプロビジョニングする必要がありました。 Rai