Claude Codeはターミナル上で動作するAIコーディングアシスタントです。ファイルの読み書き、コマンドの実行、外部サービスとの連携など、開発者と同じ権限で操作できるため、非常に強力ですが、その分セキュリティに対する正しい理解が不可欠です。
本記事では、Claude Codeを安全に使いこなすために知っておくべきデータの取り扱い、パーミッション設定、そして実践的なセキュリティ対策について解説します。
[目次を開く]
データの取り扱い:コードはどこに送られるのか?
データの流れ
Claude Codeを使用すると、以下のデータがAnthropicのサーバーに送信されます。
- Claudeが読み込んだファイルの内容
- ユーザーのプロンプト(指示内容)
- Claudeのレスポンス
- 会話のコンテキスト
つまり、Claude Codeに読ませたコードはローカル環境を離れ、Anthropicのクラウドで処理されるということを理解しておく必要があります。
モデルトレーニングへの利用
「自分のコードがAIの学習に使われるのか?」というのは多くの開発者が気になるポイントでしょう。結論から言うと、プランによって異なります。
Consumer(Free / Pro / Max)プランの場合:
ユーザーが「Claudeの改善に協力する」設定をオンにしている場合、チャットやコーディングセッションがモデルの改善に使用される可能性があります。トレーニングを望まない場合は、アカウント設定から「Claudeの改善にご協力ください」(Help improve Claude)をオフにしましょう。オフにした場合のデータ保持期間は通常30日間です。
Enterprise / APIプランの場合:
デフォルトでモデルトレーニングには使用されません。API経由での利用はデータ処理の条件が異なり、より厳格なプライバシー保護が適用されます。また、Enterpriseプランではゼロデータリテンション(ZDR)契約も利用可能です。
機密情報を扱う際の原則
Claude Codeに渡すデータについては、以下の原則を守ることをおすすめします。
- 本番のAPIキーやシークレットは絶対に含めない:
.envファイルや認証情報はプレースホルダーで代替 - 顧客の個人情報を含めない:データ構造を確認する際はサンプルデータを使用
- NDA対象のコードに注意:第三者AIサービスへの共有が契約違反になる可能性
- 独自のアルゴリズムやビジネスロジック:核心的な競争優位に関わる部分は慣重に判断
パーミッションシステムの基本
デフォルトの動作
Claude Codeはデフォルトで読み取り専用の権限で動作します。ファイルの編集、テストの実行、bashコマンドの実行など、読み取り以外の操作にはユーザーの明示的な許可が必要です。
また、Claude Codeは起動したディレクトリとそのサブフォルダー内のみ書き込み可能です。親ディレクトリのファイルを変更することはできません。
3つのパーミッションルール
Claude Codeのパーミッションは、settings.jsonのpermissionsオブジェクトで設定します。ルールは以下の3種類です。
allow(許可):確認なしで自動実行されます。安全であることが確実なコマンドのみを追加します。
ask(確認):実行前にユーザーに確認プロンプトが表示されます。リスクのある操作に使います。
deny(拒否):完全にブロックされます。機密ファイルへのアクセスや危険なコマンドを防ぎます。
ルールの評価順序は deny → ask → allow で、denyが常に最優先されます。
実践的な設定例
{
"permissions": {
"allow": [
"Bash(npm run lint)",
"Bash(npm run test:*)",
"Bash(git status)",
"Bash(git diff:*)"
],
"deny": [
"Read(**/.env)",
"Read(**/*.key)",
"Read(**/secrets/**)",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(sudo:*)",
"Bash(rm -rf:*)"
],
"ask": [
"Bash(git push:*)",
"Bash(docker run:*)"
]
}
} この例では、lintやテストの実行は自動承認、.envファイルやネットワークコマンドは完全ブロック、git pushやDockerの実行は都度確認というバランスの設定になっています。
settings.jsonの階層構造
設定ファイルの優先順位
Claude Codeは複数の設定ファイルを階層的に読み込みます。上位の設定が下位をオーバーライドします。
1. Enterprise管理ポリシー(最高優先)
managed-settings.jsonファイルで、組織全体のポリシーを強制します。個人やプロジェクトの設定ではオーバーライドできません。
配置場所は以下のとおりです。
- macOS:
/Library/Application Support/ClaudeCode/managed-settings.json - Linux / WSL:
/etc/claude-code/managed-settings.json - Windows:
C:\Program Files\ClaudeCode\managed-settings.json
2. ユーザーグローバル設定
~/.claude/settings.jsonに配置します。すべてのプロジェクトに適用される個人用のデフォルト設定です。
3. プロジェクト設定
.claude/settings.jsonに配置します。Gitにコミットしてチームで共有できます。
4. プロジェクトローカル設定(最低優先)
.claude/settings.local.jsonに配置します。.gitignoreに含め、個人用のカスタマイズに使います。
チーム開発での推奨構成
チームで使う場合は、プロジェクト設定(.claude/settings.json)に共通ルールを定義し、個人の変更はローカル設定(.claude/settings.local.json)で行う構成がおすすめです。
主要なツールのパーミッション制御
パーミッション制御が可能なツール一覧
Claude Codeには複数のツールがあり、それぞれパーミッション制御が可能です。
| ツール名 | 概要 | パターン指定 |
|---|---|---|
| Bash | シェルコマンドの実行 | Bash(git *), Bash(npm run test:*) |
| Read | ファイルの読み取り | Read(**/.env), Read(**/secrets/**) |
| Edit | ファイルの編集 | Edit(**/*.config.js) |
| WebFetch | 外部へのHTTPSリクエスト | WebFetch(domain:github.com) |
| WebSearch | Web検索 | 引数なし |
| Task | サブエージェント | Task(my-custom-agent) |
ReadとEditのパターンはgitignore仕様に従います。**/.envのようにワイルドカードを活用して柔軟に指定できます。
パーミッションモード
Claude Codeには複数のパーミッションモードがあり、セッション中にShift+Tabで切り替え可能です。
- default:各ツールの初回使用時に確認プロンプトを表示
- acceptEdits:ファイル編集は自動承認、bashコマンドは確認
- plan:コードの分析と計画策定のみ。ファイル変更やコマンド実行は不可
- bypassPermissions:すべての確認をスキップ。安全なコンテナ環境以外では絶対に使わないでください
セキュリティの守り方:実践編
ネットワークアクセスの制御
Claude CodeはデフォルトでcurlやwgetなどのWebからコンテンツを取得するコマンドをブロックリストに登録しています。しかし、Bashツールが許可されていれば、他の方法でネットワークアクセスが可能な場合があります。
より安全なアプローチとして、WebFetchツールで特定のドメインのみ許可する方法があります。
{
"permissions": {
"allow": [
"WebFetch(domain:github.com)",
"WebFetch(domain:docs.anthropic.com)"
],
"deny": [
"Bash(curl:*)",
"Bash(wget:*)"
]
}
} サンドボックスの活用
Claude Codeにはサンドボックス機能があり、/sandboxコマンドで有効化できます。ファイルシステムとネットワークの分離により、パーミッションプロンプトを大幅に削減しながらセキュリティを維持できます。
MCPサーバーのセキュリティ
MCP(Model Context Protocol)サーバーを通じて外部ツールと連携する際は、以下の点に注意が必要です。
- 信頼できるソースのみ使用する:AnthropicはサードパーティのMCPサーバーを監査していません
- 初回接続時に信頼確認が必要:新しいMCPサーバーの接続時には検証が求められます
- パーミッション設定が可能:ツールごとにアクセス制御を設定できます
実際のインシデントから学ぶ
npmサプライチェーン攻撃の事例
2025年8月、人気のnpmパッケージ「nx」が悪意のあるバージョンに置き換えられる事件が発生しました。この悪意のあるパッケージはpostinstallスクリプトを通じて、Claude CodeなどのAIコーディングツールに「ファイルシステムをスキャンして設定ファイルを探せ」という指示を送り込み、収集したデータを外部に送信しようとするものでした。
この事例からわかるように、.envファイルの読み取りをdeny設定でブロックしておくことは、このような攻撃に対する重要な防御策となります。
過去の脆弱性
Claude Codeには過去にいくつかのセキュリティ上の問題が報告されています。いずれも対応済みですが、こうした事例から学べることがあります。
- シンボリックリンクを使ったdenyルールのバイパス(v1.0.119以前)
- 確認プロンプトのバイパス(v1.0.105以前)
- コマンドパーサーのバイパス(v1.0.20以前)
これらの教訓は、常に最新バージョンにアップデートすることの重要性を示しています。
Hooksによるセキュリティ強化
Claude Codeの標準のパーミッション設定だけでは対応しきれないケースもあります。そのような場合に役立つのがHooks(フック)です。
Hooksは、Claude Codeがツールを実行する前後にカスタムのシェルスクリプトを実行する仕組みです。PreToolUseフックを使えば、ツール実行前に独自の検証ロジックを実行し、許可または拒否を判断できます。
たとえば、正規表現ベースでより細かいコマンド制御を行ったり、実行された操作のログを記録したりといった、パーミッションシステムを拡張する使い方が可能です。
セキュリティベストプラクティスまとめ
最後に、Claude Codeを安全に運用するためのベストプラクティスをまとめます。
データ保護
-
.env、秘密鍵、認証情報はdenyでブロックする - トレーニングデータとしての利用を望まない場合は「Help improve Claude」をオフにする
- 機密性の高いコードはそもそもClaude Codeに渡さないことも検討
パーミッション設定
- denyルールを最初に設計し、ブロックすべきものを明確にする
- allowには安全が確実なコマンドのみを追加
- リスクのある操作はaskに設定して目視確認を組み込む
運用
- Claude Codeを常に最新バージョンに保つ
- AIの提案をそのまま受け入れず、人間の目でレビューする
- チームで使う場合は
.claude/settings.jsonで共通ポリシーを定義する -
/security-reviewコマンドを補助的に活用する(ただし過信は禁物)
まとめ
Claude Codeは非常に強力な開発ツールですが、その強力さはそのままリスクにもなり得ます。「優秀だけれど信頼できないインターン」というたとえがよく使われますが、まさにその通りで、すばらしい成果物を生み出しつつも、必ず人間の目で確認するという姿勢が大切です。
まずはsettings.jsonのパーミッション設定を見直すところから始めてみてください。小さな設定からでも、日々の開発の安全性を大きく向上させることができます。

