サイトアイコン アマチュア無線局JS2IIU

【Python】Lintツール最新比較 – flake8, pylint, ruff, black の違いとCI/CDでの活用

こんにちは、JS2IIUです。

LintツールをCI/CDに組み込んで活用できると開発の効率がグッと向上します。Lintツールの違いを踏まえての活用事例を簡単に紹介していきます。今回もよろしくお願いします。

1. はじめに

Pythonプロジェクトにおけるコード品質の維持は、開発効率と保守性を高める上で非常に重要です。Lintツールは、コードの静的解析を行い、潜在的なバグやコーディング規約違反を検出するのに役立ちます。近年、PythonのLintツールは多様化しており、それぞれのツールが独自の特徴を持っています。

本記事では、代表的なLintツールであるflake8, pylint, ruff, blackを比較し、それぞれの特徴と用途を解説します。さらに、これらのツールをCI/CD(継続的インテグレーション/継続的デリバリー)に統合する方法を、GitHub Actionsを例に紹介します。

LintツールをCI/CDに統合するメリット:

2. 各Lintツールの特徴と用途

flake8

pylint

ruff

black

3. GitHub Actions を使った自動Lintの設定

GitHub Actionsを使用して、これらのLintツールをCI/CDパイプラインに統合する方法を紹介します。

flake8 のワークフロー例 (.github/workflows/flake8.yml):

YAML
name: Flake8 Lint

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python 3.x
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install flake8
      - name: Run flake8
        run: flake8 .

ruff のワークフロー例 (.github/workflows/ruff.yml):

YAML
name: Ruff Lint

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python 3.x
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install ruff
      - name: Run ruff
        run: ruff .

black のワークフロー例 (.github/workflows/black.yml):

YAML
name: Black Format Check

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python 3.x
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install black
      - name: Run black check
        run: black --check .

これらのワークフローを.github/workflowsディレクトリに保存することで、GitHub Actionsが自動的にLintチェックを実行します。

4. CI/CD パイプラインでの組み合わせ例

ruff + black のシンプルな構成

多くのプロジェクトでは、ruffとblackを組み合わせることで、高速かつ効果的なLintとフォーマットチェックを実現できます。

YAML
name: Lint and Format

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python 3.x
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install ruff black
      - name: Run ruff
        run: ruff .
      - name: Run black check
        run: black --check .

pylint を含める場合の最適化ポイント

pylintは厳密なチェックを行うため、実行時間が長くなることがあります。大規模なプロジェクトでは、差分ファイルに対してのみpylintを実行するなどの最適化を検討しましょう。

5. 導入時の注意点

6. まとめと参考資料

本記事では、Pythonの代表的なLintツールであるflake8, pylint, ruff, blackの比較と、CI/CDへの統合方法を紹介しました。これらのツールを適切に活用することで、コード品質を向上させ、開発効率を高めることができます。

こちらのリポジトリで、再利用可能なGitHub Actionワークフローを公開しています。ご興味ありましたらご活用ください。詳細な使い方については、READMEに記載していますので参考にしてみてください。

GitHub - JS2IIU-MH/reuse_wf: Reusable Github workflow
Reusable Github workflow. Contribute to JS2IIU-MH/reuse_wf development by creating an account on GitHub.

参考資料:

これらの情報を参考に、あなたのプロジェクトに最適なLintツールを導入し、より良い開発体験を実現してください。

最後に、書籍のPRです。
24年5月に出版された「CI/CD実践ガイド――持続可能なソフトウェア開発を支えるGitHub Actionsの設計と運用」、野村著。GitHubでCI/CDを初めてみたい方にはとても参考になる一冊です。ぜひ手に取ってみてください。

最後まで読んでいただきありがとうございます。

最後まで読んでいただきありがとうございます。

モバイルバージョンを終了