日常のワークフローにおいて、コードを綺麗に保つことは重要ながら難しいことです。
「後で直す」と頭の片隅に残しつつ、どうしてもその時間が取れないというシーンは多々あります。
そういったシチュエーションで便利なのがPythonのpre-commit
です。今回はpre-commit
と、それに付随して使うことで効果的になるblack
、isort
、mypy
、そしてbandit
について簡単に使い方と効果を紹介していきます。
pre-commit
とはpre-commit
はPython製ツールで、pre-commit
フックを管理・維持するためのものです。
pre-commit
フックは、Gitのようなバージョン管理システムでコミットが行われる前に自動的に実行されるスクリプトです。これらのスクリプトは、コードがコミットされる前に特定の基準を満たしているかチェックするために使われます。
pre-commit
がどのように機能し、なぜ有効なのかを簡単に説明します。
pre-commit
インストールpre-commit
のインストールはpip
、conda
、あるいはhomebrew
(macOSの場合)を使いましょう。
conda
の場合は以下です。
homebrew
を使う場合は以下です。
pre-commit
が動作する流れ.pre-commit-config.yaml
ファイルをリポジトリに追加します。このファイルで使用するフックを指定します。pre-commit install
コマンドでフックをインストールします。これにより、コミット前に指定したスクリプトを実行するようgit
のフックが設定されます。.pre-commit-config.yaml
ファイルで指定したフックが実行されます。いずれかのフックが失敗するとコミットは中断され、指定した条件を満たすコードのみがコミットされるようになります。pre-commit autoupdate
コマンドを使って新しいバージョンに更新できます。pre-commit
のメリットpre-commit
はflake8
やblack
のような一般的なlinterからカスタムスクリプトまで、幅広いフックをサポートしています。black
= 一貫したコード書式を保証するコードフォーマッター(整形)flake8
= Pythonコードの文法エラーや論理エラーをチェックするlinterisort
= Pythonのインポートを一貫性のある方法でソートmypy
= Pythonの静的型チェッカーbandit
= セキュリティ脆弱性のスキャンそれでは実際に表題の5つのフックを組み合わせていく実例を紹介します。
今回は各ツールの詳細については割愛します。(別のコンテンツで紹介します)
まず、pre-commit
がインストールされていることを確認してください。
.pre-commit-config.yaml
ファイル作成リポジトリのルートに、以下の内容の.pre-commit-config.yaml
ファイルを作成します。
このコマンドを実行すると以下のようなファイルが作成されます。
ここまで設定したら動かしてみましょう。例として、README.md
を作成してコミットします。
この時点で、以下のように.pre-commit-config.yaml
に書いた内容がインストールされます。
今回は特にチェック対象となるファイルがなかったため、すべてPassed
(成功)かSkipped
(スキップ)となります。
pre-commit
を参考にどのように修正していくかpre-commit
フックが実行されます。pre-commit
を活用しようpre-commit
はPythonプロジェクトのコード品質を維持する強力なツールです。
レビューを自動化し、コーディング規約を強制することで、クリーンで一貫性があるコードを作成するのに役立ちます。小さな個人プロジェクトでも、大規模なチーム開発のアプリケーションでも、pre-commit
は早い段階で取り入れるべきツールだと断言できます。
black
、flake8
などの複数のツールとpre-commit
を統合することで、一括管理できるため、チェックの忘れ防止にも効果的です。安全性が保証と全体的な開発体験の向上を目指して、ぜひpre-commit
の導入を検討してみてください。