0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pre-commitでコード整形と静的解析を自動化

Posted at

はじめに

開発を進める上で、コードの品質を保ちながら作業効率を向上させるために、コードの整形や静的解析の自動化は非常に有用です。今回は、pre-commitを利用して、Pythonプロジェクトにおけるコード整形ツールや静的解析ツール(blackisortflake8)を導入する方法について解説します。

pre-commitは、Gitのコミット時に自動的に各種チェックや整形処理を実行できる仕組みです。これにより、コードスタイルを一定に保ち、不要な差分が混入することを防ぐことが可能となります。

pre-commitとは?

pre-commitは、Gitリポジトリにフックを設定して、コミット前に自動的にコードのフォーマットやチェックを行うツールです。

  • コード整形: blackを用いてPEP8に準拠した自動整形を実行
  • インポート整理: isortでインポート文を自動的にソート
  • 静的解析: flake8でコードの文法やスタイル、潜在的なバグを検出

これにより、開発者は手動での整形作業やチェックの手間を省くことができ、一貫したコード品質を維持できます。

使用するツール

今回の記事では以下のツールをpre-commitのフックとして導入します。

  • black
    Pythonコードのフォーマッタ。自動で整形してくれるため、スタイルの議論をなくすことができます。

  • isort
    インポート文の順序を自動的に整理し、読みやすさと一貫性を実現します。
    ※blackとの連携を考慮して、引数に --profile black を指定します。

  • flake8
    静的解析ツールです。pep8、pyflakesなどを内部で利用し、コードの問題点を洗い出します。
    ※blackとの相性を合わせるために、flake8-black の追加依存関係を指定しています。

pre-commit設定ファイルの内容

以下は、設定ファイル(例:.pre-commit-config.yaml)の一例です。

# 実行コマンド
# pre-commit run --all-files

repos:
  - repo: https://github.com/psf/black
    rev: 23.3.0
    hooks:
      - id: black
        language_version: python3

  - repo: https://github.com/pre-commit/mirrors-isort
    rev: v5.10.1
    hooks:
      - id: isort
        args: ['--profile', 'black']

  - repo: https://github.com/pycqa/flake8
    rev: 5.0.4
    hooks:
      - id: flake8
        additional_dependencies: ['flake8-black']

pre-commitの導入と使用方法

pre-commitのインストール

まず、プロジェクトのルートディレクトリに移動し、以下のコマンドを実行してpre-commitをインストールします。

pip install pre-commit

Gitフックのインストール

次に、以下のコマンドを実行してGitフックをインストールします。

pre-commit install

これにより、以後のコミット時に自動でpre-commitが実行されるようになります。

全ファイルに対する手動実行

初回導入時や既存コード全体に対して整形やチェックを実行する場合は、以下のコマンドを利用します。

pre-commit run --all-files
0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?