スポンサーリンク
Python

爆速Lint!RuffでPythonコードをクリーンに保つ方法【VSCode+uv対応】

Python
この記事は約5分で読めます。

Python開発でコードの品質を保つには、flake8isortblack など複数のツールを組み合わせるのが一般的。でも、それらをひとつにまとめて超高速に動作するLintツールがあるんです。それが Ruff

この記事では、uv 環境+VSCodeを前提に、Ruffの導入から実例、自動チェック、プロジェクトごとの切り替え、拡張機能、設定ファイルの解説までを紹介します。

✅ Ruffとは?

  • Rust製の超高速Python Linter
  • flake8isortpyflakespep8-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.jsonruffEnabled: 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拡張機能は便利だけど、本体のインストールは必須!

コメント

タイトルとURLをコピーしました