pre-commit

Geminiに聞いてみた
pre-commit.ci
チェックに遭遇する理由
GitHub の Pull Request で
pre-commit.ci
が、Pull Request で実行されるのか?
疑問:なぜ自分のリポジトリに設定していない GitHub でオープンソースプロジェクトに貢献する際、自分のリポジトリで設定していないにもかかわらず、Pull Request を送った後に pre-commit.ci
という自動チェックが実行され、エラーが発生することがあります。特に、対象のリポジトリのページを見ても「Actions」タブが見当たらず、なぜチェックが走るのか不思議に感じるかもしれません。
これは、GitHub Actions の一般的な使い方とは異なる、pre-commit.ci
という外部サービスの仕組みによるものです。
pre-commit.ci
は GitHub と深く連携した独立したサービスである
回答:pre-commit.ci
は、リポジトリにコミットされたコードがプロジェクトの定めるコーディング規約やフォーマットに準拠しているかを自動でチェックするサービスです。このサービスは、GitHub の Pull Request イベントを自動で購読するように設計されています。
GitHub のリポジトリの管理者が pre-commit.ci
を導入すると、GitHub の設定に特別な設定ファイルが追加されるわけではありません。その代わり、サービス自体がリポジトリに対する「フック」を設定し、Pull Request が作成されるたびに自動でチェックを実行します。
この仕組みは以下のように機能します。
-
リポジトリの連携:
espnet/g2p
のリポジトリ管理者がpre-commit.ci
のウェブサイトで自身のプロジェクトを登録し、連携を許可します。 -
イベントの監視:
pre-commit.ci
サービスは、連携したリポジトリで Pull Request が作成されるイベントを監視します。 -
チェックの実行:あなたの Pull Request が作成されると、このイベントを検知した
pre-commit.ci
が、自身のサーバー上で設定されたチェックを実行します。 -
結果の通知:チェックが完了すると、
pre-commit.ci
はその結果(成功または失敗)を GitHub の Checks API を通じて Pull Request に送信します。 -
ステータスの表示:GitHub はこの結果を受け取り、あなたの Pull Request ページに「
pre-commit.ci
が失敗しました」といった形でステータスを表示します。
そのため、あなたが pre-commit.ci
の実行を確認しても、リポジトリ内に /.github/workflows/
ディレクトリが存在しなかったり、「Actions」タブが見つからなかったりするわけです。このチェックは、リポジトリ内の .yml
ファイルによって実行されるのではなく、外部サービスによって行われているからです。
解決策とベストプラクティス
この問題を解決するには、pre-commit.ci
から提供されたエラーメッセージに従ってコードを修正する必要があります。
将来的に同じ問題を防ぐには、Pull Request を送る前に、ローカル環境でチェックを実行することが最も効果的です。
-
pre-commit
のローカルへのインストール:pip install pre-commit pre-commit install
これらのコマンドを実行すると、
git commit
を実行するたびに、プロジェクトの.pre-commit-config.yaml
ファイルに基づいて自動でチェックが走るようになります。これにより、不適合なコードをコミットする前に問題を検知できます。 -
手動でのチェック:
pre-commit run --all-files
コマンドを使用すると、いつでもすべてのファイルに対してチェックを手動で実行できます。
GitHub の Pull Request チェックが失敗した場合でも、それはあなたのコードがまだマージするには不十分であることを教えてくれる良い機会です。このチェックをうまく利用することで、より品質の高い貢献が可能になります。

pre-commit
をインストールし、以下の.pre-commit-config.yaml
ファイルをリポジトリに作成しました。
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
その後、pre-commit run --all-file
を実行しました。それでまた空白と改行に関するエラーが出ます。
それらのエラーを修正するために、pre-commit
は関連のファイルを自動的に修正します。
その後、もう一回pre-commit run --all-file
を実行したら、検査は全部通りました。