shwldshwlda month ago

lefthookでシークレット漏洩と破壊的操作をpre-commitで防ぐ

Git hooksツールの lefthook を使って、コミット前にシークレット漏洩チェックと破壊的操作の検出を自動化した。

Before: シークレットの混入や rm -rfDROP 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 スクリプトでは以下をチェックする:

  1. シークレット検出 — ステージされたファイル内の token=, secret=, password= などのパターンをgrepで検知
  2. 破壊的操作の検出rm -rf /, DROP TABLE, git push --force など危険なコマンドパターン
  3. 設定ファイルの妥当性 — 環境変数ファイルに本番値が混入していないか

lefthook を選んだ理由は、YAML一枚で設定が完結し、glob でファイルタイプごとにフックを分けられること。husky + lint-staged でも似たことはできるが、lefthook の方がポリグロット(多言語)プロジェクトでの設定がシンプル。

テストも用意する。fixture ファイル(意図的に違反を含むファイル)を置いて、スクリプトが正しく検出するかを検証する。CIでもこのテストを回すことで、ガード自体の品質を担保できる。