作業の背景
我々のチームのプロジェクトでは、importの並び替えまでを強制する厳しいリントルールが適用されています。 おかげでコードスタイルの統一が図られていますが、PRを生成した後にCIでリントエラーが発生する問題も時々あります。
頻繁ではないものの、リントエラーが発生すると、ローカルでスクリプトを実行してリントエラーを修正し、再びコードをプッシュする必要があります。 非常に手間のかかる作業で、コードレビューの時間が長引く大きな原因の一つでもありました。そのため、他のチームメンバーにpre-pushフックでリントチェックを導入することを提案しました。
他のメンバーの同意を得た上で、既存のlint-fix:global
スクリプトを活用して、以下のようにpre-pushフックを作成しました。
echo "🔍 リント修正を実行中..."
pnpm run lint-fix:global
# 変更があるか確認
if ! git diff --quiet; then
echo "❌ リントがいくつかのファイルを修正しました。プッシュする前に変更をコミットしてください。"
exit 1
fi
しかし、次の日には以下のようなフィードバックがありました。一部の方は上記のコードでの問題点がすぐにお分かりかと思います。

lint-fix:global
の実行とは無関係に、一部のファイルをステージ状態でプッシュしようとすると、Gitプッシュが失敗してしまうのです。🤦
最終的には、リント修正よりも単純にリントエラーチェックを行う方が適切だと考え、以下のようにコードを修正しました。
echo "🔍 リントを実行中..."
if ! pnpm run lint -- --quiet; then
echo "❌ リントエラーが検出されました。"
echo "👉 エラーを自動で修正するには: pnpm run lint-fix:global"
exit 1
fi
上記のコードでいうlint
スクリプトは、実際にはnext lint
を実行するスクリプトです。
--quiet
オプションを加え、エラーのみを出力させ、エラーが発生した場合にはエラーメッセージを表示して、プッシュを阻止します。
また、折角なので他のチームメンバーのためにもエラーメッセージ表示をさらに親切に変更しました。
今後はCIでリントエラーにより時間を浪費することがないことを願っています。🙏