Claude Code Hooksのgit add -A事故とcheckpoint.js肥大化、実際の修正コード
3週間前に書いたClaude CodeのHook実装ガイドのコードがもう古くなっていた。載せたコードが書き換えられていた理由は、あの実装のままだと事故るからだ。Hookは「一度書いたら動き続けるスクリプト」だと思っていたが、運用スケールが増えるたびに最初の前提が崩れていく。インフラコードは成果物と違い「動いているから触らない」対象になりやすいのに、実は最も想定外の壊れ方をしやすい。
最初の事故は、セッション終了時にHANDOFFやoutput配下の変更をgit pushするスクリプトで起きた。判定は「これらに変更があるか」なのに、実行は「git add -A」——全ファイルをステージする。判定と実行の範囲がズレていた。複数セッションが同時に動くVPSでは、あるセッションがHANDOFFを更新した瞬間、別セッションが編集中だったサーバーコードも一緒にステージされ、本番リポジトリに乗ってしまった。書きかけのコードが誰にも気づかれないうちに載る。「git add -Aを避けて対象を明示する」という教訓は社内記録に残っていたが、インフラコード自体がレビュー対象から外れていたため見落とされていた。修正後は対象をgit statusから明示的に絞り込むようにした。
もう一つの事故は、チェックポイントファイルが1.27MBまで育っていたこと。発言のたびに1行ずつ追記する設計で、複数セッションが毎日追記し続けた結果だ。大きさそのものより、Editツールが毎回全文読み込みするため、エディタが遅くなった。対策として、300KBを超えたら自動でアーカイブに退避し、直近60KB分だけを本体に残すようにした。さらに、追記専用のスクリプトを作り、AIはこれをコマンド化して呼ぶだけにした。2つの事故の共通点は「最初は正しかった」こと。git add -Aも逐次追記も、最初の数週間は問題なく動いていた。壊れたのは、セッション数や稼働日数が増えてからだ。つまり、インフラコードは「完成品」ではなく「運用とともに進化する存在」だということ。一人の企業でもツールが毎日回るようになると、書きっぱなしのコードはいつか事故を起こす。
※ 上記は配信元記事をもとにAIの鬼編集部が要約・再構成したものです。正確な内容は出典元をご確認ください。
このニュースの全文は、配信元でお読みいただけます。 Zenn AIで元記事を読む →


