リンティングとフォーマットにおける「待ち時間」という悩み
大規模なPythonプロジェクトを管理しているなら、こんな光景に見覚えがあるはずです。コードを書き終えて保存ボタンを押し、Blackがコードを再フォーマットするのを3〜5秒間待つ。続いてCI/CDを実行し、Flake8がロジックエラーをチェックするのにさらに数分かかる。
数百ファイル規模のプロジェクトに初めて携わったとき、私はこの待ち時間を当然のことだと思っていました。しかし、本番環境で完全にRuffに移行して半年後、いかに多くの時間を無駄にしていたかに気づきました。Ruffは単なる新しいツールではありません。Rust言語のパワーによって、コード品質を維持する方法を根本から変えてしまうのです。
なぜ既存のツールを捨ててRuffを使うべきなのか?
1. 驚異的な処理速度
Ruffの速さは信じられないほどです。公式のベンチマークによると、Flake8よりも10倍から100倍高速です。実際、約500ファイルのレポジトリでは、Flake8が完了までに約10秒かかるのに対し、Ruffはわずか0.18秒で終わります。Ctrl + Sを押した瞬間にコードが正しいフォーマットに整う感覚は、一度味わうと病みつきになります。
2. すべてを一つに(オールインワン)
以前は、設定ファイルが.flake8、pyproject.toml(Black用)、.isort.cfgなど、あちこちに散乱していました。Ruffはこの煩雑さを完璧に解消します。一つのツールだけで、以下の機能を完全に代替できます。
- Flake8: ロジックエラーとコードスタイルのチェック。
- Black: 標準に従ったコードの自動フォーマット。
- isort: インポート文の整理・ソート。
- pyupgrade: 最新のPython構文への自動アップグレード。
3. インテリジェントな自動修正(Autofix)機能
Ruffはただ指摘するだけではありません。多くの一般的なエラーを自動的に修正する能力を持っています。--fixフラグを追加するだけで、不要なインポートの削除、未使用変数の修正、古い構文からPython 3.10以降への変換などを自動で行います。警告の約80%は、キーボードに触れることなく解消されます。
実プロジェクトへのRuff導入ガイド
導入にあたって、すぐにすべてを削除する必要はありません。まずは以下の手順で、既存のツールと並行して試してみてください。
ステップ1:簡単なインストール
pipやPoetryなどのパッケージマネージャー経由でインストールできます:
pip install ruff
macOSを使用していて、マシン上のすべてのプロジェクトで使用したい場合:
brew install ruff
ステップ2:pyproject.tomlでの集中設定
設定はpyproject.tomlに集約することをお勧めします。これによりプロジェクトが非常にすっきりします。以下は私が実際のプロジェクトで適用している設定セットです:
[tool.ruff]
line-length = 88
target-version = "py311"
[tool.ruff.lint]
# E, F: 基本的なFlake8ルール
# I: isort (インポートの整列)
# B: flake8-bugbear (潜在的なロジックエラーの検出)
# UP: pyupgrade (構文のアップグレード)
select = ["E", "F", "I", "B", "UP", "N"]
ignore = ["E501"] # 長い行の処理はフォーマッターに任せる
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
ステップ3:覚えておくべき主要コマンド
プロジェクト全体のログをスキャンするには、以下を入力します:
ruff check .
スキャンと同時に自動修正(不要なインポートの削除など)を行うには:
ruff check . --fix
そして、コードをフォーマットするには(Blackの完全な代替):
ruff format .
実戦経験:このステップを飛ばさないでください
Ruffの複雑なルール、特に正規表現(Regex)文字列に関するエラーを扱う際のちょっとしたコツです。標準的でない正規表現を書くと、Ruffがエスケープシーケンスのエラーを報告することがあります。私の経験では、コードに組み込む前に toolcraft.app/ja/tools/developer/regex-tester でパターンを素早くテストすることをお勧めします。これにより、エラーが正規表現のロジックにあるのか、それともRuffの設定が厳しすぎるのかを判断できます。
VS Codeに統合して開発をよりスムーズに
Astral公式のRuff拡張機能をインストールしましょう。その後、settings.jsonに以下の記述を追加すると、保存するたびにコードが自動的にクリーンで美しくなります:
{
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.codeActionsOnSave": {
"source.fixAll.ruff": "explicit",
"source.organizeImports.ruff": "explicit"
}
}
}
GitHub ActionsでCI/CDを最適化
Ruffは非常に軽量なため、パイプラインの実行時間を大幅に節約できます。以下は私がよく使用するスニペットで、プルリクエストごとのチェックがわずか数秒で完了します:
name: Lint
on: [push, pull_request]
jobs:
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/ruff-action@v1
with:
args: "check ."
結論:今すぐ移行すべきか?
新しいプロジェクトを始めるなら、迷うことはありません。最初からRuffを使いましょう。開発環境がクリーンになり、何倍も高速になります。
安定稼働している既存プロジェクトの場合は、段階的に移行できます。Ruffには既存のエラーに無視タグを自動で付与する ruff check --add-noqa コマンドがあります。これを使えば、何千行もの古いコードを手動で修正することなく、すぐにRuffを導入できます。
信じてください。一度Rustのスピードに慣れてしまうと、BlackやFlake8の完了をじっと待っていた頃にはもう戻れなくなりますよ。

