VSCodeでRuffを設定する方法

採用はこちら

VSCodeでPythonを開発する場合、Ruffを導入するとLint、コードフォーマット、import整理などをまとめて行えるようになります。

RuffはRustで実装された高速なPython向けツールで、Flake8、isort、pyupgradeなど複数のツールが担っていた機能を1つにまとめやすいのが特徴です。

VSCodeでは公式のRuff拡張機能を利用することで、コードを書きながらリアルタイムに問題を確認したり、保存時に自動修正やフォーマットを実行したりできます。

ここでは、VSCodeでRuffを設定する方法を詳しく解説します。

目次

Ruffとは

Python向けのLinter・Formatter

Ruffは、PythonコードをチェックするLinterと、コードの書式を整えるFormatterの両方の機能を備えたツールです。

代表的には、次のような処理を行えます。

  • 文法やコーディング規約のチェック
  • 未使用importの検出
  • import文の並び替え
  • 古いPython構文の改善
  • 修正可能な問題の自動修正
  • コードフォーマット

これまでFlake8、isort、pyupgrade、Blackなどを組み合わせていた環境でも、用途によってはRuffへまとめることができます。

ただし、RuffとBlackを必ず一本化しなければならないわけではありません。

RuffをLint専用として使用し、FormatterにはBlackを使う構成も可能です。

VSCodeにRuff拡張機能をインストールする

Extensions画面を開く

まず、VSCodeで拡張機能画面を開きます。

WindowsやLinuxでは次のショートカットを使用できます。

Ctrl + Shift + X

macOSでは次のショートカットです。

Command + Shift + X

検索欄に次のように入力します。

Ruff

表示されたRuff拡張機能を選択してインストールします。

RuffのVSCode拡張機能はAstral Softwareによって提供されています。

Ruff本体は別途インストールする必要があるのか

VSCodeだけで使うなら必須ではない

VSCodeのRuff拡張機能にはRuff実行ファイルが同梱されています。

そのため、VSCode上だけでRuffを使うのであれば、必ずしも次のようなコマンドでRuffをインストールする必要はありません。

pip install ruff

Ruff拡張機能は利用可能なPython環境などからRuffを探し、必要に応じてPATH上や拡張機能に同梱されたRuffを利用できます。

CLIやCI/CDでも使うならインストールすると便利

一方で、ターミナルからRuffを実行したり、GitHub Actionsやpre-commitで使ったりする場合は、プロジェクト環境にRuffをインストールしておくと管理しやすくなります。

例えば、次のようにインストールできます。

pip install ruff

インストール後は次のコマンドで確認できます。

ruff --version

仮想環境にRuffをインストールする

Windowsの場合

プロジェクトごとにRuffを管理する場合は、仮想環境へインストールする方法が一般的です。

まず仮想環境を作成します。

python -m venv .venv

次に有効化します。

.venv\Scripts\activate

そのうえでRuffをインストールします。

pip install ruff

macOS・Linuxの場合

macOSやLinuxでは、例えば次のように設定できます。

python3 -m venv .venv
source .venv/bin/activate
pip install ruff

VSCodeでプロジェクトの仮想環境を使用する場合は、コマンドパレットから次を実行します。

Python: Select Interpreter

目的の.venvなどを選択しておくと、プロジェクト単位でPython環境を管理しやすくなります。

Ruffの設定ファイルを作成する

pyproject.tomlを利用する

Ruffの設定は、主に次のファイルに記述できます。

pyproject.toml
ruff.toml
.ruff.toml

Pythonプロジェクトでは、他のPython関連ツールの設定もまとめられるpyproject.tomlを使う方法が便利です。

例えば、次のような構成にできます。

project/
├─ .vscode/
│  └─ settings.json
├─ src/
│  └─ main.py
└─ pyproject.toml

VSCode固有の動作は.vscode/settings.jsonに記述し、Ruff自体のルールはpyproject.tomlにまとめると管理しやすくなります。

参考サイト

