Python開発でコードの品質を保つには、flake8 や isort、black など複数のツールを組み合わせるのが一般的。でも、それらをひとつにまとめて超高速に動作するLintツールがあるんです。それが Ruff!
この記事では、uv 環境+VSCodeを前提に、Ruffの導入から実例、自動チェック、プロジェクトごとの切り替え、拡張機能、設定ファイルの解説までを紹介します。
✅ Ruffとは?
- Rust製の超高速Python Linter
flake8、isort、pyflakes、pep8-namingなどの機能を統合- 一部の問題は
--fixで自動修正可能 pyproject.tomlで設定管理できる
⚙️ uv環境での導入手順
uv venv
source .venv/bin/activate
uv pip install ruff
📦 pyproject.tomlとは?
Pythonプロジェクトの設定を一元管理するファイルで、ビルドツールやLinter、Formatterなどの設定をまとめて記述できます。Ruffもここに設定します。
例:
[tool.ruff]
line-length = 100
select = ["E", "F", "N", "I"]
ignore = ["E501"]line-length: 行の最大長select: 有効にするルール(E: pycodestyle, F: pyflakes, N: 命名, I: import順)ignore: 無視するルール(E501は行が長すぎる警告)
🧪 実例①:不要なimportの削除
import os
import sys
def greet():
print("Hello!")
上記コードは、使用しないライブラリをインポートしている場合です。このソースをruffでチェックします。
ruff check main.py手動チェック結果
(dev001) (base) C:\Ruff\dev001>ruff check main.py
warning: The top-level linter settings are deprecated in favour of their counterparts in the `lint` section. Please update the following options in `pyproject.toml`:
- 'ignore' -> 'lint.ignore'
- 'select' -> 'lint.select'
I001 [*] Import block is un-sorted or un-formatted
--> main.py:2:1
|
2 | / import os
3 | | import sys
| |__________^
4 |
5 | def greet():
|
help: Organize imports
F401 [*] `os` imported but unused
--> main.py:2:8
|
2 | import os
| ^^
3 | import sys
|
help: Remove unused import: `os`
F401 [*] `sys` imported but unused
--> main.py:3:8
|
2 | import os
3 | import sys
| ^^^
4 |
5 | def greet():
|
help: Remove unused import: `sys`
Found 3 errors.
[*] 3 fixable with the `--fix` option.修正:
ruff check main.py --fix
不要なインポートが消えます。

🧪 実例②:関数名がPEP8違反(先頭が大文字)
def HelloWorld():
print("Hi!")上記コードは、関数名の先頭が大文字になっており、PEP8の違反になっています。チェックしてみます。
ruff check main.py
手動チェック結果:
(dev001) (base) C:\Ruff\dev001>ruff check main.py
warning: The top-level linter settings are deprecated in favour of their counterparts in the `lint` section. Please update the following options in `pyproject.toml`:
- 'ignore' -> 'lint.ignore'
- 'select' -> 'lint.select'
N802 Function name `HelloWorld` should be lowercase
--> main.py:1:5
|
1 | def HelloWorld():
| ^^^^^^^^^^
2 | print("Hi!")
|
Found 1 error.修正:
ruff check main.py --fixこの場合は、自動で修正はしてくれません。関数名を変えると、その関数を呼び出している他の場所も全部修正しないとバグになる可能性があるからです。人間が判断してくださいというスタンスになります。
💾 VSCodeで保存時に自動チェック&修正
VSCode保存時に自動でチェック&修正をしたい場合は、.vscode/settings.json に以下を追加します。
{
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
"python.linting.enabled": true,
"python.linting.ruffEnabled": true
}
🔁 プロジェクトごとの有効・無効切り替え
✅ 新規プロジェクトで有効にする
pyproject.tomlを作成.vscode/settings.jsonにruffEnabled: trueを設定
🚫 既存プロジェクトで無効にする
VSCodeのグローバル設定(settings.json)に以下を追加:
{
"python.linting.ruffEnabled": false
}🧩 VSCodeのRuff拡張機能って必要?
最近登場した公式Ruff拡張機能(by Astral Software)を入れると:
- Lint結果がVSCodeの問題タブに表示される
- 保存時の自動修正がスムーズに
pyproject.tomlの補完もサポート
ただし、拡張機能だけでは動かず、Python環境に ruff 本体が必要です!
🎯 まとめ
- Ruffは爆速&多機能なPython Linter
uv+VSCodeで簡単に導入可能pyproject.tomlで柔軟に設定- VSCode拡張機能は便利だけど、本体のインストールは必須!


コメント