GitのHookを使ってleakチェックを自動化した話
こんにちは。最近はCursor(AIコーディング支援ツール)を使っての開発が手放せなくなってきました。非常に便利で、ちょっとした実装のスピードが格段に上がります。
でも、便利な一方で「生成されたコードを自分でしっかり確認する」という基本を、つい忘れがちになってしまうことも…。
事件:Secret Keyをコミットしてしまった話
先日、DjangoプロジェクトをCursorで構築していたときのことです。
Cursorが自動で生成してくれたコードに、なんと settings.py
にDjangoのSECRET_KEYがべた書きされていました。それに気づかないままコミット…。
# settings.pyの一部
SECRET_KEY = 'django-insecure-xyz123abc456...'
その後もかなりの作業をこのブランチで続けてしまいました。
幸い、Push前に気づいた
ふとしたタイミングでコードレビューしているときに、SECRET_KEY
が直書きされていることに気付き、rebaseで該当のコミットを修正。
ギリギリpush前だったのが救いでした。
今後に備えて:Git Hook + gitleaksで自動チェック
この件をきっかけに「同じことを繰り返したくない」と思い、Gitのpre-commit hookで gitleaks を使って機密情報のリークチェックを入れるようにしました。
設定手順
1. gitleaksをインストール
Macの場合:
brew install gitleaks # macOSの場合
# または公式リリースからバイナリをダウンロード
Windowsの場合:
- gitleaksのリリースページ にアクセス
- 最新版の
gitleaks_x.x.x_windows_x64.exe
をダウンロード
Windows版が見当たらないことがあります。
リストが折りたたまれているので下部にある (show all) のようなリンクを押してみてください。
- 任意の場所(例:
C:\tools\gitleaks
)に保存 - そのフォルダを Windows の環境変数 PATH に追加
- Git Bash を開いて以下のコマンドで疎通確認:
gitleaks version
2. .git/hooks/pre-commit
に以下を追加
#!/bin/sh
echo "Running gitleaks..."
gitleaks detect --source . --staged
if [ $? -ne 0 ]; then
echo "gitleaks: 機密情報が含まれています。コミットを中止します。"
exit 1
fi
3. 実行権限をつける
chmod +x .git/hooks/pre-commit
これで、コミット前にgitleaksが自動で走り、問題があるとブロックしてくれるようになります。
試しにもう一度やってみた
試しに以下のようなコードを入れてコミットしようとすると:
SECRET_KEY = 'django-insecure-1234abcd5678efgh'
以下のようにコミットがブロックされます。
Running gitleaks...
gitleaks: 機密情報が含まれています。コミットを中止します。
安心ですね。
まとめ
- Cursorは超便利。でも生成されたコードの中身の確認は開発者の責任
- Secret Keyのコミットに気付かず進めてしまったけど、push前にrebaseで修正できた
- Git Hook × gitleaks で自動チェックの仕組みを導入して防止策を構築
AIが生成するコードと付き合うためには、人間側がルールを整えておくことが大事だと痛感しました。便利な時代だからこそ、こういう仕組みがますます重要になってきます。
おまけ:発展あるかも?
今回は一番お手軽にできそうな方法を試しましたが、もっと高速な方法やチーム開発に向いた方法などもありそうなのでそちらも試せたら記事にしていきたいと思います。
ご意見やフィードバックがあれば、ぜひコメントでお願いします!