非エンジニアでも安心!Claude Code を安全に使うための 2 つの設定ファイル

Claude Code は強力なツールですが、ファイルの削除やシステムコマンドの実行など、意図しない操作が起きる可能性もあります。@tetumemo さんのポスト では、非エンジニアが Claude Code を安全に使うために設定すべき 2 つのファイルが紹介されています。

「包丁」に例えると、settings.local.json は安全カバー(物理的に危険な操作を防ぐ)、CLAUDE.md は『危ないから気をつけて』という声かけ(AI に判断基準を与える)。両方揃って初めて安全性が確保されるという、分かりやすい整理です。

1. settings.local.json — 「仕組みとして」操作を制限する

settings.local.json とは

Claude Code の権限設定ファイルです。AI がどのコマンドを実行でき、どのコマンドを実行できないかを JSON で定義します。

設定ファイルは .claude/settings.local.json に配置します。.local が付くファイルは自動的に .gitignore に追加されるため、個人の設定がチームに影響しません

基本構造

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "permissions": {
    "allow": [
      "許可するコマンドやツール"
    ],
    "deny": [
      "禁止するコマンドやツール"
    ]
  }
}

非エンジニア向け推奨設定

@tetumemo さんが紹介しているのは、以下のような設定方針です。

許可リスト(allow) — 安全な操作のみ許可:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "permissions": {
    "allow": [
      "Bash(mkdir *)",
      "Bash(mv *)",
      "Bash(cp *)",
      "Bash(node --version)",
      "Bash(npm --version)",
      "Bash(python --version)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(ls *)",
      "Bash(cat *)",
      "Bash(pwd)"
    ],
    "deny": [
      "Bash(rm *)",
      "Bash(rm -rf *)",
      "Bash(rm -r *)",
      "Bash(rmdir *)",
      "Bash(del *)",
      "Bash(unlink *)"
    ]
  }
}

禁止リスト(deny) — ファイル削除系コマンドを全面禁止:

  • rmrm -rfrm -r — ファイル/ディレクトリの削除
  • rmdir — ディレクトリの削除
  • delunlink — ファイルの削除

権限ルールの評価順序

Claude Code は権限ルールを以下の順序で評価します:

  1. deny(拒否)ルールを最初にチェック — マッチすれば即座にブロック
  2. allow(許可)ルールをチェック — マッチすれば確認なしで実行
  3. ask(確認)ルールをチェック — マッチすればユーザーに確認を求める
  4. どれにもマッチしなければ、ユーザーに確認を求める

つまり、deny は最強です。allow で許可していても、deny に該当すればブロックされます。

パターンマッチングの書き方

