🤏

最小構成で導入するruff(pre-commit/GithubAction対応)

に公開

はじめに

Pythonのリンター・フォーマッターであるruffを最小構成で導入する方法。pre-commitとGitHub Actionsに対応。型チェックはしていません。
あくまで最小構成なので、改善の余地はあると思います。

前提条件

  • Python がインストール済みであること
  • uv や pip などのツールがインストール済みであること

インストール

必要なパッケージをインストールします。pipを使用していますが、公式ドキュメントに記載されている方法なら何でも良いと思います。

pip install ruff
pip install pre-commit

ruffの設定

ruff の設定ファイルを作成します。 pyproject.toml があるなら、そちらに追記でもOKです。

line-length = 120
indent-width = 4

[lint]
fixable = ["ALL"]

[format]
indent-style = "space"
line-ending = "lf"

この設定では以下のような定義をしています。

  • 1行の最大文字数を120文字に設定
  • インデント幅を4スペースに設定
  • 自動修正可能なルールをすべて有効化
  • フォーマット時のインデントスタイルをスペースに指定
  • 改行コードをLFに統一

設定内容はチームメンバーなどと相談し、お好みの設定にすると良いと思います。

pre-commitの設定

.pre-commit-config.yamlを作成し、以下の内容を記述。

repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
  rev: v0.14.0
  hooks:
    - id: ruff-check
      args: [ --fix ]
    - id: ruff-format

astral 公式のものを使いました。記述量が減って便利です。

この設定により、コミット時に以下が実行されます。

  • ruff-check: リンターによるチェックと自動修正
  • ruff-format: フォーマッターによる整形

設定後、以下のコマンドでpre-commitを有効化します。

pre-commit install

これにより、git commit実行時に変更されたファイルのみが自動的にチェックされます。
チェックをバイパスしたい場合は、 git commit --no-verify です。

GitHub Actionsの設定

.github/workflows/linter.ymlを作成し、以下の内容を記述。

name: Linter
on: pull_request
jobs:
  ruff-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
        with:
          ref: ${{ github.head_ref }}
          fetch-depth: 0
      - name: Install ruff
        uses: astral-sh/ruff-action@v3
        with:
          args: "--version"
      - run: ruff check --no-cache
  ruff-format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
        with:
          ref: ${{ github.head_ref }}
          fetch-depth: 0
      - name: Install ruff
        uses: astral-sh/ruff-action@v3
        with:
          args: "--version"
      - run: ruff format --check --diff --no-cache

このワークフローでは2つのジョブを定義しています。

  • ruff-check: すべてのファイルに対してリンターを実行
  • ruff-format: すべてのファイルに対してフォーマットチェックを実行

ruff-action@v3args: "--version"を指定することでruffのインストールのみを行い、実際のチェックは別途runステップで実行しています。

実行はタイミングは PullRequest 作成時としましたが、開発スタイルに合わせて定義すると良いと思います。

運用のポイント

CI環境での注意点

GitHub Actionsではすべてのソースコードが対象となるため、自身が変更していないファイルがチェックに引っかかる可能性があります。
既存コードベースに導入する場合は、段階的なルール適用を検討してもいいかも。

ローカル環境での動作

pre-commitを使用することで、コミット時に変更したファイルのみがチェック対象となります。チェックに違反した場合、コミットが失敗します。ruffが自動修正した内容はgit addで追加し、再度コミットします。(これはちょっと不便かも…)

ルールのカスタマイズ

.ruff.tomlを編集することで、プロジェクトに合わせたルール調整が可能です。詳細はruffの公式ドキュメントを参照。

まとめ

ruffを最小構成で導入する手順を紹介しました。
.ruff.toml.pre-commit-config.yaml、GitHub Actionsの設定ファイルを作成するだけで、ローカルとCI環境の両方でコード品質を維持する仕組みを構築できます。
導入初期段階では、チームの状況に応じてルールを調整しながら運用することを推奨します。

Discussion