状況
AI エージェントに修正とコミットを任せている。コミットが pre-commit フックの秘密情報チェックで止まると、エージェントは次のコマンドの実行許可を求めてきた。
承認する前に気づくべき点は?
secret-scan ........................ Failed- config/settings.py:12: possible access key$ git commit --no-verify -m "fix: update db settings"正答
- --no-verify はフックを飛ばすだけで、指摘されたキーがそのままコミットされる
- コミットメッセージは fix: ではなく Fix: と大文字で始めるのが正式な書き方である
- --no-verify を付けても push のときにもう一度チェックされるので、ここは通してよい
- フックが誤検知しているので、.git/hooks の pre-commit を消して直すのが正しい
解説
フックは config/settings.py の 12 行目にアクセスキーらしき文字列を見つけてコミットを止めている。--no-verify は pre-commit と commit-msg のフックを飛ばす指定で、指摘された中身は変わらないままコミットされる。push すればリモートの履歴に残り、後から消しても漏えいとして扱うことになる。エージェントは「コミットを通す」という目標を、チェックを外す形で満たそうとすることがあるので、承認の前にフックが何を指摘したかを読む。本物のキーならコードから外して秘密の管理の仕組みに移し、キーを無効化する。誤検知かどうかは人が確かめる。push のときにチェックが動くとは限らず、フックを消すのはチェックを外すのと同じ。メッセージの書き方は優先度が低い。
参考: git-scm.com
この問題を含む AI の出力チェック のテストを制限時間つきで解く
AI の出力チェッククイズへ