【初心者向け】Pythonリンター&フォーマッタ、Ruffの始め方|インストールからVSCode設定まで

Pythonでコードを書いていると、「このインデントおかしくない?」 「importの順番これでいいんだっけ?」みたいな細かいところが気になります。 最近は、エディタの機能でほぼなんとかなるのですが、たまにコピー&ペーストをVimなどに行うとズレてひどい目に合うこともあります。

そんなときに活躍するのがリンター(コードのチェックツール)フォーマッター(コードの整形ツール)です。 従来はflake8でチェックしてblackで整形してisortでimportを並べ替えて……と、複数のツールを組み合わせる必要があり正直ちょっと面倒でした🥲

そこで、Ruffという、これらの機能を1つのツールに統合した、Rust製の高速リンター&フォーマッターとなります。しかも圧倒的に速い。従来のツールと比べて10〜100倍速いと言われています。

この記事では、Ruffをグローバルインストールして、どのプロジェクトでもすぐに使えるようにしたいと思います。

Ruffとは

RuffAstral社が開発しているPython用のリンター&フォーマッターです。同社はuvというパッケージマネージャーも開発しており、Python界隈では注目度の高い企業です。

astral.sh

astral.sh

Ruffの主な特徴をまとめると以下のようになります。

  • Rust製で超高速(従来ツールの10〜100倍速)
  • リンターとフォーマッターを1つのツールで提供
  • flake8isortpyupgradeなど多くのルールに対応
  • 設定はpyproject.tomlで一元管理可能

先程は速度10倍から100倍と言いましたが、実際に使ってみると体感明らかに速いことがわかるでしょう。大きなプロジェクトでも一瞬で終わるので、ストレスがありません。

Ruffのインストール方法

Ruffはプロジェクトごとにインストールすることもできますが、リンターやフォーマッターは複数のプロジェクトで横断的に使うことが多いので、グローバルインストールがおすすめです。

uvを使う場合(おすすめ)

最近は、uvを使っている方も多いと思います。uvにはツールをグローバルにインストールする機能があるので、これを使うのが手軽ではないでしょうか。

$ uv tool install ruff

これだけでruffコマンドがPATHに追加され、どこからでも使えるようになります。

その他の方法

uvを使っていない場合は、以下の方法でもインストールできます。

# pipxを使う場合
$ pipx install ruff

# スタンドアロンインストーラー(macOS/Linux)
$ curl -LsSf https://astral.sh/ruff/install.sh | sh

基本的な使い方

インストールが完了すれば、すぐに使い始められます。

# リンター(コードのチェック)
$ ruff check .

# フォーマッター(コードの整形)
$ ruff format .

# リンターで自動修正可能なものを修正
$ ruff check --fix .

ruff check .コマンドを実行すると、カレントディレクトリ以下のPythonファイルをチェックして、問題があれば表示してくれます。ruff format .コマンドはコードを自動的に整形してくれます。

問題のあるソースコードをチェックするといかのようなメッセージが表示されます。

コマンドが見つからない場合

uv tool installでインストールしたのにコマンドが見つからない場合は、PATHが通っていない可能性があります。シェルの設定ファイル(.bashrc.zshrc)に以下を追加してください。

export PATH="$HOME/.local/bin:$PATH"

追加したら、ターミナルを再起動するかsource ~/.bashrcsource ~/.zshrcなどで設定を反映させてください。

(おまけ)uvのツール管理コマンド

uvでインストールを行った場合は、以下のコマンドで管理できます。

# インストール済みツール一覧
$ uv tool list

# アップグレード
$ uv tool upgrade ruff

# アンインストール
$ uv tool uninstall ruff

一時的に試したい場合

「まだインストールするか決めてないけど、ちょっと試してみたい」という場合はuvxコマンドが便利です。

$ uvx ruff check .

uvxは一時的な環境でツールを実行してくれるので、試しに使ってみたいときに重宝します。

pyproject.tomlでの設定

プロジェクトのルートにpyproject.tomlを置くことで、Ruffの挙動をカスタマイズが可能です(設定がない場合はデフォルト値が使われます)。

[tool.ruff]
line-length = 120

[tool.ruff.lint]
select = [
    "E",  # pycodestyle error
    "F",  # Pyflakes
    "I",  # isort
    "W",  # pycodestyle warning
]

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

上記の設定の概要は以下の通り

セクション 設定項目 説明
[tool.ruff] line-length 1行の最大文字数。デフォルトは88文字ですが、120文字程度に広げておくと改行が減って読みやすくなります
[tool.ruff.lint] select 有効にするリンタールールを指定します。Eはpycodestyleのエラー、FはPyflakes、Iはisort(import順)、Wはpycodestyleの警告に対応しています
[tool.ruff.format] quote-style 文字列のクォートスタイルを指定します。"double"でダブルクォート、"single"でシングルクォートに統一されます

selectで指定できるルールは他にも多数あります。たとえば"B"(flake8-bugbear)や"UP"(pyupgrade)などを追加すると、より厳密なチェックが可能です。 また、line-lengthはデフォルトだと88文字ですが、個人的には120文字くらいにしておくといい感じでしょうか😊

VisualStudio Codeとの連携

VSCodeを使っている場合は、Ruff公式の拡張機能をインストールすると、エディタ上でリアルタイムにチェックに動作可能です。さらに保存時に自動フォーマットも可能です。

VSCode拡張機能で検索を行うと以下が見つかります。

拡張機能をインストールしたら、.vscode/settings.jsonに以下の設定を追加します。

{
    "[python]": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "charliermarsh.ruff",
        "editor.codeActionsOnSave": {
            "source.fixAll": "explicit",
            "source.organizeImports": "explicit"
        }
    }
}```

この設定を入れておけば、ファイルを保存するたびに自動でフォーマットされるのでコーディングに集中できます。

# おわりに

今回は**Ruff**をグローバルインストール方法を書いてみました。**uv tool install ruff**を実行するだけで、どのプロジェクトでも**ruff**コマンドが使えるようになります。
設定ファイルを使わなくても十分使えますし、必要に応じて`pyproject.toml`でカスタマイズもできます。

個人的には、**Ruff**の導入で一番嬉しいのは「速さ」ですね。従来のツールだとチェックに数秒かかることもありましたが、**Ruff**なら大規模なプロジェクトでも一瞬です🤩