1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code Hookを初めて書いてみた——7行のスクリプトで「やらかし」を防ぐ

1
Last updated at Posted at 2026-04-12

Claude Codeを使い始めて1週間で、作りかけのファイルをAIに消された。

リファクタリングを頼んだだけなのに、Claudeは「不要なファイルを整理しよう」と判断して、いくつかのファイルをまとめて削除した。Gitにcommitしていない変更も含めて。

GitHubにはもっと深刻な事例がある。C:\Usersフォルダが全部消されたという報告。Claude Codeは便利だが、「何でもできる」ということは「何でも壊せる」ということでもある。

この事故の後、「hookを入れなきゃ」と思った。hookというのは、AIが何かをやろうとした瞬間に「ちょっと待て」と割り込んで止める仕組みだ。

最初のhookを書いてみる

hookは実はすごくシンプルだ。たった7行のスクリプトで書ける。

やることは1つ。AIがrm -rf /(ファイルを全部消すコマンド)を実行しようとしたら、ブロックする。

まず、jq(JSONを処理するコマンド)が必要。入っていなければ先にインストールする:

# macOS
brew install jq

# Ubuntu/Debian
sudo apt install jq

次に、hookを保存する場所を作る:

mkdir -p ~/.claude/hooks

次に、スクリプトを書く:

cat > ~/.claude/hooks/my-first-hook.sh << 'EOF'
#!/bin/bash
COMMAND=$(cat | jq -r '.tool_input.command // empty' 2>/dev/null)

if echo "$COMMAND" | grep -qE 'rm\s+-rf\s+/'; then
    echo "BLOCKED: rm -rf on root" >&2
    exit 2
fi

exit 0
EOF
chmod +x ~/.claude/hooks/my-first-hook.sh

7行。何をやっているか:

  1. cat — Claude Codeが「これからこのコマンドを実行するよ」と送ってくるデータを受け取る
  2. jq — そのデータからコマンドの部分だけを取り出す
  3. greprm -rf /というパターンが含まれているか調べる
  4. exit 2 — 含まれていたらブロック。Claude Codeは「exit 2」を受け取ると、そのコマンドを実行しない

exit 0は「問題なし、実行していいよ」という意味。

登録する

スクリプトを書いただけでは動かない。Claude Codeに「このスクリプトを使って」と教える必要がある。

~/.claude/settings.jsonに以下を追加する:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/my-first-hook.sh"
          }
        ]
      }
    ]
  }
}

PreToolUseは「ツールを使う前に」という意味。matcher: "Bash"は「Bashコマンドの実行前に」という意味。つまり「AIがBashコマンドを実行する前に、毎回このスクリプトを走らせて」という設定。

Claude Codeを再起動すれば、hookが有効になる。

動くか確かめる

本当にrm -rf /を実行して確かめるわけにはいかないので、シミュレーションで確認する:

# 危険なコマンドがブロックされるか
echo '{"tool_input":{"command":"rm -rf /"}}' | bash ~/.claude/hooks/my-first-hook.sh
echo $?  # 2が出れば成功(ブロックされた)

# 安全なコマンドは通るか
echo '{"tool_input":{"command":"ls -la"}}' | bash ~/.claude/hooks/my-first-hook.sh
echo $?  # 0が出れば成功(許可された)

テストコマンドはbashで明示的に実行しているのでchmod +xがなくても動く。だが後述のsettings.jsonではbashプレフィックスなしでパスだけを指定している。Claude Codeがhookを直接実行する場合、実行権限がないとフックが無視される。chmod +xは忘れずにつけておくこと。

macOSユーザーへ: Claude Codeはhookを制限されたPATHで実行する(#46954)。Homebrewでインストールしたjq/opt/homebrew/bin/jq)がhookから見つからず、hookが何もせずに終了することがある。hookの先頭に export PATH="/opt/homebrew/bin:$PATH" を追加するか、絶対パス /opt/homebrew/bin/jq を使うと確実。

手動で書かなくてもいい

ここまで読んで「面倒だな」と思った人は、cc-safe-setupを使えば全部自動でやってくれる。

# 8個の安全hookを一発でインストール
npx cc-safe-setup

# 自然言語でhookを作る(JSONもスクリプトも書かなくていい)
npx cc-safe-setup --guard "データベースを消すな"

ただ、仕組みを知っておくと、自分で好きなhookを作れるようになる。「AIに○○をさせたくない」というルールを自分で追加できる。

hookの種類

hookには複数のタイミングがある。よく使うのはこの4つ:

タイミング いつ動く
PreToolUse AIがコマンドを実行する前 「rm -rfを止める」「mainへのpushを止める」
PostToolUse AIがコマンドを実行した後 「構文エラーがないかチェック」
Notification AIが通知を送るとき 「通知内容をログに記録」
Stop セッションが終わるとき 「作業ログを保存」

他にもSessionStart(セッション開始時)、UserPromptSubmit(ユーザー入力時)などがある。最初はPreToolUseだけ覚えればいい。「AIが何かをする前に、止めるかどうかを判断する」——これがhookの基本。


「どのhookを入れればいいかわからない」なら、Hook Selectorで5つの質問に答えるだけで最適なhookセットが分かる。

hookの設計パターンや自律セッション運用の実践例はAnthropic公式ガイドにない事故防止——800+時間で19点→85点にした全記録(¥800・第3章まで無料)にまとめている。655個のhookを作るまでの800時間の全記録はAIに仕事を任せてみた(¥800・第2章まで無料)。


📖 トークン消費に困っているならClaude Codeのトークン消費を半分にする——800時間の運用データから見つけた実践テクニック(¥2,500・はじめに+第1章 無料)


関連記事: Claude Codeのトークン消費を減らす5つの方法——Opus 4.7対応


⚠️ CVE-2026-21852(2026年4月公開): プロジェクト内.claude/settings.json経由でAPIキー窃盗。対策: npx cc-safe-setup(ユーザーレベル設定で免疫)→ 詳細

⚠️ Opus 4.7緊急情報(2026年4月17日)
Opus 4.7のauto mode安全分類器がOpus 4.6にハードコードされている問題が発覚。3日間で23件以上のデータ損失。さらにv2.1.100以降、APIコールごとに約20,000トークンが見えない場所で追加課金されている問題も判明(#46917、GitHub上196件のリアクション)(50GB永久消失含む)。4倍のトークン消費も報告されている。対策: npx cc-safe-setup --opus47Survival Guide / Safety Scanner


関連の素材

5月22日に新刊の事例集 Claude Code Claim-Verify Handbook ($19、 約89頁、 約113,000字) を発売します。 道具が「成功した」 「比較した」 「設定された」 と主張する一方で実態が乖離していた事例を GitHubの起票の集まりから130件 (本文15件+付録D 115件) 整理した本で、 14件の防衛の手順と5件の自動の点検の道具と一緒に提供しています。 試し読みのGist (約16,000字、 章1の全件) は こちら
予防 hook の集まりは cc-safe-setup (MIT、 745件以上の hook、 30,000件以上のインストール)。 月額の継続の媒体 CC Safety Lab (¥500/月、 Ko-fi) は毎月の事故の整理を配信。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?