Claude Code は、Bash コマンド・フック・stdio MCP サーバーといった自分が起動するサブプロセスに対して、環境変数から認証情報を取り除く機能を持ちます。制御する環境変数が CLAUDE_CODE_SUBPROCESS_ENV_SCRUB です。本稿は 2026-10-09 時点の公式ドキュメント(env-vars ページ)で逐語照合済みの事実のみをまとめます。[1]
有効化と適用範囲
CLAUDE_CODE_SUBPROCESS_ENV_SCRUB を 1 に設定すると、Claude Code は自身が起動するサブプロセス(Bash コマンド、フック、stdio MCP サーバーなど)の環境から認証情報を除去します。[1] この除去の目的は、プロンプトインジェクション攻撃が読み取れる情報を減らすことにあります。[1]
スクラブが適用されるのはサブプロセスの環境に限られます。Claude Code プロセス自体は、自身の API コールのために認証情報を保持し続けます。[1] したがって、スクラブを有効にしても Claude Code 本体の動作は変わりません。
スクラブは認証情報を認識する手段として、変数名またはその値の形状を用います。このため、唯一の制御手段としてではなく、狭い権限ルールと組み合わせた多層防御の一つとして使用することが推奨されています。[1]
スクラブの判定ロジックと変数ごとの扱い
スクラブは「変数名が認証情報に見えるか」「値が認証情報に見えるか」で挙動を決めます。2026-10-09 時点の対応表では、次のように整理されています。[1]
- ANTHROPIC_API_KEY、AWS_SECRET_ACCESS_KEY は削除されます。[1]
- NPM_TOKEN、DB_PASSWORD は、変数名が認証情報に見えるという理由で削除されます。[1]
- パスワードを含む DATABASE_URL は、値が認証情報に見えるという理由で削除されます。[1]
- パスワードを含む PIP_INDEX_URL や NPM_CONFIG_REGISTRY は、URL 自体は保持したうえで、ユーザー名とパスワード部分のみが除去されます。[1]
- GITHUB_TOKEN、GH_TOKEN、GH_ENTERPRISE_TOKEN、GITHUB_ENTERPRISE_TOKEN は残されます。gh コマンドや GitHub API を呼び出すスクリプトが引き続き機能するためです。[1]
- HTTP_PROXY、HTTPS_PROXY は、URL 内のユーザー名とパスワードも含めて残されます。[1]
- GIT_CONFIG_COUNT、GIT_CONFIG_KEY_、GIT_CONFIG_VALUE_ は、値の内容に関わらず残されます。[1]
- 変数名も値も認証情報に見えない秘密情報は残されます。[1]
PIP_INDEX_URL などは資格情報部分だけを切り落とす一方で、HTTP_PROXY は資格情報を含めて残します。これはプロキシ接続の動作維持を優先した例外的な扱いです。[1]
Linux の PID ネームスペース分離
Linux 環境では、スクラブは Bash サブプロセスを独立した PID ネームスペース内で実行します。これにより、サブプロセスが /proc 経由でホストプロセスの環境を読み取ることも防ぎます。[1]
On Linux, the scrub also runs Bash subprocesses in an isolated PID namespace
要するに、環境変数そのものを消すだけでなく、他プロセスの環境を覗き見る経路も Linux では塞ぐということです。この分離には副作用があり、ps・pgrep・kill がホストプロセスを参照したりシグナルを送ったりできなくなります。[1]
バージョンによる挙動の違い
v2.1.251 より前のバージョンでは、スクラブは ANTHROPIC_API_KEY と AWS_SECRET_ACCESS_KEY のみを削除し、対応表に挙げられている他の例示変数は変更しませんでした。[1] 現在の変数名・値ベースの広い判定は、それ以降のバージョンの挙動です。
関連する設定と自動化
claude-code-action は、allowed_non_write_users が設定されている場合に CLAUDE_CODE_SUBPROCESS_ENV_SCRUB を自動的に設定します。[1]
また、CLAUDE_CODE_SCRIPT_CAPS は、CLAUDE_CODE_SUBPROCESS_ENV_SCRUB が設定されている場合に、特定スクリプトのセッションあたり呼び出し回数を上限設定する JSON オブジェクトです。[1]
GitHub トークンとサンドボックス
前述のとおり、スクラブはデフォルトで GITHUB_TOKEN を残します。[1] GitHub Actions のジョブには、必要最小限の権限だけを与えるのが前提です。そのうえで、サンドボックス化された Bash コマンドから GitHub トークンを除去したい場合は、sandbox.credentials の下に deny エントリを追加します。[1]