1
/
5

Python開発: pre-commitツールを活用してコード品質を維持・向上させよう

はじめに

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を設定することができるため、今回紹介した設定を参考に開発プロセスをよりスムーズにしていきましょう!

株式会社グラディートでは一緒に働く仲間を募集しています

株式会社グラディートでは一緒に働く仲間を募集しています
同じタグの記事
今週のランキング
株式会社グラディートからお誘い
この話題に共感したら、メンバーと話してみませんか?