実践pre-commitによる開発ワークフローの自動化
pre-commitの導入と基本
コミット前の自動チェック
コードレビューは重要ですが、スペースの修正や単純な構文エラーなど、毎回手作業で指摘するのは面倒です。こうした定型的なチェックは、コミットが行われる前に自動で実行するのが理想的です。
ここで役立つのがpre-commitフレームワークです。これは、git commitを実行した際に、あらかじめ設定されたコード検証ツールを自動で実行してくれる仕組みです。本来であれば、開発者自身がシェルスクリプトを書いて設定する必要があるの管理を、pre-commitが肩代わりしてくれます。
特に、Python、JavaScript、Terraformなど複数の言語が混在するプロジェクトでは、それぞれの言語用のリンターやフォーマッターを個別に管理するのは大変です。pre-commitを使えば、すべてのチェックを一つの設定ファイルで統一的に管理できるため、チーム開発の効率が劇的に向上します。これにより、コードレビューではより本質的なロジックの議論に集中できるようになります。
インストール
まず、pre-commitをあなたの開発環境にインストールします。パッケージ管理ツールを使うのが最も簡単です。OSや環境に合わせて、以下のいずれかの方法を選んでください。
Pythonの
pipを使うのが最も一般的で、OSを問いません。
# pip (Python)
pip install pre-commit
# Homebrew (macOS)
brew install pre-commit
# conda (Anaconda)
conda install -c conda-forge pre-commit
設定ファイルの作成
次に、プロジェクトのルートディレクトリに設定ファイルを作成します。pre-commitは、.pre-commit-config.yamlという名前のファイルを探して、どのフック(チェック項目)を実行するかを判断します。
まずは、最も基本的なフックをいくつか追加してみましょう。以下の内容でファイルを作成してください。
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
この設定は、pre-commitコミュニティが提供する基本的なフック集をv4.6.0というバージョンで利用することを意味します。具体的には、以下の3つのフックが有効になります。
trailing-whitespace: 行末の不要なスペースを削除します。end-of-file-fixer: ファイルの末尾に必ず改行を一つ入れます。check-yaml: YAMLファイルの構文をチェックします。
フックの有効化
設定ファイルを作成しただけでは、まだフックは有効になりません。最後に、以下のコマンドを実行して、Gitリポジトリにpre-commitのフックをインストールします。
pre-commit install
このコマンドは、プロジェクトの.git/hooksディレクトリ内にpre-commitという名前のスクリプトを生成します。これにより、あなたがgit commitを実行するたびに、.pre-commit-config.yamlに書かれたフックが自動的に呼び出されるようになります。
試しに、行末に不要なスペースを入れたファイルをステージングしてコミットしてみましょう。pre-commitがエラーを検出し、コミットを中断します。フックがファイルを自動修正してくれた場合は、再度git addで変更をステージングし、もう一度コミットすれば成功します。
これで、あなたのプロジェクトに自動コード検証の第一歩が導入されました。基本はこれだけです。ここから、プロジェクトの必要に応じてさまざまなフックを追加していくことになります。
pre-commitフレームワークの主な目的は何ですか?
pre-commitが使用する設定ファイルの名前は何ですか?