7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

先日、Djangoオンラインミートアップ #4 にて、「Djangoの開発環境で工夫したこと」というタイトルで、リンターやフォーマッターに関する発表をしてきました。その際に、参加者の皆さんの多くが Ruff を採用しているとのことだったので、私も試しに使用してみることにしました。この記事はその備忘録も兼ねた内容です。

改めて、Ruff とは、Astral社が開発しているRust製のPythonのリンター兼フォーマッターです。下図(出典は Ruff の公式サイト)のように、他のリンター等と比較して、非常に実行速度が速いのが特徴です。

スクリーンショット 2024-12-06 16.24.54.png

今回はこの 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 を使う方法でした。

7
4
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
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?