Pythonの Linter Formatter は、もうRuff一択。最短5分でプロジェクトに導入

pyproject.tomlの基本設定

基本的な設定例

Ruffの設定は、例えば次のように記述できます。

[project]
requires-python = ">=3.11"

[tool.ruff]

line-length = 88

[tool.ruff.lint]

select = [“E”, “F”, “I”, “UP”]

[tool.ruff.format]

quote-style = “double” indent-style = “space”

Pythonの対象バージョンを設定する

requires-pythonを使う

pyproject.tomlを使っている場合は、プロジェクト全体のPythonバージョンとして次のように指定できます。

[project]
requires-python = ">=3.11"

Ruffはこの設定から対象Pythonバージョンを推測できます。

Ruffだけでなく、Pythonパッケージング全体で共有できる設定なのがメリットです。

target-versionを明示する

Ruff側で明示したい場合は、次のように設定できます。

[tool.ruff]
target-version = "py311"

Python 3.12なら次のようにします。

[tool.ruff]
target-version = "py312"

requires-pythonとtarget-versionの両方を設定した場合は、Ruff側のtarget-versionが優先されます。

line-lengthを設定する

1行の長さの目安を設定する

次の設定では、Ruff Formatterが1行の長さを判断する際の基準を88文字にします。

[tool.ruff]
line-length = 88

88文字はBlackでもよく使われる値です。

プロジェクトによっては次のように変更しても構いません。

line-length = 100

または、

line-length = 120

ただし、line-length = 88を設定したからといって、すべての行が必ず88文字以内になるわけではありません。

Ruff Formatterが改行を判断するための目安として使われます。

RuffのLintルールを設定する

selectで有効なルールを指定する

例えば次のように設定できます。

[tool.ruff.lint]
select = ["E", "F", "I", "UP"]

それぞれのおおまかな意味は次のとおりです。

E   pycodestyle系のエラー
F   Pyflakes
I   isort系のimportチェック
UP  pyupgrade

例えばFを有効にしている場合、未使用importなどを検出できます。

extend-selectを使うこともできる

Ruffのデフォルトルールへ追加する形でルールを増やしたい場合は、extend-selectも利用できます。

例えば次のように設定します。

[tool.ruff.lint]
extend-select = ["I", "UP"]

selectは有効にするルールセットを指定する設定です。

既存の設定に追加したい場合はextend-selectを使い分けるとよいでしょう。

RuffをVSCodeのFormatterに設定する

settings.jsonを開く

VSCodeのコマンドパレットを開きます。

WindowsやLinuxでは次のショートカットです。

Ctrl + Shift + P

macOSでは次のようになります。

Command + Shift + P

その後、次のいずれかを実行します。

Preferences: Open User Settings (JSON)

または、プロジェクト単位で設定したい場合はワークスペース設定を開きます。

保存時にRuff Formatterを実行する

formatOnSaveを有効にする

Pythonファイルの保存時にRuffでフォーマットする場合は、次のように設定できます。

{
    "[python]": {
        "editor.defaultFormatter": "charliermarsh.ruff",
        "editor.formatOnSave": true
    }
}

これにより、Pythonファイルを保存するとRuff Formatterが実行されます。

保存時にLintエラーを自動修正する

source.fixAll.ruffを設定する

FormatterとLintの自動修正は別の機能です。

そのため、editor.formatOnSaveだけではLintエラーがすべて自動修正されるわけではありません。

保存時にRuffによる修正も実行したい場合は、次のように設定します。

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

Ruffが安全に自動修正できる問題について、保存時に修正できます。

保存時にimportを整理する

source.organizeImports.ruffを設定する

import文もRuffに整理させたい場合は、次の設定を追加します。

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

これにより、保存時にRuffによる自動修正、import整理、フォーマットを利用できます。

ただし、それぞれの処理が必ず特定の順番で実行されると考えない方が安全です。

おすすめのsettings.json

Python向けにRuffをまとめて設定する

実務では、次のような設定が扱いやすいです。

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

