Ruff on Ubuntu — Rustベース超高速Pythonリンター/フォーマッターの導入

開発環境

「Pythonのリンターとフォーマッターを別々にインストールして設定するのが面倒…」――flake8blackisortを個別に管理している方には共感いただけると思います。

本記事では、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 でプロジェクト全体の設定を一元管理できる

目次

  1. Ruffとは何か
  2. 動作確認済み環境
  3. Ubuntu 24.04 へのインストール
  4. 基本的な使い方
  5. 実測:Ruff vs Flake8 速度比較
  6. pyproject.toml で設定する
  7. Ubuntu 22.04 / 24.04 バージョン比較
  8. よくあるエラーと解決策
  9. まとめ

Ruffとは何か

Ruff(ラフ)は、Rust製の超高速PythonリンターおよびフォーマッターでAstral社が開発しているオープンソースツールです。従来のPythonツールとの最大の違いは次の2点です。

  • flake8・pylint・isort・black など複数ツールの機能を1つに統合
  • Rustで実装されているため、Pythonベースのツールと比べて数十倍〜数百倍高速

2024年以降、FastAPI・pandas・SQLAlchemy・Airflowなど主要Pythonプロジェクトが相次いで採用しており、個人開発から大規模プロジェクトまで急速に普及しています。正直、これだけの速度差が出るとなると、既存ツールを使い続ける理由を探すほうが難しくなってきました。

公式ドキュメントは docs.astral.sh/ruff にあります。インストール方法・ルール一覧・設定リファレンスがすべてここにまとまっているので、ブックマークしておくと便利です。

Ruff 公式ドキュメントページ docs.astral.sh/ruff(Playwright実撮影)
Ruff 公式ドキュメントページ docs.astral.sh/ruff(Playwright実撮影)

動作確認済み環境

項目 内容
検証日 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をインストールします。




ubuntu@vps: ~
$ sudo apt update && sudo apt install -y python3 python3-pip python3-venv
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(仮想環境)を作ってその中にインストールするのが、最も安全で推奨される方法です。




ubuntu@vps: ~/myproject
$ python3 -m venv .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ツールを隔離環境にインストールして、グローバルに使えるようにしてくれます。




ubuntu@vps: ~
$ sudo apt install -y pipx
$ 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日実測)。

Ruff インストール実行ログ(Ubuntu 24.04 Docker実測)
Ruff インストール実行ログ(Ubuntu 24.04 Docker実測)

基本的な使い方

①lint チェック(ruff check)

Ruffの最も基本的な使い方は ruff check コマンドです。カレントディレクトリの全Pythonファイルをlintします。




ubuntu@vps: ~/myproject
$ ruff check .
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)




ubuntu@vps: ~/myproject
$ ruff check –fix .
Fixed 4 errors.
Found 1 remaining error (not auto-fixable).

③コードフォーマット(ruff format)

ruff formatblack 互換のフォーマッターです。インデントや空行、文字列クォートを自動で整えます。




ubuntu@vps: ~/myproject
$ ruff format –check . # 変更が必要なファイルを確認(実際には変更しない)
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 lint チェック実行例(Ubuntu 24.04 Docker実測)
Ruff lint チェック実行例(Ubuntu 24.04 Docker実測)

実測: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 時間(実時間)を記録しました。以下は実際の計測ログ(抜粋)です。




ubuntu@linuxlab: ~
$ for r in 1 2 3 4 5; do TIMEFORMAT=%R; time python3 -m ruff check /tmp/test_proj/ >/dev/null; done
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の優位が効きます。

Ruff vs Flake8 実行時間比較(50ファイル Ubuntu 24.04 Docker実測)
Ruff vs Flake8 実行時間比較(50ファイル Ubuntu 24.04 Docker実測)

pyproject.toml で設定する

Ruffの設定は pyproject.toml または専用の ruff.toml ファイルに書きます。Gitリポジトリのルートに置くとプロジェクト全体に適用されます。

pyproject.toml の基本設定例




ubuntu@vps: ~/myproject
$ cat 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 vs 24.04 Python/pip/Ruff バージョン比較(Docker実測)
Ubuntu 22.04 vs 24.04 Python/pip/Ruff バージョン比較(Docker実測)

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)




ubuntu@vps: ~
$ pip install ruff
error: externally-managed-environment
× This environment is externally managed
To install Python packages system-wide, try apt install

解決策:venvを使うか、--break-system-packages フラグを使います。




ubuntu@vps: ~
# 方法1(推奨): venv を使う
$ 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が通っていない可能性があります。




ubuntu@vps: ~
$ pipx ensurepath
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の選び方について詳しくは以下の記事も参考にしてください。

コメント

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