kmkkiii.com

AIコーディングエージェントのHooks活用

🪝

AIコーディングエージェントに.env認証情報ファイルを参照させないために、Hooksを設定しておくことがおすすめです。

Claude Codeでは、PreToolUsePostToolUseUserPromptSubmitなど、各ツールの実行前後のイベント等に対して任意のシェルコマンドを実行できたりします。 (各AIコーディングエージェントでHooksのサポート内容やイベント名などが異なるので注意) https://code.claude.com/docs/ja/hooks

とえば、.claude/settings.json以下のような Hooks を設定しておくと、プロンプトに機密情報っぽい内容が含まれていたら送信前に検知したり、.envなどの認証情報ファイルを参照しようとした際にブロックしてくれたりするようになります。

{
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/prompt-guard.sh"
          }
        ]
      }
    ],
    "PreToolUse": [
      {
        "matcher": "Read|Write|Edit|Glob|Grep",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/guard-file-access.sh"
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/guard-bash.sh"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/scan-output.sh"
          }
        ]
      }
    ]
  }
}

この例では、以下のような役割を持たせています。

  • prompt-guard.sh
    • プロンプト送信時に、機密情報を貼り付けないよう注意喚起
    • 必要に応じて、特定の文言を含むプロンプト自体をブロック
      • API Keyなど特定のパターンを検知できる
  • guard-file-access.sh
    • Read/Write/Edit/Glob/Grepなどのツール経由で、認証情報ファイルへアクセスしようとした場合にブロックする
  • guard-bash.sh
    • cat .envなど、シェルコマンド経由で迂回して参照されるのを防ぐ
  • scan-output.sh
    • Write/Editの実行後に、出力内容に機密情報らしき文字列が含まれていないかを確認する

実際の例としてcat .env実行しようとすると、次のようにブロックされます。

> cat .env を実行して
Read 1 file (ctrl+o to expand)

[guard-bash] Blocked: Command references a secret-file path
(e.g. .env, *.key, id_rsa, .ssh/, .aws/).
Ask the user to supply the value instead.
Command: cat .env

設定自体もAIに手伝ってもらえば難しくありません! 設定しておく価値はありますが、Hooksがあれば完全に安全というわけではないので、機密情報の取り扱いには引き続き注意しましょう…!

他にもファイルを作成・編集してもらったときは、自動で品質チェック(lint/format/型チェック等)を行うなどの活用方法があるので便利。