【2026年最新】Claude Codeで.claudeignoreが無視されnode_modulesでトークン爆食する原因は?PreToolUse遮断フックと3重除外設定で漏洩を0%にする手順

「プロジェクトルートに .claudeignore を作って node_modules/ や dist/、

.env を書いたのに、Claude Codeが平然と中身を読み込んで数十万トークンを一瞬で溶かしてしまう!」と困っていませんか?

「ビルド成果物を勝手に開いて MaxFileReadTokenExceededError (25000) で作業が止まる…」というトラブルも急増しています。

5時間ごとの使用枠があっという間に枯渇するだけでなく、.env のAPIキーまでコンテキストに吸い上げられるのはセキュリティ上も非常に危険ですよね。

しかし、この問題はアーキテクチャを押さえれば3分で解決できます!

.claudeignore が無視される原因は「FileReadとBashの直接パス素通りバグ(Issue #36163)」と「Windowsのパス区切り不一致(Issue #16704)」にあり、PreToolUse フック(Exit Code 2)でバイパス率を0.0%に物理遮断できます。

■ この記事でわかる3つの要点
  • なぜ .claudeignore が効かないのかを解明!一覧取得(Glob)では効いても、直接パス指定の Read や Bash (grep/find) には除外チェックがない仕様欠陥(Issue #36163)を特定
  • Windowsのバックスラッシュ境界漏れを防ぐ「3重パターン .claudeignore」!単体・直下・再帰の3重定義により、OSを問わずビルド成果物の誤読(25,000トークン超過エラー)を防止する
  • PreToolUseフック(block_ignored_files.py / Exit Code 2)で禁止パスと無差別grepを0.03秒で物理遮断し、1タスクあたりの消費トークンを89.4%削減できる

この記事は、検証実機(Windows 11 Pro 24H2・OSビルド 26100.9711・Python 3.12)上のモノレポ環境(node_modules 42,800ファイル含有)で、各ツールのバイパス挙動と PreToolUse フックの消費トークン削減効果を実測して作成しました。

記事内のテンプレートとPythonフックスクリプトをコピーするだけで、3分(追加コスト0円)でトークン爆食と機密漏洩を100%防ぐ環境を構築できますよ。

  1. 【2026年最新】なぜClaude Codeは「.claudeignore」を無視してnode_modulesや.envを読み込むのか?
  2. 【2026年実機検証】手元の環境で「.claudeignore素通り」とトークン浪費リスクを10秒で診断する手順は?
  3. 【3分で完了】3重パターン.claudeignoreとPreToolUseフックでトークン爆食を0%にする3ステップは?
    1. ステップ1:Windows/Mac両対応の「3重パターン .claudeignore」をプロジェクトルートに配置する(所要1分)
    2. ステップ2:直接パス指定と無差別grepを物理阻止する ~/.claude/hooks/block_ignored_files.py を作成する(所要1分)
    3. ステップ3:~/.claude/settings.json の PreToolUse に登録して遮断動作を確認する(所要1分)
  4. 【症状別30秒診断】あなたのClaude Code「トークン爆食・除外漏れ」を最短で防ぐ設定はどれ?
  5. Claude Codeの「.claudeignore無視・node_modulesトークン爆食問題」に関するよくある質問(FAQ)は?
    1. Q1. プロジェクトのルートに .claudeignore を置いているのに、なぜ Claude Code は node_modules や .env を読み込んでしまうのですか?
    2. Q2. .env ファイルを完全ブロックすると、セットアップに必要な .env.example(ひな形ファイル)まで読めなくなりませんか?
    3. Q3. PreToolUse フックのスクリプトでエラーを返すとき、exit 1 と exit 2 のどちらを使うべきですか?
    4. 📬 新着記事をメールでお届けします

【2026年最新】なぜClaude Codeは「.claudeignore」を無視してnode_modulesや.envを読み込むのか?

Claude Codeで.claudeignoreが無視される原因と3重除外+PreToolUseフック設計の結論まとめ図解
▲ Claude Codeで.claudeignoreが無視される原因と3重除外+PreToolUseフック設計の結論まとめ図解

Claude Codeで .claudeignore が無視される原因は、FileRead の直接パス指定と Bash に除外判定がない仕様(バイパス率100.0%)にあります。3重除外定義と PreToolUse(Exit Code 2)フックで0.03秒遮断し消費トークンを89.4%削減できます。

Anthropic公式ドキュメント(Claude Code Hooks 公式リファレンス – Anthropic Docs)やGitHub一次情報(GitHub Issue #36163: .claudeignore does not prevent Claude from reading ignored files、

GitHub Issue #16704: .claudeignore not ignoring private files — deny list bypassed)でも、除外リストがソフト除外にとどまる問題が報告されています。

あわせて GitHub Issue #13929: MaxFileReadTokenExceededError caused by reading unignored build artifacts や GitHub Issue #166: Ignore ‘node_modules’ by default でも、

巨大フォルダの走査問題が議論されています。

また Claude Code Settings 公式仕様 – Anthropic Docs および Git 公式ドキュメント:gitignore パターン仕様 でも、

パターン定義とフックによるアクセス制御が解説されています。

Windows 11 Pro 24H2実機のビルド情報とPreToolUse遮断フックによるトークン89.4%削減効果を確認した画面
▲ Windows 11 Pro 24H2実機のビルド情報とPreToolUse遮断フックによるトークン89.4%削減効果を確認した画面
Windows 11 Pro 24H2実機のシステム情報(msinfo32.exe:10.0.26100 ビルド 26100)を確認したフル画面スクリーンショット
▲ Windows 11 Pro 24H2実機のシステム情報(msinfo32.exe:10.0.26100 ビルド 26100)を確認したフル画面スクリーンショット

まずは「なぜ .claudeignore に書いたはずの node_modules や .env が素通りしてしまうのか?」を3つの技術原因に分けて整理しましょう。

■ .claudeignore が無視される3大原因
  • 原因① FileReadTool に除外バリデーション層が存在しない(Issue #36163):GlobTool(一覧取得)では除外されても、Claudeが import 文や推測から node_modules/pkg/index.js や .env のパスを直接指定して Read を呼ぶと、何のチェックもなく全文が読み込まれ 25,000トークン超過エラーを引き起こす
  • 原因② BashTool(grep / find / rg)がファイルシステムを直接走査する:Claudeがターミナルで grep -rn "KEY" . を実行すると、シェルコマンドは .claudeignore を一切感知しないため node_modules 内の数万ファイルを総なめにしてコンテキストを爆破する
  • 原因③ Windowsのパス区切り文字(\)によるパターン不一致(Issue #16704):node_modules/ のように末尾スラッシュだけで記述すると、Windows環境のバックスラッシュ正規化境界でマッチ漏れが起きる

実機のモノレポ環境(node_modules 42,800ファイル・dist/bundle.js 37,776トークン・.env 配置)で測定した「除外対策別のバイパス発生率と1タスク消費トークン数」の比較表は以下の通りです。

検証構成(Windows 11 24H2 実機・コード改修タスク10回平均)Read (.env) 遮断率Bash (grep .) 遮断率25,000 トークン超過エラー1タスク平均消費トークン
① 一般的な .claudeignore のみ(node_modules/ 記述)× 0.0%(100%素通り)× 0.0%(無差別走査)× 頻発(dist/ 誤読で停止)× 平均 94,200 tokens
② CLAUDE.md に「node_modulesと.envは読むな」と記述△ 20.0%(80%突破される)△ 30.0%(推測で実行)△ 発生する× 平均 78,500 tokens
③ 3重 .claudeignore + PreToolUse 物理遮断フック【最推奨】◎ 100.0%(0.03秒拒絶)◎ 100.0%(除外フラグ強制)◎ 0件(開く直前に阻止)◎ 平均 9,980 tokens(-89.4%削減)
■ 【10秒トークン&機密防衛】Claude Code 3重 .claudeignore & PreToolUse 遮断フック自動生成器

プロジェクト構成を選ぶだけで、「node_modules・dist・.env の素通りを0.0%にする設定コード」と、1クリックで保存できる物理遮断スクリプト(block_ignored_files.py)を生成します。

【生成結果:FileRead・Grep・Bash による除外バイパスを0.03秒(Exit Code 2)で阻止する物理ガードスクリプト(消費トークン -89.4%削減)】
~/.claude/hooks/block_ignored_files.py として保存し、settings.json の PreToolUse に登録するだけで全プロジェクトが保護されます!
# Claude Code PreToolUse 物理遮断ガードコード
import json, re, sys
ALLOWED_NAMES = {".env.example", ".env.sample", ".env.template"}
FORBIDDEN_PATTERNS = [
    r"(^|/|\\)node_modules(/|\\|$)",
    r"(^|/|\\)(dist|build|\.next|\.nuxt|\.venv|venv|target)(/|\\|$)",
    r"(^|/|\\)\.git(/|\\|$)",
    r"(^|/|\\)\.env(\.[a-zA-Z0-9_-]+)?$",
    r"\.(sqlite3?|db|log|tar\.gz|zip|parquet|min\.js|bundle\.js)$",
]
def main() -> None:
    try:
        raw_in = sys.stdin.buffer.read()
        payload = json.loads(raw_in.decode("utf-8", errors="replace")) if raw_in else {}
    except Exception:
        sys.exit(0)
    tool_name = payload.get("tool_name") or ""
    ti = payload.get("tool_input") or {}
    target_path = str(ti.get("file_path") or ti.get("path") or ti.get("pattern") or "")
    bash_cmd = str(ti.get("command") or "")
    if target_path:
        base = target_path.replace("\\", "/").split("/")[-1].lower()
        if base not in ALLOWED_NAMES:
            for pat in FORBIDDEN_PATTERNS:
                if re.search(pat, target_path, re.IGNORECASE):
                    sys.stderr.write(f"[SECURITY_GUARD] Access denied to '{target_path}'. Skip it and inspect src/ only.\n")
                    sys.exit(2)
    if tool_name == "Bash" and bash_cmd:
        if re.search(r"\b(grep|find|rg|cat)\b", bash_cmd, re.IGNORECASE) and re.search(r"(node_modules|\.git|dist|\.env)", bash_cmd, re.IGNORECASE):
            if not re.search(r"(--exclude|--prune|--ignore|--glob=!|\.env\.example)", bash_cmd, re.IGNORECASE):
                sys.stderr.write("[TOKEN_GUARD] Add --exclude-dir=node_modules or target src/ directly.\n")
                sys.exit(2)
    sys.exit(0)
if __name__ == "__main__":
    main()

【2026年実機検証】手元の環境で「.claudeignore素通り」とトークン浪費リスクを10秒で診断する手順は?

Windows 11実機のPowerShell 7とエクスプローラーで、FileReadとBashの.claudeignoreバイパス監査結果を確認した画面
▲ Windows 11実機のPowerShell 7とエクスプローラーで、FileReadとBashの.claudeignoreバイパス監査結果を確認した画面
Windows 11実機のWindows Terminal(PowerShell 7)で各ツールの.claudeignoreバイパス挙動とPreToolUseフックの遮断速度を計測したフル画面スクリーンショット
▲ Windows 11実機のWindows Terminal(PowerShell 7)で各ツールの.claudeignoreバイパス挙動とPreToolUseフックの遮断速度を計測したフル画面スクリーンショット

現在お使いのプロジェクトで .claudeignore が3重パターンになっているかや、PreToolUse 物理遮断フックが登録されているかは、診断ワンライナーを使えば所要10秒(0トークン)で100%正確に特定できます。見落とされがちな巨大ファイルや機密ファイルの露出リスクがひと目でわかります。

標準ツール仕様(ripgrep (rg) User Guide – Configuration Files)にある通り、

組み込みの検索ツールとシェルコマンドの双方に対して明示的な除外ガードを設けることが不可欠です。

確認する診断項目トークン爆食・漏洩が起きるNG状態本記事の手順適用後の正常状態防衛・トークン削減効果
.claudeignore の記述方式node_modules/(末尾スラッシュ単体のみ)**単体・/*・/ の3重パターン定義Windowsの \ パス境界でもGlob漏れを0%に
PreToolUse フック登録未設定(直接パス指定で .env が読まれる)block_ignored_files.py が Exit Code 2 遮断ファイルを1バイトも読ませず消費0トークンで阻止
Bash grep / find ガード無制限(node_modules 全件走査で数万行出力)--exclude-dir なしの危険コマンドを自動阻止1タスク平均トークンを 94,200 ➔ 9,980 へ削減

まずは下の3ステップで、現在のプロジェクトの .claudeignore とフック設定を10秒で診断してみましょう。

  1. Windows Terminal(PowerShell 7)で対象プロジェクトのフォルダを開きます。
  2. 下の黒い枠にある「.claudeignore & PreToolUse フック設定10秒診断コマンド」をコピーして貼り付け、[Enter]キーを押します。
  3. 上の実機画面(ign-jikki-01.png)のようにフックが未設定だったり、3重パターンになっていない場合は、すぐ次の章の3ステップ手順で完全防護を組み込みましょう!
# 【コピペOK】カレントフォルダの .claudeignore 有無と ~/.claude/settings.json の PreToolUse 登録状態を10秒で診断するコマンド
Write-Host "1. .claudeignore exists:" (Test-Path ".claudeignore") ; Write-Host "2. Hook script exists:" (Test-Path "$HOME\.claude\hooks\block_ignored_files.py") ; if (Test-Path "$HOME\.claude\settings.json") { Select-String -Path "$HOME\.claude\settings.json" -Pattern "PreToolUse|block_ignored_files" }

【3分で完了】3重パターン.claudeignoreとPreToolUseフックでトークン爆食を0%にする3ステップは?

Claude Code .claudeignore完全除外&トークン防衛3ステップ手順図解
▲ Claude Code .claudeignore完全除外&トークン防衛3ステップ手順図解

トークン爆食と漏洩を防ぐ手順は、①3重.claudeignore配置、②block_ignored_files.py作成、③PreToolUse登録の合計3分(追加コスト0円)で100%完了します。実機でも1タスクの消費トークンが89.4%削減されました。

それでは、実際の画面とコードに沿って順番に進めましょう。

ステップ1:Windows/Mac両対応の「3重パターン .claudeignore」をプロジェクトルートに配置する(所要1分)

最初に、Windowsのパス区切り(\)によるマッチ漏れ(Issue #16704)を防ぐ「3重パターン .claudeignore」を配置します。

ひな形ファイル(!.env.example)だけは安全に許可する設計になっています。

Windows 11実機のエクスプローラーとPowerShellで、3重パターン.claudeignoreとPreToolUse遮断スクリプトの構成を確認した画面
▲ Windows 11実機のエクスプローラーとPowerShellで、3重パターン.claudeignoreとPreToolUse遮断スクリプトの構成を確認した画面
Windows 11実機のエクスプローラーで.claudeignore・block_ignored_files.py・settings.jsonの一式を確認したフル画面スクリーンショット
▲ Windows 11実機のエクスプローラーで.claudeignore・block_ignored_files.py・settings.jsonの一式を確認したフル画面スクリーンショット
  1. プロジェクトのルートフォルダ(package.json や .git がある階層)を開きます。
  2. 下の黒い枠にある「完全防護 3重パターン .claudeignore テンプレート」をコピーし、.claudeignore というファイル名(UTF-8)で保存します。
  3. node_modules・node_modules/**・**/node_modules/** の3重表記にしておくことで、モノレポのサブパッケージ配下でも漏れなく一覧除外が効くようになります!
# .claudeignore(Windows/Mac両対応・3重パターン完全除外テンプレート)
# 1. 巨大依存関係・仮想環境(3重パターン)
node_modules
node_modules/**
**/node_modules/**
.venv
.venv/**
**/.venv/**
venv/**
vendor/**
target/**

# 2. ビルド成果物・キャッシュ(25,000トークン超過エラー防止)
dist
dist/**
**/dist/**
build
build/**
.next
.next/**
**/.next/**
out/**
coverage/**
*.tsbuildinfo
*.min.js
*.bundle.js

# 3. バージョン管理・OSメタデータ
.git
.git/**
**/.git/**
.DS_Store
Thumbs.db

# 4. 機密情報・クレデンシャル(ひな形のみ許可)
.env
.env.*
!.env.example
!.env.sample
*.pem
*.key
*.p12
id_rsa*
credentials.json

# 5. 大容量バイナリ・DB・アーカイブ
*.log
*.sqlite
*.sqlite3
*.db
*.zip
*.tar.gz
*.parquet

ステップ2:直接パス指定と無差別grepを物理阻止する ~/.claude/hooks/block_ignored_files.py を作成する(所要1分)

次に、Claudeが Read で直接パスを指定したり、Bash で除外フラグなしの grep -r を実行しようとした瞬間に、

実行前の PreToolUse フックでインターセプトし sys.exit(2) で物理遮断するPythonスクリプトを作成します。

Windows 11実機のPowerShellで~/.claude/settings.jsonのPreToolUse設定とExit Code 2による遮断ログを確認した画面
▲ Windows 11実機のPowerShellで~/.claude/settings.jsonのPreToolUse設定とExit Code 2による遮断ログを確認した画面
Windows 11実機でBashの無差別grepコマンドをTOKEN_GUARDでインターセプトし除外フラグ付きへ誘導する仕組みを確認した画面
▲ Windows 11実機でBashの無差別grepコマンドをTOKEN_GUARDでインターセプトし除外フラグ付きへ誘導する仕組みを確認した画面
インターセプト対象のツールblock_ignored_files.py の検査内容違反検出時の動作(Exit Code 2)
Read / FileRead / Grep / Globfile_path または path に node_modules・dist・.env 等が含まれるか正規表現検査◎ ファイルを開く前に即中断(消費 0 token)
Bash(grep / find / rg / cat)--exclude-dir なしで保護対象やルート全体を無差別走査していないか検査◎ 実行前に中断し --exclude-dir=node_modules の付与を指示
許可パス(.env.example / src/)ホワイトリスト判定により通常のソースコードや .env.example は0.03秒で通過◎ sys.exit(0) でそのまま高速実行
  1. PowerShellで New-Item -ItemType Directory -Path "$HOME\.claude\hooks" -Force を実行してフック用フォルダを作成します。
  2. 下の黒い枠にある「block_ignored_files.py 完全コード」をコピーし、C:\Users\<ユーザー名>\.claude\hooks\block_ignored_files.py としてUTF-8で保存します(ページ上部の生成ツールから1クリックでダウンロードもできます)。
  3. これで全リポジトリ共通の物理ガードスクリプトが準備できました!
# ~/.claude/hooks/block_ignored_files.py(PreToolUse 物理遮断&無差別grep防止スクリプト)
import json, re, sys

ALLOWED_NAMES = {".env.example", ".env.sample", ".env.template"}
FORBIDDEN_PATTERNS = [
    r"(^|/|\\)node_modules(/|\\|$)",
    r"(^|/|\\)(dist|build|\.next|\.nuxt|\.venv|venv|target)(/|\\|$)",
    r"(^|/|\\)\.git(/|\\|$)",
    r"(^|/|\\)\.env(\.[a-zA-Z0-9_-]+)?$",
    r"\.(sqlite3?|db|log|tar\.gz|zip|parquet|min\.js|bundle\.js)$",
]

def main() -> None:
    try:
        raw_in = sys.stdin.buffer.read()
        payload = json.loads(raw_in.decode("utf-8", errors="replace")) if raw_in else {}
    except Exception:
        sys.exit(0)
    tool_name = payload.get("tool_name") or ""
    ti = payload.get("tool_input") or {}
    target_path = str(ti.get("file_path") or ti.get("path") or ti.get("pattern") or "")
    bash_cmd = str(ti.get("command") or "")

    if target_path:
        base = target_path.replace("\\", "/").split("/")[-1].lower()
        if base not in ALLOWED_NAMES:
            for pat in FORBIDDEN_PATTERNS:
                if re.search(pat, target_path, re.IGNORECASE):
                    sys.stderr.write(
                        f"[SECURITY_GUARD] Access denied to '{target_path}' (protected by .claudeignore).\n"
                        "ACTION: Skip this file/directory immediately and inspect only project source files (e.g. src/).\n"
                    )
                    sys.exit(2)

    if tool_name == "Bash" and bash_cmd:
        if re.search(r"\b(grep|find|rg|cat|type|Get-Content|Select-String)\b", bash_cmd, re.IGNORECASE):
            if re.search(r"(^|\s|/|--)(node_modules|\.git|dist|\.next|\.env)(\s|/|$|\"|\')", bash_cmd, re.IGNORECASE):
                if not re.search(r"(--exclude|--prune|--ignore|--glob=!|\.env\.example)", bash_cmd, re.IGNORECASE):
                    sys.stderr.write(
                        f"[TOKEN_GUARD] Blocked unsafe command targeting ignored path: {bash_cmd}\n"
                        "ACTION: Add '--exclude-dir=node_modules --exclude-dir=.git' or target 'src/' directly.\n"
                    )
                    sys.exit(2)
    sys.exit(0)

if __name__ == "__main__":
    main()

ステップ3:~/.claude/settings.json の PreToolUse に登録して遮断動作を確認する(所要1分)

最後の仕上げとして、作成したスクリプトを ~/.claude/settings.json の PreToolUse フックに登録します。

Windows 11実機のPowerShellでPreToolUse遮断テストを実行し、.envとnode_modulesへのアクセスが0.03秒で阻止されたことを確認した画面
▲ Windows 11実機のPowerShellでPreToolUse遮断テストを実行し、.envとnode_modulesへのアクセスが0.03秒で阻止されたことを確認した画面
  1. C:\Users\<ユーザー名>\.claude\settings.json を開き、下の「PreToolUse 物理遮断フック設定JSON」を追記して保存します。
  2. 上の画面(ign-jikki-05.png)の通り、万一Claudeが .env や node_modules を読もうとしても、0.03秒で [SECURITY_GUARD] Access denied が返り、1トークンも浪費せずに正規の src/ コードだけを読むようになります!
  3. あわせて PostToolUse フックも併用している場合は、同じ "hooks" オブジェクトの中に並べて記述すれば両方とも同時に稼働します。
# ~/.claude/settings.json(PreToolUse 物理遮断フック登録例)
{
  "env": {
    "PYTHONUTF8": "1",
    "PYTHONIOENCODING": "utf-8"
  },
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Read|FileRead|ReadFile|Grep|Glob|Bash",
        "hooks": [
          {
            "type": "command",
            "command": "python -X utf8 ~/.claude/hooks/block_ignored_files.py"
          }
        ]
      }
    ]
  }
}

一連のバイパス監査から3重 .claudeignore 配置・PreToolUse フック実装・トークン89.4%削減の確認までの流れを順番に確認できる実機操作動画も用意しました。

▲ 【実機操作動画】Claude Codeで.claudeignoreが無視される問題を3重除外定義とPreToolUseフック(Exit Code 2)で完全解決する手順実演

【症状別30秒診断】あなたのClaude Code「トークン爆食・除外漏れ」を最短で防ぐ設定はどれ?

Claude Codeでトークン急増が起きる時の解決ルートは、「.envやnode_modulesを開かれるか」「Bashのgrepで重くなるか」の2項目を30秒で確認すれば0円で100%判断できます。2つの質問に答えるだけで導入すべき設定がひと目でわかります。

Claude Code トークン爆食・.claudeignore 除外漏れ 30秒対策チャート
チェック 1 .claudeignore に書いたにもかかわらず、Claudeが .env や node_modules・dist 配下のファイルを Read ツールで開いてしまいますか?
■ はい(直接パス指定や MaxFileReadTokenExceededError が起きる)
FileReadToolの除外チェック欠落(Issue #36163)が原因です。ステップ1の『3重パターン .claudeignore』を置き、ステップ2・3の『PreToolUse 遮断フック(exit 2)』を登録してください(所要3分)。
□ いいえ(ReadツールではなくBashコマンド実行時に重くなる)
下の「チェック 2」へ進みます。
▼ 「いいえ」の場合は次のチェックへ ▼
チェック 2 Claudeが Bash ツールで grep や find を実行した瞬間に、ターミナル出力が数万行に膨れ上がってトークンを大量消費しますか?
■ はい(Bashの無差別検索でコンテキストが溢れる)
ステップ2の『block_ignored_files.py』の Bash ガード節を有効にし、マッチャーに『Bash』を含めてください。除外フラグのない危険検索を自動阻止し『–exclude-dir=node_modules』付きへ誘導します。
□ いいえ(.env は隠しつつ .env.example だけ読ませたい)
ステップ1のテンプレート通り『.env』『.env.*』の直後に否定パターン『!.env.example』を記述すれば、機密ファイルだけを遮断してひな形は安全に読ませることができます。
症状別 Claude Code トークン爆食・除外漏れ 30秒対策チャート(案B:2列ツリー図解)
▲ 症状別 Claude Code トークン爆食・除外漏れ 30秒対策チャート(案B:2列ツリー図解)

Claude Codeの「.claudeignore無視・node_modulesトークン爆食問題」に関するよくある質問(FAQ)は?

Claude Codeの除外設定やHooksによるセキュリティ・トークン防衛に関して、開発現場から特に多く寄せられる代表的な疑問3つと所要3分で実装できる100%確実な解決策をまとめました。.env.example の許可方法や終了コードの仕様もすぐ確認できます。

Q1. プロジェクトのルートに .claudeignore を置いているのに、なぜ Claude Code は node_modules や .env を読み込んでしまうのですか?

Claude Codeの .claudeignore はファイル一覧の候補から外す「ソフト除外(サジェスト除外)」として実装されており、FileRead ツールで直接ファイルパスを指定した場合や、Bash ツールで grep・find を実行した場合に拒絶チェックが行われない仕様欠陥(GitHub Issue #36163 / #16704)があるためです。

確実にアクセスを禁止するには、本記事のステップ2・3の通り PreToolUse フックで Exit Code 2 を返して物理遮断する必要があります。

Q2. .env ファイルを完全ブロックすると、セットアップに必要な .env.example(ひな形ファイル)まで読めなくなりませんか?

ご安心ください。.env.example はそのまま安全に読み込ませることができます!

本記事の .claudeignore テンプレートには否定パターン !.env.example が含まれており、

また PreToolUse フックスクリプト(block_ignored_files.py)でも ALLOWED_NAMES として .env.example と .env.sample をホワイトリスト許可しているため、機密の .env だけを100%遮断できます。

Q3. PreToolUse フックのスクリプトでエラーを返すとき、exit 1 と exit 2 のどちらを使うべきですか?

必ず sys.exit(2)(終了コード 2)を使用してください。

Claude CodeのHooks仕様において、終了コード 1 は「非ブロッキング警告」として扱われツール実行が続行されてしまう場合があります。

終了コード 2 を返すとツール実行が直前で強制中断され、標準エラー出力(stderr)のメッセージがClaudeへ返されて別ルートでの探索へ誘導できます。

📬 新着記事をメールでお届けします

記事公開時にメールでお知らせします。週数本・無料・いつでも 1 クリックで解除できます。

uri uri

uri uriと申します。生成AI専門ブログ「生成AIニスト」運営者。 ChatGPT・Gemini・Claudeなど主要な生成AIを自分で契約し、毎日実際に触って検証しています。記事の手順やエラー対処は、必ず自分の画面で再現し、実機のスクリーンショットで確かめてから公開。料金や仕様は提供元の公式情報で裏取りし、いつ時点の情報かを明記します。「読んだ人が同じ画面で再現できること」を基準に書いています。