ホームページ  >  記事  >  バックエンド開発  >  コード品質のためのツールのセットアップ

コード品質のためのツールのセットアップ

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 05:47:02359ブラウズ

Setting Up Tools for Code Quality

ReadmeGenie を開発するとき、リンティングとフォーマットの自動セットアップを使用して、一貫したコード品質を確保することを目指しました。いくつかのツールを検討した結果、リンターとして Ruff を、コード フォーマッタとして Black を選択しました。 Ruff もリンティングとフォーマットの両方を処理できますが、両方のツールの構成について経験を積むために、Black を別個のフォーマッタとしてセットアップすることにしました。以下では、これらのツールを選んだ理由、プロジェクトに合わせてツールをどのように構成したか、直面した課題、そしてその過程で学んだ教訓を共有します。


1. ツールの選択

なぜラフなのか?

Ruff は、他のリンター (Flake8 や Pyflakes など) のさまざまなリンティング ルールをサポートし、パフォーマンスを大幅に向上させる Python 用の高速リンターです。高度にカスタマイズ可能であるため、書式設定に黒との互換性を確保しながら、ルールの組み合わせを指定できます。スピードと拡張性を重視した Ruff の設計は、品質を犠牲にすることなく効率を優先するプロジェクトに最適です。

  • Ruff ドキュメント: https://github.com/charliermarsh/ruff

なぜ黒なのか?

Black は、1 つの書式設定スタイルを厳密に強制する Python フォーマッタで、コード スタイルに関する議論や不一致を減らすのに役立ちます。 Ruff は基本的な書式設定機能を提供しますが、Black の専用のアプローチにはいくつかの利点があります。

  • 一貫性: 黒は、コードのフォーマットに関する議論を最小限に抑える、厳格な標準スタイルを強制します。
  • 幅広い採用: 黒は広く使用されているため、ほとんどの開発ワークフロー、特に共同プロジェクトでの統合が容易になります。

  • Black ドキュメント: https://github.com/psf/black

2. プロジェクトのセットアップ

Ruff と Black が ReadmeGenie でシームレスに動作するように、pyproject.toml と
の両方で設定しました。 .pre-commit-config.yaml により、開発者はコミット時にコードを自動的にフォーマットして lint することができます。

pyproject.toml での Ruff と Black の構成

この設定により、Ruff はリンティングのみに使用され、Black はフォーマットにのみ使用されます。

# pyproject.toml
# Set up black as formatter
[tool.black]
line-length = 88
target-version = ["py311"]

# Set up ruff as linter only
[tool.ruff]
# Exclude directories that don’t need linting (e.g., virtual environments)
exclude = [
    "venv/",
    "__pycache__/"
]
fix = true


# Enable specific linting rules
select = ["F", "E", "W", "B", "I", "S"]  # Example codes: F=flake8, E=errors, W=warnings, B=bugbear, I=import, S=safety
# Exclude Black-compatible rules to avoid conflicts with Black's formatting.
ignore = ["E501", "E203", "E231"]  # Exclude Black-incompatible style issues
  • 無視: 黒は特定のスタイルを処理するため、Ruff ではこれらのルールを除外しました。
  • fix: 可能な限り Ruff が問題を修正できるようにし、書式設定を黒のままにします。

Ruff と Black の事前コミットフックの追加

コミット前フックを使用して、すべてのコミットでリンティングとフォーマットを強制するように .pre-commit-config.yaml を構成しました。

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/psf/black
    rev: 23.1.0
    hooks:
      - id: black
  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: v0.7.1
    hooks:
      - id: ruff

3. コマンドラインから Ruff と Black を実行する

上記の設定では、次のコマンドを使用できます:

  • ラフを実行:
# pyproject.toml
# Set up black as formatter
[tool.black]
line-length = 88
target-version = ["py311"]

# Set up ruff as linter only
[tool.ruff]
# Exclude directories that don’t need linting (e.g., virtual environments)
exclude = [
    "venv/",
    "__pycache__/"
]
fix = true


# Enable specific linting rules
select = ["F", "E", "W", "B", "I", "S"]  # Example codes: F=flake8, E=errors, W=warnings, B=bugbear, I=import, S=safety
# Exclude Black-compatible rules to avoid conflicts with Black's formatting.
ignore = ["E501", "E203", "E231"]  # Exclude Black-incompatible style issues
  • ランブラック:
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/psf/black
    rev: 23.1.0
    hooks:
      - id: black
  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: v0.7.1
    hooks:
      - id: ruff

これらのコマンドはすべての Python ファイルに修正を適用し、一貫したスタイルと品質チェックを保証します。

4. VS コードの統合

保存時に Ruff と Black を自動化するために、.vscode/settings.json に次の構成を追加しました。

  ruff check . --fix

このセットアップにより、Black がデフォルトのフォーマッタになり、Ruff が VS Code の唯一のアクティブなリンターになり、両方を実行できるようになります
保存時に自動的に行われます。

5. 発見と修正

構成が完了すると、Ruff と Black はいくつかの問題を特定しました。

  • 行の長さ (E501): Ruff は最初に長い行にフラグを立てましたが、Black が自動フォーマットしました。
  • 未使用のインポートと変数: Ruff はいくつかの未使用のインポートと変数をキャッチしました。
  • インデントとスタイルの一貫性: 黒で一貫した間隔とインデントが適用され、読みやすさが向上しました。

6. 課題

注目すべき課題の 1 つは、ラフとブラックの間で互換性のないスタイルがあることを理解することでした。例:

  • 行の長さ (E501): Ruff は最初に 88 文字を超える長い行にフラグを立てましたが、Black はこれを折り返して処理します。 線。競合を防ぐために、Ruff の無視リストに E501 を追加しました。それにもかかわらず、Ruff は時々 E501 エラーにフラグを立てました 黒が予期したブレークポイントを適用しなかった場合。これらの矛盾は、各ツールの調整の重要性を強調しました。 構成を変更し、重複する可能性がある場所を理解します。

7. 学んだ教訓

Ruff と Black を一緒に使用することは、コードの品質を向上させる優れた方法です。私が学んだことは次のとおりです:

  • 一貫性: Black の独自のスタイルにより、コード スタイルの曖昧さが軽減されます。
  • 自動化: 事前コミットフックにより時間を節約し、一貫したフォーマットを保証します。
  • エディターの統合: VS Code 内で保存時に実行されるように Ruff と Black を構成すると、開発が合理化されます。
  • 互換性: E501 のような競合を解決する方法を学ぶことで、ツールの構成について学び、役に立ちました。 プロジェクトのワークフローを微調整します。

以上がコード品質のためのツールのセットアップの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。