「Pythonのリンターとフォーマッターを別々にインストールして設定するのが面倒…」――flake8、black、isortを個別に管理している方には共感いただけると思います。
本記事では、Rustで書かれた超高速Pythonリンター・フォーマッター「Ruff」をUbuntu 24.04 LTSにインストールして動かした実際の結果をお届けします。Ubuntu 24.04のDockerコンテナで50ファイルのlintを各5回計測したところ、かかった時間の中央値はRuffが0.208秒、flake8が1.061秒でした。約5倍の速度差です。
インストール方法から基本的な使い方、pyproject.tomlでの設定まで、2026年6月13日に実際に動かした結果を交えて解説します。
この記事のポイント
- Ubuntu 24.04 への Ruff インストールは
pip install --break-system-packages ruff(venv推奨) - Ubuntu 24.04(Python 3.12.3)・22.04(Python 3.10.12)ともに
ruff 0.15.17が動作 - 50ファイル lint の実測(各5回・中央値):Ruff 0.208秒 vs Flake8 1.061秒(約5倍高速)
ruff checkでlint、ruff formatでblack互換のフォーマットが1ツールで完結pyproject.tomlまたはruff.tomlでプロジェクト全体の設定を一元管理できる
目次
- Ruffとは何か
- 動作確認済み環境
- Ubuntu 24.04 へのインストール
- 基本的な使い方
- 実測:Ruff vs Flake8 速度比較
- pyproject.toml で設定する
- Ubuntu 22.04 / 24.04 バージョン比較
- よくあるエラーと解決策
- まとめ
Ruffとは何か
Ruff(ラフ)は、Rust製の超高速PythonリンターおよびフォーマッターでAstral社が開発しているオープンソースツールです。従来のPythonツールとの最大の違いは次の2点です。
- flake8・pylint・isort・black など複数ツールの機能を1つに統合
- Rustで実装されているため、Pythonベースのツールと比べて数十倍〜数百倍高速
2024年以降、FastAPI・pandas・SQLAlchemy・Airflowなど主要Pythonプロジェクトが相次いで採用しており、個人開発から大規模プロジェクトまで急速に普及しています。正直、これだけの速度差が出るとなると、既存ツールを使い続ける理由を探すほうが難しくなってきました。
公式ドキュメントは docs.astral.sh/ruff にあります。インストール方法・ルール一覧・設定リファレンスがすべてここにまとまっているので、ブックマークしておくと便利です。

動作確認済み環境
| 項目 | 内容 |
|---|---|
| 検証日 | 2026年6月13日 |
| 実行環境 | ubuntu:24.04 Docker公式イメージ |
| Pythonバージョン | Python 3.12.3 |
| pipバージョン | 24.0+dfsg-1ubuntu1.3 |
| Ruffバージョン | 0.15.17 |
Ubuntu 24.04 へのインストール
手順1:Python と pip のインストール確認
Ubuntu 24.04 LTSにはPython 3.12.3がデフォルトで含まれています(要 apt install)。まずシステムを更新してpython3とpipをインストールします。
Setting up python3.12 (3.12.3-1ubuntu0.13) …
Setting up python3-pip (24.0+dfsg-1ubuntu1.3) …
$ python3 –version
Python 3.12.3
手順2:venv を使ったクリーンなインストール(推奨)
Ubuntu 24.04ではPEP 668 という仕様によって、システムのPython環境に直接 pip install することが制限されています。venv(仮想環境)を作ってその中にインストールするのが、最も安全で推奨される方法です。
$ source .venv/bin/activate
(.venv) $ pip install ruff
Collecting ruff
Downloading ruff-0.15.17-py3-none-manylinux_2_17_x86_64.whl (10.9 MB)
Successfully installed ruff-0.15.17
(.venv) $ ruff –version
ruff 0.15.17
手順3:pipx を使ったグローバルインストール(venv外でも使いたい場合)
複数プロジェクトで共通のruffを使いたい場合は、pipxを使う方法もあります。pipxはCLIツールを隔離環境にインストールして、グローバルに使えるようにしてくれます。
$ pipx install ruff
installed package ruff 0.15.17, installed using Python 3.12.3
These apps are now globally available: ruff
$ ruff –version
ruff 0.15.17
以下は、Dockerコンテナ上で実際に pip install ruff を実行したときのログです(ubuntu:24.04 公式イメージ・2026年6月13日実測)。

基本的な使い方
①lint チェック(ruff check)
Ruffの最も基本的な使い方は ruff check コマンドです。カレントディレクトリの全Pythonファイルをlintします。
E401 [*] Multiple imports on one line
–> src/bad_code.py:1:1
1 | import os, sys
F401 [*] `os` imported but unused
F841 Local variable `x` is assigned to but never used
Found 5 errors.
[*] 4 fixable with the `–fix` option
エラーコードの先頭文字がルール系統を示します。E はPEP 8スタイル、F はpyflakes由来の論理エラーです。[*] マーク付きのエラーは --fix で自動修正できます。
②自動修正(ruff check –fix)
Fixed 4 errors.
Found 1 remaining error (not auto-fixable).
③コードフォーマット(ruff format)
ruff format は black 互換のフォーマッターです。インデントや空行、文字列クォートを自動で整えます。
Would reformat: src/bad_code.py
1 file would be reformatted
$ ruff format . # 実際にフォーマットを適用
1 file reformatted
Dockerコンテナ内で実際に問題のあるコードにruffを実行した結果です(ubuntu:24.04・2026年6月13日実測)。

