はじめに
Python開発において、コード品質の維持と向上は常に重要な課題です。
プロジェクトが成長するにつれて、コードベースが複雑化し、品質の保証が難しくなります。こうした問題に対処するために、開発者コミュニティはさまざまなツールや手法を提案していますが、その中でも特に注目に値するのが「pre-commitツール」です。
pre-commitツールは、開発者がコミットする前にコードの静的解析やフォーマットのチェックなどを自動的に実行することで、コード品質を維持し、バグを早期に発見するのに役立ちます。本記事では、pre-commitツールの概要から導入方法を解説します。
Python開発におけるコード品質向上の重要性と、pre-commitツールがどのようにその実現に貢献するかを理解し、プロジェクトの品質向上に役立てていきましょう。
pre-commitツールの設定方法
pre-commitツールをプロジェクトに統合するためには、次の手順を行います。
1. インストール
pre-commitツールをインストールします。通常、pipを使用してインストールします。
pip install pre-commit
2. 設定ファイルの作成
プロジェクトのルートディレクトリに.pre-commit-config.yamlというyamlファイルを作成します
3. 設定ファイルの設定
今回の例ではblack, flake8, isort, mypyを使用してコードの品質を向上させます。各フックは、異なるタスクを実行します。
rev設定はプロジェクトのPythonバージョンに依存するため適宜書き換えてください。今回はPython3.10を想定してしています
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: trailing-whitespace # 末尾の空白を削除
- id: end-of-file-fixer # ファイルが改行で終わり、改行のみであることを確認
- repo: https://github.com/psf/black
rev: 24.4.0
hooks:
- id: black
- repo: https://github.com/PyCQA/flake8
rev: 7.0.0
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-isort
rev: v5.10.0
hooks:
- id: isort
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.7.0
hooks:
- id: mypy
args: [--ignore-missing-imports, --disallow-untyped-defs]
additional_dependencies: ["types-requests"]
3. Gitのhookスクリプトを有効化
設定ファイルの用意が完了後、以下コマンドでhookスクリプトを有効化します。
pre-commit install
今回導入したhookの説明
black
PythonのFormatterでコードの自動フォーマットを行います。
flake8
PythonのLinterでコードの静的解析を行い、PEP 8スタイルガイドに準拠しているかを確認します。
isort
インポート文を整理してソートします。
mypy
Pythonコードの静的型チェックを行います。
実際にコミットしてpre-commitが動作するか確認してみる
試しに間違ったコードを作成しcommitしてみます。
使用していないimport文、型設定が間違っている定義を用意しました。
コミットを行うとhookスクリプトが実行され、
間違ったコードがエラーになることが確認できました!
間違ったコードを修正するとチェックが通り、コミットできます。
最後に
pre-commitツールを導入することで間違ったコードをコミットすることを防ぎ、コードの品質を維持し向上することができます。
他にも様々なhookを設定することができるため、今回紹介した設定を参考に開発プロセスをよりスムーズにしていきましょう!
株式会社グラディートでは一緒に働く仲間を募集しています