ReadmeGenie を開発するとき、リンティングとフォーマットの自動セットアップを使用して、一貫したコード品質を確保することを目指しました。いくつかのツールを検討した結果、リンターとして Ruff を、コード フォーマッタとして Black を選択しました。 Ruff もリンティングとフォーマットの両方を処理できますが、両方のツールの構成について経験を積むために、Black を別個のフォーマッタとしてセットアップすることにしました。以下では、これらのツールを選んだ理由、プロジェクトに合わせてツールをどのように構成したか、直面した課題、そしてその過程で学んだ教訓を共有します。
Ruff は、他のリンター (Flake8 や Pyflakes など) のさまざまなリンティング ルールをサポートし、パフォーマンスを大幅に向上させる Python 用の高速リンターです。高度にカスタマイズ可能であるため、書式設定に黒との互換性を確保しながら、ルールの組み合わせを指定できます。スピードと拡張性を重視した Ruff の設計は、品質を犠牲にすることなく効率を優先するプロジェクトに最適です。
Black は、1 つの書式設定スタイルを厳密に強制する Python フォーマッタで、コード スタイルに関する議論や不一致を減らすのに役立ちます。 Ruff は基本的な書式設定機能を提供しますが、Black の専用のアプローチにはいくつかの利点があります。
幅広い採用: 黒は広く使用されているため、ほとんどの開発ワークフロー、特に共同プロジェクトでの統合が容易になります。
Black ドキュメント: https://github.com/psf/black
Ruff と Black が ReadmeGenie でシームレスに動作するように、pyproject.toml と
の両方で設定しました。
.pre-commit-config.yaml により、開発者はコミット時にコードを自動的にフォーマットして lint することができます。
この設定により、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 を構成しました。
# .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
上記の設定では、次のコマンドを使用できます:
# 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 ファイルに修正を適用し、一貫したスタイルと品質チェックを保証します。
保存時に Ruff と Black を自動化するために、.vscode/settings.json に次の構成を追加しました。
ruff check . --fix
このセットアップにより、Black がデフォルトのフォーマッタになり、Ruff が VS Code の唯一のアクティブなリンターになり、両方を実行できるようになります
保存時に自動的に行われます。
構成が完了すると、Ruff と Black はいくつかの問題を特定しました。
注目すべき課題の 1 つは、ラフとブラックの間で互換性のないスタイルがあることを理解することでした。例:
Ruff と Black を一緒に使用することは、コードの品質を向上させる優れた方法です。私が学んだことは次のとおりです:
以上がコード品質のためのツールのセットアップの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。