実測:Ruff vs Flake8 速度比較
「本当に速いの?」と思う方のために、Ubuntu 24.04のDockerコンテナ上で50ファイルのPythonコードをlintする速度を実測しました。
計測条件
| 項目 | 内容 |
|---|---|
| 計測環境 | ubuntu:24.04 Dockerコンテナ |
| Pythonバージョン | 3.12.3 |
| テストファイル | 50ファイル × 各9行(合計450行) |
| Ruffバージョン | 0.15.17 |
| Flake8バージョン | 7.3.0 |
| 計測回数 | 各5回(warm-up 1回を除外し中央値で比較) |
| 計測コマンド | TIMEFORMAT=%R; time python3 -m ruff check /tmp/test_proj/ |
実測結果
各ツールを5回ずつ実行し、real 時間(実時間)を記録しました。以下は実際の計測ログ(抜粋)です。
0.164
0.238
0.183
0.208
0.249
# → 中央値 0.208 秒(ruff check は 200 件のエラーを検出)
$ for r in 1 2 3 4 5; do TIMEFORMAT=%R; time python3 -m flake8 /tmp/test_proj/ >/dev/null; done
0.800
0.594
1.151
1.127
1.061
# → 中央値 1.061 秒
結果:Ruff 中央値 0.208秒 vs Flake8 中央値 1.061秒 — 約5.1倍の速度差です。今回は50ファイル(450行)という小規模なコードでこの差でしたが、Ruffはファイル数に対してほぼ線形にしかコストが増えないため、コードベースが数千ファイルになるほど差は体感として大きく開いていきます。Pythonインタプリタの起動コストが乗らないぶん、CI/CDのように何度も走らせる場面ほどRuffの優位が効きます。

pyproject.toml で設定する
Ruffの設定は pyproject.toml または専用の ruff.toml ファイルに書きます。Gitリポジトリのルートに置くとプロジェクト全体に適用されます。
pyproject.toml の基本設定例
[tool.ruff]
line-length = 88 # black のデフォルトに合わせる
target-version = “py312” # Python 3.12 対象
[tool.ruff.lint]
select = [“E”, “F”, “I”] # pycodestyle + pyflakes + isort
ignore = [“E501”] # 行長エラーは無視
[tool.ruff.format]
quote-style = “double” # ダブルクォート統一
indent-style = “space” # スペースインデント
設定ファイルを置いてから再度 ruff check . を実行すると、設定が自動で読み込まれます。
注意:lintルールとformatは別セクション
Ruff 0.2以降、lintの設定は [tool.ruff.lint]、フォーマットは [tool.ruff.format] に分離されました。古いチュートリアルでは [tool.ruff] に select を書いているものもありますが、現在のバージョンでは非推奨です。
よく使うルールセットの例
| ルール | 相当するツール | 内容 |
|---|---|---|
E |
pycodestyle | PEP 8スタイルチェック(インデント・スペース等) |
F |
pyflakes | 未使用インポート・未定義変数等の論理チェック |
I |
isort | import文の並び順チェック・自動整列 |
N |
pep8-naming | 命名規則チェック(関数名・クラス名等) |
B |
flake8-bugbear | バグに繋がりやすいパターンの検出 |
UP |
pyupgrade | 古い構文を新しいPython構文に自動アップグレード |
Ubuntu 22.04 / 24.04 バージョン比較
Ruffはどちらのバージョンでも同じバージョンがインストールできます。ただし、インストールコマンドに違いがあります。

Ubuntu 22.04ではPython 3.10がデフォルトで、従来通り pip install ruff が使えます。Ubuntu 24.04ではPython 3.12になり、--break-system-packages フラグが必要になります(ただしvenv内では不要)。
結論として、どちらのバージョンでもvenv内でのインストールが最も安全です。
よくあるエラーと解決策
error: externally-managed-environment(Ubuntu 24.04)
error: externally-managed-environment
× This environment is externally managed
To install Python packages system-wide, try apt install
解決策:venvを使うか、--break-system-packages フラグを使います。
$ python3 -m venv .venv && source .venv/bin/activate
(.venv) $ pip install ruff
# 方法2: フラグで強制(非推奨)
$ pip install –break-system-packages ruff
ruff: command not found
pipxでインストールした場合、PATHが通っていない可能性があります。
Success! Added /root/.local/bin to the PATH environment variable.
$ source ~/.bashrc
$ ruff –version
ruff 0.15.17
No Python files found in given path
検査対象ディレクトリの指定が間違っているか、.pyファイルが存在しない場合に出ます。ruff check src/ のようにPythonファイルのあるディレクトリを明示してください。
まとめ
RuffはUbuntu 24.04 + Python 3.12.3の環境に問題なくインストールでき、50ファイルのlintを各5回計測した中央値でFlake8の約5倍の速度を確認しました。ファイル数が増えるほどこの差はさらに広がります。
- インストールは
venv内でのpip install ruffが最も安全で推奨 - Ubuntu 24.04 ではシステム環境への直接インストールに
--break-system-packagesが必要 ruff checkでlint、ruff formatでblack互換フォーマットが1ツールで完結pyproject.tomlの[tool.ruff.lint]セクションでルールを選択・除外できる- 大規模プロジェクトや CI/CD パイプラインでの恩恵が特に大きい
Ruffを本番VPSで使いたい方は、まずローカルのvenv環境で試してから、VPS上にも同様に導入することをおすすめします。VPSの選び方について詳しくは以下の記事も参考にしてください。


コメント