はじめに
先日、Djangoオンラインミートアップ #4 にて、「Djangoの開発環境で工夫したこと」というタイトルで、リンターやフォーマッターに関する発表をしてきました。その際に、参加者の皆さんの多くが Ruff を採用しているとのことだったので、私も試しに使用してみることにしました。この記事はその備忘録も兼ねた内容です。
改めて、Ruff とは、Astral社が開発しているRust製のPythonのリンター兼フォーマッターです。下図(出典は Ruff の公式サイト)のように、他のリンター等と比較して、非常に実行速度が速いのが特徴です。
今回はこの Ruff を VSCode DevContainer の開発環境に導入する手順を備忘録も兼ねて記事にします。DevContainer を使用しない場合も手順はほとんど同様です。
1. Ruff のインストール
Ruff は同じくAstral社が開発している uv と使用されることが多いと思うので、今回はパッケージ管理ツールに uv を採用します。
まずは、次のコマンドで Ruff をインストールします。
uv add ruff
続いて、Ruff に関する設定を pyproject.toml
に記載します。最初の時点では、下記のように設定を記述しました。重要なのは、select の部分で、例えば "I" は isort の i であり、リンターやフォーマッターに採用する規約を選択することができます。
[tool.ruff]
line-length = 128
target-version = "py313"
[tool.ruff.lint]
# 不要なルールは随時ignoreに追加してください
ignore = []
select = [
"E",
"F",
"I",
"B",
]
[tool.ruff.format]
# 公式ドキュメントに準拠した
quote-style = "double"
indent-style = "space"
skip-magic-trailing-comma = false
line-ending = "auto"
docstring-code-format = false
docstring-code-line-length = "dynamic"
参考:「規約の選択」に関するページ
2. Ruff の基本的な使い方
ここまでの手順で、Ruff を開発環境にインストールして、設定を記述するところまでの準備ができました。続いては、実際に ruff をコマンドラインで実行してみます。
基本的な操作
基本的な操作は下記の通りです。
コードスタイルのチェック
ruff check . # 現在のディレクトリ内のPythonファイルをチェック
自動修正
ruff check . --fix # 自動的に修正可能な問題を修正
自動フォーマット
ruff format . # 自動的にフォーマット
初回導入時等に使う操作
開発途中で導入すると大量のエラーや警告が発生してしまいます。そのような際などに、検証したエラー内容をコマンドで指定することもできます。
ruff check . --select E501 # E501は特定のエラーのコード
参考:「ルール」に関するページ
3. ファイル保存時の自動実行
black や yapf などのフォーマッターを使用していた時は、ファイル保存時にフォーマットを自動実行した際の実行速度の遅さが気になって、結局は使わなくなってしまいました。一方で、Ruff は圧倒的に実行速度が向上しているので、気にならないのではないかと思い、エディターでファイル保存時に自動実行する設定を追加してみました。
普段の開発には VSCode DevContainer を使用しているので、devcontainer.json に下記のような設定を記載しました。charliermarsh.ruff
は VSCode における Ruff の拡張機能であり、editor.formatOnSave
editor.codeActionsOnSave
の部分で保存時のフォーマット自動実行の設定をしています。
{
...省略
"customizations": {
"vscode": {
"extensions": [
...省略
"charliermarsh.ruff"
],
"settings": {
"[python]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit"
},
"editor.defaultFormatter": "charliermarsh.ruff"
}
}
}
}
}
実際に試してみたところ、想定以上に高速な実行速度で自動フォーマットしてくれました。エディターでの自動実行に加えて、GitHub Actions を用いて、CI にリンターやフォーマッターを組み込んでいくことで、規約を開発サイクルに取り込んでいく想定です。
以上、VSCode DevContainer で Ruff を使う方法でした。