この設定では、Pythonファイルに対してのみRuffを使えます。

他のプログラミング言語のFormatterやCode Actionへ影響しにくい点もメリットです。

Ruffをコマンドラインから実行する

コードをチェックする

プロジェクト全体をLintする場合は、次のコマンドを実行します。

ruff check .

指定したファイルだけ確認する場合は次のようにします。

ruff check main.py

自動修正する

Ruffが修正できる問題を自動修正する場合は次のコマンドです。

ruff check --fix .

特定のファイルだけ修正する場合は次のようにします。

ruff check --fix main.py

フォーマットする

Ruff Formatterでコードを整形する場合は次のコマンドを使用します。

ruff format .

特定のファイルだけの場合は次のようになります。

ruff format main.py

つまり、基本的には次のように覚えると分かりやすいです。

ruff check .
→ Lint

ruff check --fix .
→ Lint+自動修正

ruff format .
→ コードフォーマット

VSCode上でRuffのエラーを確認する

Pythonコードに問題があると警告が表示される

Ruff拡張機能が動作している場合、Pythonコードに問題があるとVSCode上に波線や警告が表示されます。

例えば次のコードでは、設定によってはosが未使用importとして検出されます。

import os

print("Hello")

Quick Fixを利用する場合は、問題がある場所で次のショートカットを使用できます。

WindowsやLinuxでは、

Ctrl + .

macOSでは、

Command + .

です。

Ruffが修正できる問題であれば、ここから修正できます。

RuffとPylanceは併用できる

役割が異なるため併用しやすい

Ruffを導入しても、Pylanceを削除する必要はありません。

RuffとPylanceでは担当する役割が異なります。

例えば、次のように分けられます。

Ruff
├─ Lint
├─ コードフォーマット
├─ import整理
└─ コード自動修正

Pylance
├─ 型解析
├─ コード補完
├─ 定義ジャンプ
└─ Hover情報

そのため、VSCodeのPython開発環境では、

Python
Pylance
Ruff

という構成にしても問題ありません。

Ruff FormatterとBlackはどちらを使うべきか

Ruff Formatterへ統一することもできる

すでにBlackを使用している場合でも、Ruff Formatterへ移行できます。

その場合は、Python用のデフォルトFormatterをRuffに設定します。

{
    "[python]": {
        "editor.defaultFormatter": "charliermarsh.ruff"
    }
}

RuffとBlackの両方を同時に保存時Formatterとして動かす必要は通常ありません。

RuffはLintだけにする方法もある

一方で、次のような役割分担も可能です。

Ruff
→ Lint・自動修正

Black
→ Formatter

既存プロジェクトでBlackを利用している場合は、無理にRuff Formatterへ移行する必要はありません。

新規プロジェクトでツール数を減らしたい場合は、Ruffへまとめると構成をシンプルにできます。

Ruffとisortの関係

Ruffでimport整理を行える

RuffではIルールを利用することで、isort系のimportチェックや整理を行えます。

例えば次のように設定します。

[tool.ruff.lint]
select = ["E", "F", "I", "UP"]

さらにVSCode側で、

"source.organizeImports.ruff": "explicit"

を設定すれば、保存時にimport整理も利用できます。

そのため、新規プロジェクトではisortを別途導入せず、Ruffへまとめる構成も可能です。

ruff-lspは現在どうなっているのか

現在はruff serverが標準

以前のRuffでは、Pythonで実装されたruff-lspがLanguage Serverとして利用されていました。

現在のruff-lspは非推奨です。

Ruff本体にはRust製のLanguage Serverが含まれており、次のコマンドで起動できます。

ruff server

現在のRuff VSCode拡張機能では、条件を満たしていればこのネイティブなLanguage Serverが自動的に使用されます。

そのため、新しくRuffを設定する場合はruff-lspを前提に考える必要はありません。

unsafe fixには注意する

デフォルトでは安全な修正が中心

Ruffでは、自動修正を大きく安全な修正とunsafeな修正に分けています。

