1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python次世代Linter&フォーマッター「Ruff」徹底解説

Posted at

はじめに

Python開発の現場で、コードの品質やスタイルを保つためのLinterやFormatterは欠かせません。2022年以降、爆発的なスピードと多機能性で注目を集めているのがRuffです。本記事ではRuffの概要から実践的な使い方、カスタマイズ方法まで、10章にわたって詳しく解説します。

第1章:Ruffとは何か?

RuffはRustで実装された、超高速なPython用Linter&Formatterです。従来のFlake8やBlack、isortなど複数ツールの機能を統合し、1つのコマンドで静的解析とフォーマットを実現します。大規模なプロジェクトでもストレスなく動作し、CI/CDの時間短縮にも効果的です。

第2章:Ruffのインストール

Ruffはpipで簡単にインストールできます。Python 3.7以降に対応しており、導入のハードルが低いのも魅力です。

pip install ruff

インストール後、バージョン確認もできます。

ruff --version

第3章:最初のRuff実行

Ruffの基本コマンドはruff checkです。プロジェクトディレクトリや特定ファイルを指定して実行できます。

ruff check .
ruff check path/to/file.py

エラーや警告が一覧表示され、修正すべき箇所が明確になります。

第4章:不要なインポートの検出と自動修正

Ruffは未使用のインポートを即座に検出し、自動で修正も可能です。

修正前(sample1.py):

import os
import sys

def greet(name):
    print(f"Hello, {name}")

コマンド実行例:

ruff check sample1.py
ruff check sample1.py --fix

修正後:

def greet(name):
    print(f"Hello, {name}")

未使用インポートが自動で削除されます。

第5章:コードフォーマットの自動化

RuffはFormatterとしても優秀です。不要なスペースやインデントの乱れを自動で修正します。

修正前(sample2.py):

def greet ( name ):
    print( f"Hello, { name }" )

コマンド実行例:

ruff format sample2.py

修正後:

def greet(name):
    print(f"Hello, {name}")

Blackライクな整形が一瞬で完了します。

第6章:設定ファイルでカスタマイズ

Ruffはpyproject.toml.ruff.tomlで詳細な設定が可能です。無視ディレクトリや行長、ターゲットPythonバージョンなど柔軟に制御できます。

例:pyproject.toml

[tool.ruff]
exclude = [".git", ".venv", "build", "dist"]
line-length = 88
indent-width = 4
target-version = "py39"

[tool.ruff.lint]
select = ["E4", "E7", "E9", "F"]
ignore = []
fixable = ["ALL"]
unfixable = []

[tool.ruff.format]
quote-style = "double"
indent-style = "space"

設定ファイルを置くだけで、プロジェクト全体にルールが適用されます。

第7章:ルールの追加・除外と柔軟な運用

プロジェクトごとにルールの追加や除外も簡単です。たとえば、行長制限を厳しくしたい場合や、特定ファイルだけルールを無効化したい場合も柔軟に対応できます。

例:行長制限を79文字に変更

[tool.ruff]
line-length = 79

[tool.ruff.lint]
extend-select = ["E501"]

例:特定ファイルでルール除外

[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["E402"]
"**/tests/*" = ["E501"]

第8章:CI/CDやエディタ連携

RuffはCI/CDパイプラインやVSCodeなどエディタとの連携も充実しています。.github/workflowspre-commit設定に組み込むことで、開発フロー全体に品質管理を徹底できます。

例:pre-commit用設定(.pre-commit-config.yaml)

- repo: https://github.com/astral-sh/ruff-pre-commit
  rev: v0.6.4
  hooks:
    - id: ruff
      args: [--fix]
    - id: ruff-format

開発者全員が同じルールでコードを書けるため、チーム開発に最適です。

第9章:Ruffのパフォーマンスと大規模プロジェクトでのメリット

RuffはRust製のため、従来のPython製ツールに比べて10~100倍以上の速度を誇ります。数千ファイル規模のリポジトリでも一瞬で解析・整形が完了し、CI/CDのボトルネックを解消します。

ベンチマーク例:

ruff check .
ruff format .

数秒で全ファイルがチェック&整形されるため、開発効率が劇的に向上します。

第10章:Ruffを最大限に活用するTips

  • ルールのカスタマイズ:プロジェクトごとに最適なルールセットを設定し、無駄な警告を減らす
  • 自動修正の活用--fixオプションで手動修正の手間を削減
  • エディタ連携:VSCode拡張やpre-commitで日常の開発に組み込む
  • CI/CD統合:品質チェックを自動化し、レビューコスト削減

Ruffの活用例(sample3.py):

import math

def area_of_circle(radius):
    return math.pi * radius ** 2

未使用インポートやスタイルを即座に検出・修正できます。

RuffはPython開発における新しい標準となるべきツールです。インストールも簡単、設定も柔軟、そして圧倒的な速度。LinterやFormatter選びに迷っている方は、ぜひ一度Ruffを導入してみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?