ドキュメント|遊び場
Rust で書かれた非常に高速な Python リンターおよびコード フォーマッタ。
CPython コードベースを最初から lint します。
pip
経由でインストール可能pyproject.toml
サポートRuff は、単一の共通インターフェイスの背後により多くの機能を統合しながら、代替ツールよりも桁違いに高速であることを目指しています。
Ruff を使用すると、Flake8 (および数十のプラグイン)、Black、isort、pydocstyle、pyupgrade、autoflake などを置き換えることができ、すべて個別のツールよりも数十倍から数百倍高速に実行できます。
Ruff は非常に積極的に開発されており、次のような主要なオープンソース プロジェクトで使用されています。
...その他にもたくさんあります。
ラフはアストラルの支援を受けています。立ち上げの投稿、または元のプロジェクトの発表を読んでください。
Sebastián Ramírez 氏、FastAPI の作成者:
Ruff は非常に高速なので、Ruff が実際に実行されてコードがチェックされていることを確認するために、意図的にコードにバグを追加することがあります。
Nick Schrock氏、Elementl の創設者、GraphQL の共同作成者:
なぜラフがゲームチェンジャーなのか?主な理由は、ほぼ 1000 倍高速であるためです。文字通り。タイプミスではありません。私たちの最大のモジュール (dagster 自体、250k LOC) では、pylint に約 2.5 分かかり、M1 上の 4 つのコアにわたって並列化されます。コードベース全体に対して ruff を実行するには 0.4 秒かかります。
ブライアン・ヴァン・デ・ヴェン、Bokeh の共同作成者、Conda のオリジナル作者:
Ruff は私のマシンでは flake8 よりも約 150 ~ 200 倍高速で、リポジトリ全体のスキャンには約 20 秒ではなく約 0.2 秒かかります。これは、ローカル開発者にとって大幅な生活の質の向上です。これは十分に速いので、実際のコミットフックとして追加しました。これは素晴らしいことです。
Timothy Crosley 氏、isort の作成者:
最初のプロジェクトを Ruff に切り替えました。今のところ欠点が 1 つだけあります。非常に高速なので、意図的にいくつかのエラーを導入するまでは動作しているとは信じられませんでした。
Zulip の主任開発者Tim Abbott 氏:
これはとんでもなく速いです...
ruff
は素晴らしいです。
詳細については、ドキュメントを参照してください。
詳細については、ドキュメントを参照してください。
Ruff は PyPI でruff
として利用できます。
# With uv.
uv add --dev ruff # to add ruff to your project
uv tool install ruff # to install ruff globally
# With pip.
pip install ruff
# With pipx.
pipx install ruff
バージョン0.5.0
以降、Ruff はスタンドアロン インストーラーでインストールできます。
# On macOS and Linux.
curl -LsSf https://astral.sh/ruff/install.sh | sh
# On Windows.
powershell -c " irm https://astral.sh/ruff/install.ps1 | iex "
# For a specific version.
curl -LsSf https://astral.sh/ruff/0.8.2/install.sh | sh
powershell -c " irm https://astral.sh/ruff/0.8.2/install.ps1 | iex "
Ruff は、Homebrew、Conda、およびその他のさまざまなパッケージ マネージャーを介してインストールすることもできます。
Ruff をリンターとして実行するには、次のいずれかを試してください。
ruff check # Lint all files in the current directory (and any subdirectories).
ruff check path/to/code/ # Lint all files in `/path/to/code` (and any subdirectories).
ruff check path/to/code/ * .py # Lint all `.py` files in `/path/to/code`.
ruff check path/to/code/to/file.py # Lint `file.py`.
ruff check @arguments.txt # Lint using an input file, treating its contents as newline-delimited command-line arguments.
または、Ruff をフォーマッタとして実行するには:
ruff format # Format all files in the current directory (and any subdirectories).
ruff format path/to/code/ # Format all files in `/path/to/code` (and any subdirectories).
ruff format path/to/code/ * .py # Format all `.py` files in `/path/to/code`.
ruff format path/to/code/to/file.py # Format `file.py`.
ruff format @arguments.txt # Format using an input file, treating its contents as newline-delimited command-line arguments.
Ruff はruff-pre-commit
介してコミット前フックとしても使用できます。
- repo : https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev : v0.8.2
hooks :
# Run the linter.
- id : ruff
args : [ --fix ]
# Run the formatter.
- id : ruff-format
Ruff は、VS Code 拡張機能として、または他のさまざまなエディターとともに使用することもできます。
Ruff はruff-action
経由で GitHub アクションとしても使用できます。
name : Ruff
on : [ push, pull_request ]
jobs :
ruff :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v4
- uses : astral-sh/ruff-action@v1
Ruff はpyproject.toml
、 ruff.toml
、または.ruff.toml
ファイルを通じて構成できます (すべての構成オプションの完全なリストについては、 「構成」または「設定」を参照してください)。
指定しない場合、Ruff のデフォルト構成は次のruff.toml
ファイルと同等になります。
# Exclude a variety of commonly ignored directories.
exclude = [
" .bzr " ,
" .direnv " ,
" .eggs " ,
" .git " ,
" .git-rewrite " ,
" .hg " ,
" .ipynb_checkpoints " ,
" .mypy_cache " ,
" .nox " ,
" .pants.d " ,
" .pyenv " ,
" .pytest_cache " ,
" .pytype " ,
" .ruff_cache " ,
" .svn " ,
" .tox " ,
" .venv " ,
" .vscode " ,
" __pypackages__ " ,
" _build " ,
" buck-out " ,
" build " ,
" dist " ,
" node_modules " ,
" site-packages " ,
" venv " ,
]
# Same as Black.
line-length = 88
indent-width = 4
# Assume Python 3.9
target-version = " py39 "
[ lint ]
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
select = [ " E4 " , " E7 " , " E9 " , " F " ]
ignore = []
# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = [ " ALL " ]
unfixable = []
# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = " ^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$ "
[ format ]
# Like Black, use double quotes for strings.
quote-style = " double "
# Like Black, indent with spaces, rather than tabs.
indent-style = " space "
# Like Black, respect magic trailing commas.
skip-magic-trailing-comma = false
# Like Black, automatically detect the appropriate line ending.
line-ending = " auto "
pyproject.toml
では、各セクション ヘッダーの先頭にtool.ruff
を付ける必要があることに注意してください。たとえば、 [lint]
[tool.ruff.lint]
に置き換える必要があります。
一部の構成オプションは、ルールの有効化と無効化、ファイル検出、ログ レベルに関連するものなど、専用のコマンドライン引数を介して提供できます。
ruff check --select F401 --select F403 --quiet
残りの構成オプションは、catch-all --config
引数を通じて提供できます。
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
最新の lint ルール、フォーマッタ スタイルの変更、インターフェイスの更新などをオプトインするには、構成ファイルでpreview = true
を設定するか、コマンド ラインで--preview
渡してプレビュー モードを有効にします。プレビュー モードでは、安定化前に変更される可能性がある不安定な機能のコレクションを有効にします。
Ruff のトップレベル コマンドの詳細についてはruff help
参照し、リンティング コマンドとフォーマット コマンドの詳細についてはそれぞれruff help check
およびruff help format
参照してください。
Ruff は 800 を超える lint ルールをサポートしており、その多くは Flake8、isort、pyupgrade などの人気のあるツールからインスピレーションを得ています。ルールの起源に関係なく、Ruff はすべてのルールをファーストパーティ機能として Rust に再実装します。
デフォルトでは、Ruff は Flake8 のF
ルールとE
ルールのサブセットを有効にし、 ruff format
や Black などのフォーマッタの使用と重複するスタイル ルールを省略します。
Ruff を使い始めたばかりの場合は、デフォルトのルール セットから始めるのが最適です。設定なしでさまざまな一般的なエラー (未使用のインポートなど) をキャッチします。
Ruff は、デフォルトを超えて、次のような最も人気のある Flake8 プラグインと関連コード品質ツールの一部を再実装します。
サポートされているルールの完全な列挙については、 「ルール」を参照してください。
貢献は歓迎されており、高く評価されています。まず、貢献ガイドラインを確認してください。
Discordに参加することもできます。
お困りですか? GitHub上の既存の問題をチェックするか、自由に新しい問題を開いてください。
Discordで助けを求めることもできます。
Ruff のリンターは、Python エコシステムの他の多くのツール、特に Flake8、Pyflakes、pycodestyle、pydocstyle、pyupgrade、isort の API と実装の詳細の両方を利用しています。
場合によっては、Ruff には、対応するツールの「直接」Rust ポートが含まれています。これらのツールのメンテナーの仕事と、彼らが Python コミュニティに提供したすべての価値に感謝します。
Ruff のフォーマッタは Rome のrome_formatter
のフォーク上に構築されており、ここでも Rome、Prettier、Black の API と実装の詳細の両方を利用しています。
Ruff のインポート リゾルバーは、Pyright のインポート解決アルゴリズムに基づいています。
Ruff は、Clippy や ESLint など、Python エコシステム外の多くのツールからも影響を受けています。
Ruff は多くの貢献者の恩恵を受けています。
Ruff は MIT ライセンスに基づいてリリースされています。
Ruff は、次のような多くの主要なオープンソース プロジェクトや企業で使用されています。
Ruff を使用している場合は、プロジェクトのREADME.md
に Ruff バッジを追加することを検討してください。
[ ![ Ruff ] ( https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json )] ( https://github.com/astral-sh/ruff )
...またはREADME.rst
:
.. image :: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
:target: https://github.com/astral-sh/ruff
:alt: Ruff
...または HTML として:
< a href =" https://github.com/astral-sh/ruff " > < img src =" https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json " alt =" Ruff " style =" max-width:100%; " > </ a >
このリポジトリは MIT ライセンスに基づいてライセンスされています