通常のFix Allでは、安全と判断された修正が中心に適用されます。

unsafe fixも許可する場合は、例えば次のような設定が可能です。

[tool.ruff.lint]
unsafe-fixes = true

ただし、コードの意味が変わる可能性がある修正も含まれるため、通常はデフォルト設定のまま使う方が安全です。

settings.jsonとpyproject.tomlは使い分ける

VSCode固有の設定はsettings.jsonへ書く

VSCode上での保存時処理などは.vscode/settings.jsonに記述すると分かりやすくなります。

例えば、

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

のような設定です。

Ruff自体のルールはpyproject.tomlへ書く

一方で、RuffそのもののLintルールやフォーマット設定はpyproject.tomlへまとめる方法がおすすめです。

例えば次のようにします。

[project]
requires-python = ">=3.11"

[tool.ruff]

line-length = 88

[tool.ruff.lint]

select = [“E”, “F”, “I”, “UP”]

[tool.ruff.format]

quote-style = “double” indent-style = “space”

このように分けることで、

VSCode上の動作
→ .vscode/settings.json

Ruffのコード規約
→ pyproject.toml

という役割分担になります。

CLIやCI/CDでも同じRuff設定を利用しやすくなるのがメリットです。

Ruffが動かない場合の確認ポイント

Ruff拡張機能が有効になっているか確認する

VSCodeのExtensions画面からRuffを開き、拡張機能が有効になっているか確認します。

無効になっている場合は有効化します。

Pythonファイルとして認識されているか確認する

VSCode右下に表示されるLanguage Modeが次のようになっているか確認します。

Python

Pythonとして認識されていない場合、Ruffの機能が正しく動作しないことがあります。

CLI版Ruffのバージョンを確認する

Python環境へRuffをインストールしている場合は、次のコマンドを実行します。

ruff --version

バージョン情報が表示されれば、CLI版Ruffは利用できます。

Pythonインタープリターを確認する

仮想環境内にRuffをインストールしている場合は、VSCodeがそのPython環境を認識しているか確認します。

コマンドパレットから次を実行します。

Python: Select Interpreter

使用している.venvなどを選択します。

ただし、仮想環境内にRuffが見つからない場合でも、Ruff拡張機能はPATH上や拡張機能同梱版へフォールバックできるため、Pythonインタープリターが異なるだけで必ずRuffが動かなくなるわけではありません。

他のFormatterと競合していないか確認する

Black Formatterなどをインストールしている場合は、Python用のデフォルトFormatterを確認します。

Ruff Formatterを使用するなら、次のように設定します。

{
    "[python]": {
        "editor.defaultFormatter": "charliermarsh.ruff"
    }
}

VSCodeでRuffを使うおすすめ構成

新規PythonプロジェクトならRuff+Pylanceがシンプル

新しくPython開発環境を作るのであれば、次のような構成はシンプルで管理しやすいです。

VSCode
├─ Python
├─ Pylance
└─ Ruff

Ruffには、

Lint
Formatter
import整理
自動修正

を担当させます。

Pylanceには、

型解析
コード補完
定義ジャンプ
Hover情報

などを担当させます。

さらに、.vscode/settings.jsonにはVSCode固有の保存設定を書き、pyproject.tomlにはRuffのルールを書いておくと、プロジェクト全体を整理しやすくなります。

まとめ

VSCodeでRuffを設定する場合は、まずRuff拡張機能をインストールし、必要に応じてプロジェクト環境にもRuffを導入します。

VSCode側では、RuffをデフォルトFormatterに設定し、保存時のLint修正やimport整理を有効にすると便利です。

一方、Lintルールや対象Pythonバージョン、行の長さなどはpyproject.tomlにまとめると、VSCodeだけでなくCLIやCI/CDでも同じ設定を共有できます。

新規プロジェクトであれば、RuffにLint、Formatter、import整理をまとめ、Pylanceに型解析やコード補完を担当させる構成が分かりやすいでしょう。

以上、VSCodeでRuffを設定する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次