日常のワークフローにおいて、コードを綺麗に保つことは重要ながら難しいことです。
「後で直す」と頭の片隅に残しつつ、どうしてもその時間が取れないというシーンは多々あります。
そういったシチュエーションで便利なのがPythonのpre-commitです。今回はpre-commitと、それに付随して使うことで効果的になるblack、isort、mypy、そしてbanditについて簡単に使い方と効果を紹介していきます。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
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の導入を検討してみてください。