lefthookでシークレット漏洩と破壊的操作をpre-commitで防ぐ
Git hooksツールの lefthook を使って、コミット前にシークレット漏洩チェックと破壊的操作の検出を自動化した。
Before: シークレットの混入や rm -rf、DROP TABLE のような危険なコマンドがそのままコミットされうる状態。
After: lefthook の pre-commit フックで自動検出し、コミットをブロックする。
# lefthook.yml
pre-commit:
commands:
config-guard:
run: bash scripts/config-guard.sh
glob: "*.{env,yml,yaml,toml,json,sh}"
config-guard スクリプトでは以下をチェックする:
- シークレット検出 — ステージされたファイル内の
token=,secret=,password=などのパターンをgrepで検知 - 破壊的操作の検出 —
rm -rf /,DROP TABLE,git push --forceなど危険なコマンドパターン - 設定ファイルの妥当性 — 環境変数ファイルに本番値が混入していないか
lefthook を選んだ理由は、YAML一枚で設定が完結し、glob でファイルタイプごとにフックを分けられること。husky + lint-staged でも似たことはできるが、lefthook の方がポリグロット(多言語)プロジェクトでの設定がシンプル。
テストも用意する。fixture ファイル(意図的に違反を含むファイル)を置いて、スクリプトが正しく検出するかを検証する。CIでもこのテストを回すことで、ガード自体の品質を担保できる。