ルール形式: Tool(パターン)
ルール効果
Bash全ての Bash コマンドに一致
Bash(npm run *)npm run で始まるコマンドに一致
Bash(rm *)rm で始まるコマンドに一致
Read(./.env).env ファイルの読み取りに一致
Read(./secrets/**)secrets ディレクトリ以下の全ファイルに一致

* はワイルドカードとして機能し、任意の文字列にマッチします。

2. CLAUDE.md — 「文章で」ルールと理由を伝える

CLAUDE.md とは

Claude Code がセッション開始時に必ず読み込むルールファイルです。AI に対して「何をすべきか」「何を避けるべきか」を自然言語で伝えます。

@tetumemo さんの推奨内容

ポストでは、以下の 3 カテゴリのルールが紹介されています:

運用ルール

1
2
3
4
# 運用ルール
- 日本語で応答すること
- 分かりやすさを重視すること
- 専門用語には必ず説明を添えること

作業スタイル

1
2
3
4
# 作業スタイル
- 作業前に計画を立てて提示すること
- 作業後に結果を振り返り、改善点を提案すること
- 不明点があれば必ず確認を取ること

安全ルール

1
2
3
4
5
# 安全ルール
- ファイルを上書きする前に必ず確認を取ること
- ファイルの削除は絶対に行わないこと
- 新しいパッケージを追加する場合は理由を説明すること
- 既存のコードを大幅に変更する前に計画を提示すること

settings.local.json との違い

観点settings.local.jsonCLAUDE.md
制御方法技術的に強制(物理的ブロック)自然言語で指示(AI の判断に委ねる)
柔軟性コマンド単位の厳密な制御文脈に応じた柔軟な判断が可能
回避可能性AI は回避できないAI が「解釈」する余地がある
適用範囲Bash コマンド、ファイル読み書き作業スタイル、コミュニケーション、判断基準全般
比喩包丁の安全カバー「気をつけて」の声かけ

重要: settings.local.json は技術的に操作をブロックしますが、CLAUDE.md は AI への「お願い」です。安全性の観点では settings.local.json が必須で、CLAUDE.md は補完的な役割を果たします。

設定ファイルの階層構造

Claude Code の設定は複数のレベルで管理されます:

スコープ場所影響範囲共有
Managedシステムレベルマシン上の全ユーザーIT が管理
User~/.claude/settings.json全プロジェクト個人のみ
Project.claude/settings.jsonこのリポジトリ全員Git 経由で共有
Local.claude/settings.local.jsonこのリポジトリの自分のみ共有されない

優先順位は Managed > Local > Project > User です。Local 設定は Project 設定を上書きできるため、チームの共通ルールに加えて個人の安全設定を追加できます。

実践的なセットアップ手順

Step 1: settings.local.json を作成

プロジェクトのルートで .claude/ ディレクトリに設定ファイルを作成します:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// .claude/settings.local.json
{
  "permissions": {
    "allow": [
      "Bash(mkdir *)",
      "Bash(cp *)",
      "Bash(mv *)",
      "Bash(ls *)",
      "Bash(pwd)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)"
    ],
    "deny": [
      "Bash(rm *)",
      "Bash(rmdir *)",
      "Bash(del *)",
      "Bash(unlink *)",
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ]
  }
}

Step 2: CLAUDE.md を作成

プロジェクトのルートに CLAUDE.md を配置します:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# プロジェクトルール

## 言語
- 日本語で応答すること

## 安全ルール
- ファイルを上書きする前に必ず確認を取ること
- ファイルの削除は絶対に行わないこと
- 新しいパッケージを追加する場合は理由を説明すること
- 既存のコードを大幅に変更する前に計画を提示すること

## 作業スタイル
- 作業前に計画を立てて提示すること
- 不明点があれば必ず確認を取ること

Step 3: 動作確認

Claude Code を起動し、禁止コマンドを試してみましょう:

> rm test.txt

settings.local.json の deny ルールによりブロックされることを確認できます。

さらに安全にするための追加設定

機密ファイルの保護

環境変数や秘密鍵へのアクセスを禁止します:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Read(**/*.key)",
      "Read(**/*.pem)"
    ]
  }
}

危険なネットワーク操作の制限

1
2
3
4
5
6
7
8
9
{
  "permissions": {
    "deny": [
      "Bash(curl *)",
      "Bash(wget *)",
      "WebFetch"
    ]
  }
}

確認を求める操作(ask)

完全にブロックするほどではないが、確認は必要な操作:

1
2
3
4
5
6
7
8
9
{
  "permissions": {
    "ask": [
      "Bash(git push *)",
      "Bash(git commit *)",
      "Bash(npm install *)"
    ]
  }
}

まとめ

Claude Code を安全に使うための 2 つの設定ファイル:

  • settings.local.json = 物理的な安全装置。危険なコマンドを技術的にブロックする
  • CLAUDE.md = 行動指針。AI に判断基準とルールを自然言語で伝える

@tetumemo さんの「包丁の例え」が示すように、安全カバー(settings.local.json)と声かけ(CLAUDE.md)の両方が揃って初めて安全です。特に非エンジニアの方は、まず settings.local.json で削除系コマンドを禁止するところから始めるのが最も効果的です。

参考