VISUAL NOTE
サイト改善のため、同意した場合だけGoogle AnalyticsとPostHogを読み込みます。拒否しても、学習コンテンツとお問い合わせは利用できます。詳細

Claude Code の Hooks 機能を解説。ファイル保存時の自動lint、危険操作のブロック、Slack通知など、イベント駆動の自動化ワークフローを実例付きで紹介。

Anthropic が公開したハーネス設計の手法を解説。Planner・Generator・Evaluator の3エージェント構成で、数時間の自律コーディングを実現する方法。

Claude Code Skills の作成方法と活用事例を解説。カスタムスラッシュコマンドの定義、プロジェクト固有のワークフロー自動化、チームでの共有方法を紹介します。
検証できる成果物を起点に、チームで再現するための導入条件を整理します。
60分・登録不要
Claude Codeを安全に使う要点は、プロンプトで「危険なことをしないで」と頼むことではありません。permissionsで許可を制御し、sandboxでOSレベルの境界を作り、機密情報と外部接続を明示的に遮断することです。
この記事では、2026年8月15日時点のAnthropic公式仕様を基準に、個人開発から法人運用まで使える設定例を解説します。Anthropicの公式記載と、読者が安全なダミー環境で確認できる項目を分け、当サイトが実機で確認していない法人機能は「未検証」として扱います。
permissions.denyとsandboxの適用範囲を更新情報で確認する場合は、権限とsandboxの更新情報も参照してください。
denyを先に設計し、必要最小限だけallowする.env、秘密鍵、顧客データをパス単位で拒否するbypassPermissionsを通常運用で使わない設定だけで100%安全になるわけではありません。コードレビュー、CI、バックアップ、資格情報管理と組み合わせて防御を重ねます。
Claude Codeはファイルを読み、編集し、シェルコマンドや外部ツールを実行できます。守る対象と侵入・誤操作の経路を先に整理します。
| 守る対象 | 主なリスク | 主な対策 |
|---|---|---|
| ソースコード | 意図しない変更・削除 | 権限、Git、レビュー、バックアップ |
.env・秘密鍵 | モデル入力、ログ、外部送信 | Read deny、sandbox、秘密情報管理 |
| 本番環境 | DB更新、デプロイ、障害 | 資格情報分離、ネットワーク制限、承認 |
| 顧客・個人情報 | 契約外の処理、保持 | データ分類、契約確認、入力禁止 |
| 開発端末 | 悪意あるコードや依存関係の実行 | sandbox、最小権限、隔離環境 |
| 外部サービス | MCPやフック経由の情報流出 | 接続先審査、許可リスト、監査 |
攻撃だけでなく、タイプミス、古い手順、誤った推論、悪意あるリポジトリ内の指示も想定します。
managed settingsは、利用者のsettings.jsonより優先される組織ポリシーの仕組みです。ただし、配送経路によって必要な契約・管理権限・確認できる範囲が違います。Enterprise契約がなくてもfile-basedの設定ファイルは読めますが、管理コンソールの動作を再現したことにはなりません。
| 配送経路 | 公式に記載された場所・方法 | このページでの扱い |
|---|---|---|
| server-managed | claude.aiの管理コンソール、またはClaude apps gatewayから認証時に配布 | Team / Enterpriseの管理コンソール、SSO、リモート更新は未検証。契約・アカウント条件は公式資料で確認する |
| MDM・OSポリシー | macOSのcom.anthropic.claudecode、WindowsのHKLM\SOFTWARE\Policies\ClaudeCodeなど | MDM、Registry、端末全体への配布と改変耐性は未検証。管理者権限を持つ端末でのみ確認する |
| file-based | macOS:/Library/Application Support/ClaudeCode/managed-settings.json、Linux / WSL:/etc/claude-code/managed-settings.json、Windows:C:\Program Files\ClaudeCode\managed-settings.json | Enterprise契約なしでも、権限のある使い捨て端末でファイルの読み込みと/status表示を確認できる |
managed settingsの優先順位、配列のマージ、管理設定だけを許可するロックには例外があります。permissionsのdenyが別スコープのallowを上書きすること、sandbox.network.allowManagedDomainsOnlyはmanaged側の許可リストだけを使うことなど、設定キーごとの挙動は公式のSettingsと公式のPermissionsを確認してください。
permissions.disableBypassPermissionsMode、allowManagedPermissionRulesOnly、sandboxの許可リストなどを組織側から設定できます。/statusの設定ソース、deny・sandbox・bypass無効化の期待動作、設定を戻した後の状態を記録できます。これは当サイトが実機で実行した結果ではなく、公式仕様を自環境で再確認するための手順です。実データ、本番資格情報、公開先を含む端末では試さないでください。
claude --version、設定を置いた日時を記録する。既存のmanaged settingsがある端末は対象にしない。github.comへの通信も必須ではないため、ネットワーク確認をしない場合はallowedDomainsを空にしてよい。{
"permissions": {
"disableBypassPermissionsMode": "disable",
"allowManagedPermissionRulesOnly": true,
"deny": ["Read(./.env)", "Read(./secrets/**)"]
},
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false,
"network": {
"allowedDomains": ["github.com"],
"allowManagedDomainsOnly": true,
"strictAllowlist": true
}
}
}/statusで設定ソースを確認し、テストフォルダ内のダミーREADME.md、.env、secrets/だけを対象にする。Read deny、sandboxの利用不能時停止、許可外ドメインの拒否を記録する。bypassモードの無効化を確認する場合も、実データのないフォルダで起動が拒否または制限されることだけを確認し、処理を続けない。/statusでmanaged sourceが消えたこと、ダミーフォルダに想定外の変更がないことを確認し、バックアップを保持する。広いパスへの削除コマンドは使わない。記録には、設定ファイル全文(秘密情報なし)、OSとClaude Codeバージョン、/statusの表示、各操作の期待結果と実測結果、復旧後の状態を含めます。安全な一般設定の確認から始める場合は、安全スターター30分ラボを使い、設定ファイルの意味はsettings.json用語集で確認してください。
Claude Codeの権限ルールは、deny → ask → allowの順に評価されます。広いdenyに狭いallowで例外を作ることはできません。
個人・小規模チーム向けの出発点は次の形です。
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run lint)",
"Bash(npm run test *)",
"Bash(git status)",
"Bash(git diff *)"
],
"ask": [
"Bash(git commit *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(./credentials/**)",
"Bash(git push *)"
],
"disableBypassPermissionsMode": "disable"
}
}プロジェクトで共有する設定は.claude/settings.jsonへ置きます。個人だけの許可は.claude/settings.local.jsonへ保存されることがあります。/permissionsを実行すると、現在のルールと設定元を確認できます。
次のようなルールは、意図した範囲を超えやすいため注意が必要です。
{
"permissions": {
"allow": ["Bash(npm *)", "Bash(git *)"]
}
}npm *には依存パッケージの追加やスクリプト実行が、git *にはpushや履歴変更が含まれます。日常的に確認なしで実行したい具体的なコマンドだけを登録します。
CLAUDE.mdに禁止事項を書くことは有効ですが、これはモデルの行動を誘導する指示です。公式ドキュメントでも、権限を強制するのはpermissions、permission mode、hookなどであり、プロンプトではないと説明されています。
## セキュリティルール
- 本番環境へ接続しない
- 秘密情報を表示・記録・コミットしない
- データ削除と外部送信は事前に確認するこの記述に加え、同じ内容を強制設定で実装します。
.gitignoreはGitの追跡対象を制御するファイルであり、Claude Codeの読み取りを禁止する境界ではありません。また、Claude Codeの公式な機密ファイル除外機能として.claudeignoreへ依存すべきではありません。
パスの拒否はpermissions.denyへ書きます。
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./**/*.pem)",
"Read(./**/*.key)",
"Read(./secrets/**)",
"Read(~/Documents/customer-data/**)"
]
}
}Readの拒否は、同じパスへのEdit・Writeも止めます。ただし、PythonやNode.jsなどの任意プロセスが内部でファイルを読むケースまで完全には防ぎません。すべてのサブプロセスに強制するにはsandboxのファイルシステム制限を使います。
.env.exampleにはダミー値だけを書くシークレットスキャンとコミット前チェックも併用します。
permissionsはClaude Codeが行うツール呼び出しを制御します。sandboxは、Bashから起動されるスクリプトやサブプロセスをOSレベルで制限します。役割が異なるため、両方を使います。
組織でsandboxを必須にする設定例です。
{
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false
}
}| 設定 | 効果 |
|---|---|
enabled | Bashをsandbox内で実行する |
failIfUnavailable | sandboxを開始できなければ実行を止める |
allowUnsandboxedCommands: false | sandbox外での再試行を許可しない |
failIfUnavailableを設定しない場合、依存関係不足や未対応環境で警告後にsandboxなしで実行される可能性があります。安全要件として必須ならtrueにします。
| 環境 | 組み込みsandbox |
|---|---|
| macOS | 対応 |
| Linux | 対応。bubblewrapとsocatが必要 |
| WSL2 | 対応 |
| Windowsネイティブ | 非対応 |
Windows端末で同等の隔離が必要なら、WSL2、開発コンテナ、VMなどを選びます。
外部通信を制御する際、Bash(curl ...)の文字列パターンだけでは、オプション順、リダイレクト、変数、別コマンドなどを網羅できません。sandboxのネットワーク許可リストを使うほうが堅牢です。
{
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false,
"network": {
"allowedDomains": [
"github.com",
"api.github.com",
"registry.npmjs.org"
],
"strictAllowlist": true
}
}
}strictAllowlistを有効にすると、許可リスト外のホストは追加承認を促すのではなく拒否されます。組織ではmanaged settingsのsandbox.network.allowManagedDomainsOnlyも検討し、利用者側の設定で接続先を広げられないようにします。
注意点として、sandboxのドメイン設定はsandbox内のコマンドに適用されます。WebFetchなどのプロセス内ツールは、それぞれのpermissionルールも設定してください。
--dangerously-skip-permissionsは、bypassPermissionsモードで権限確認を省略するためのフラグです。ファイル変更やシェル実行の多くが、利用者の確認なしに進みます。
claude --dangerously-skip-permissions日常の開発端末、本番資格情報がある端末、重要な未コミット変更がある環境では使わないでください。無人実行で必要な場合も、使い捨てのコンテナやVM、最小権限の資格情報、ネットワーク制限、バックアップを用意します。
組織ではmanaged settingsへ次を設定し、利用者が危険モードへ切り替えられないようにします。
{
"permissions": {
"disableBypassPermissionsMode": "disable"
}
}まずはdefaultまたはdontAskモードと個別のallowルールで自動化できないか検討します。フラグの詳細は用語集を参照してください。
Claude Code本体の設定が安全でも、MCPサーバー、プラグイン、フックが広い権限を持てば境界は広がります。
プロジェクト内の設定やフックは、信頼していないリポジトリでは実行しないでください。workspace trustを確認し、差分レビュー後に有効化します。
法人ではmanaged settingsを使い、承認済みMCPサーバー、マーケットプレイス、フックだけを許可します。詳しい導入設計は
にまとめています。
Claude Codeが扱うデータの条件は、利用プランと契約で確認します。Anthropic公式では、Team、Enterprise、APIなどCommercial Terms配下のデータは、顧客が明示的にオプトインしない限り生成モデルの学習に利用しないと説明しています。
一方、次の点は別々に確認が必要です。
| 確認対象 | 例 |
|---|---|
| サーバー側の保持 | 標準保持期間、Zero Data Retentionの適用 |
| モデル改善への利用 | 契約、組織設定、利用プラン |
| ローカル履歴 | ~/.claude/projects/の会話記録 |
| 監視データ | OpenTelemetryへ出す属性・イベント |
| 任意フィードバック | 送信時に共有される会話・診断情報 |
ローカルのセッション記録は既定で30日後にクリーンアップされ、cleanupPeriodDaysで調整できます。端末の暗号化、アカウント分離、退職時の消去も運用に含めます。
{
"cleanupPeriodDays": 14
}最新条件はClaude Code公式のデータ利用ページと自社の契約書面を確認してください。
最初は次の状態を目指します。
defaultモードを使うRead denyへ登録するgit pushと破壊的操作を自動許可しないgit statusとバックアップを確認する設定例です。
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run lint)",
"Bash(npm run test *)",
"Bash(git status)",
"Bash(git diff *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Bash(git push *)"
],
"disableBypassPermissionsMode": "disable"
},
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false
}
}環境によって必要なコマンドと接続先は異なります。コピー後、そのまま広い権限を足すのではなく、拒否ログと承認プロンプトを見て最小限ずつ調整してください。
disableBypassPermissionsModeを強制した秘密情報の表示、誤コミット、意図しない外部送信が疑われる場合は、原因調査より先に被害拡大を止めます。
履歴を消す前に、組織のインシデント対応手順に従って証跡を保全してください。
Claude Codeの安全性は、単一の設定ではなく次の組み合わせで作ります。
まず機密ファイルと本番資格情報を分離し、denyとsandboxを設定してから便利なallowを増やしてください。