まくろぐ
更新: / 作成:

Ruff とは

Ruff は Python 用の Lint & Format ツールで、Rust で記述されているため非常に高速に動作します。 Ruff だけで Lint やフォーマットをまとめてかけることができる ため、次のようなツールを個別にインストールする必要がなくなります。

  • Flake8(Linter)
  • Black(フォーマッター)
  • isort(import 文のソート)

これまで、Python コードに Lint や Format をかける場合は、複数のツールを組み合わせて使うのが主流で、効率的な処理が行われているとは言いにくい状況でした。 例えば、広く使われている Lint ツールに Flake8 がありますが、これは pyflakespycodestyle の組み合わせであり、内部で何度もファイルの読み込みやパースが行われるため処理に時間がかかっていました。 Ruff は様々な処理が一度で済むように実装されています。 同様に広く使われているフォーマットツールとして Black がありますが、よくよく考えると、Black でフォーマット済みのコードを別の Lint ツール (Flake8) でスタイルチェックするのは無駄です。 Ruff で Lint とフォーマットの処理を一括で行うのは理にかなっています。

ちなみに、Ruff の開発元である Astral 社は、Python 用のパッケージマネージャ(プロジェクト管理ツール)である uv も公開しています。 こちらも Rust で実装されており、高速かつ使いやすいのでオススメです。

VS Code に Ruff 拡張をインストールする

Visual Studio Code で Ruff を使うには、下記の公式拡張をインストールするだけです。 ruff コマンドを別途インストールする必要はありません。

Ruff 拡張のインストールが完了すると、Python コードの編集時に自動的に Lint チェックがかかるようになります。 Python コードのフォーマットをかけるには、コマンドパレット (Shift + Cmd/Ctrl + P) から Ruff: Format document を選択します。

ファイル保存時に自動でフォーマットをかけるようにするには、VS Code の設定ファイルに次のように記述しておきます(参考: VS Code の設定ファイルの場所 (settings.json))。

settings.json(抜粋)
"[python]": {
  // フォーマッターとして Ruff を使う
  "editor.defaultFormatter": "charliermarsh.ruff",
  // ファイル保存時に自動でフォーマットをかける
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    // ファイル保存時に Lint violations を自動で修正する
    "source.fixAll.ruff": "explicit",
    // ファイル保存時に自動でインポートを整理する
    "source.organizeImports.ruff": "explicit"
  }
},

(おまけ)型チェッカーの Mypy は別途インストールする

Ruff は Lint チェックとフォーマットを行ってくれますが、型チェックを行うためのツール (type checker) は別途インストールする 必要があります。 これは、Ruff の公式サイトの FAQ でも以下のように明記されています。

  • 参考: How does Ruff compare to Mypy, or Pyright, or Pyre?

    Ruff is a linter, not a type checker. … It’s recommended that you use Ruff in conjunction with a type checker, like Mypy, Pyright, or Pyre, with Ruff providing faster feedback on lint violations and the type checker providing more detailed feedback on type errors.

Microsoft が VS Code 用の Mypy 拡張 (ms-python.mypy-type-checker) を公開しているのでこれをインストールしておけばよいです。 ポチッとインストールするだけで、VS Code 上で Python コードの型チェックが有効になります。

関連記事

まくろぐ
サイトマップまくへのメッセージ