実行モードと権限管理
実行モードとは
Claude Code には、作業を進めるときの権限レベルを決める「実行モード」があります。どのくらい自動で作業を進めてよいかを制御する仕組みです。
たとえるなら、アシスタントへの信頼度に応じた指示の出し方です:
- 「毎回確認してね」→ 通常モード
- 「ファイル操作は自分でやっていいよ」→ オートアクセプトモード
- 「まず計画を見せてね」→ プランモード
3 つの実行モード
通常モード(デフォルト)
Claude Code を普通に起動したときのモードです。ファイルの編集やコマンドの実行のたびに、許可を求めてきます。
こんな人におすすめ:
- Claude Code を使い始めたばかりの方
- 何が行われるか一つ一つ確認したい方
- 大切なファイルを扱うとき
初心者の方はこのモードから始めましょう
毎回確認が入るので手間はかかりますが、予期しない操作を防げる最も安全なモードです。
オートアクセプトモード
ファイルの読み書きなどの操作を自動的に許可するモードです。いちいち確認されないので、作業がスムーズに進みます。
起動時にオプションを付けるか、会話中に Shift+Tab キーで切り替えられます。
こんな人におすすめ:
- Claude Code の動作に慣れてきた方
- 定型的な作業を効率よく進めたい方
注意
確認なしに操作が実行されるため、CLAUDE.md で安全ルールを設定してから使うことをおすすめします。CLAUDE.md の使い方 を参照してください。
プランモード
Claude Code にいきなり作業させるのではなく、まず計画を立てさせて確認してから実行するモードです。
会話中に Shift+Tab キーを何度か押すと切り替えられます。
こんな人におすすめ:
- 大きな作業を始める前に全体像を確認したい方
- 複数ファイルにまたがる変更を行うとき
- 「何をするか」を先に知りたい方
プランモードは「見積もり」のようなもの
リフォーム業者にいきなり工事を始めてもらうのではなく、まず見積書と工事計画を出してもらう — プランモードはそれと同じ考え方です。
モードの切り替え方
起動時の指定
会話中の切り替え
会話中は Shift+Tab キーを押すことで、モードを切り替えられます。
どのモードを使えばいい?
| 状況 | おすすめモード |
|---|---|
| Claude Code を使い始めたばかり | 通常モード |
| 大切なファイルを扱う作業 | 通常モード または プランモード |
| 定型的な文書作成 | オートアクセプトモード |
| 複数ファイルの大きな変更 | プランモード → 確認後に実行 |
| ちょっとした確認や質問 | 通常モード |
迷ったら通常モードで
どのモードを使うか迷ったら、通常モードのままで大丈夫です。慣れてきたら、作業に応じてモードを使い分けてみてください。
権限設定ファイル(settings.local.json)
settings.local.json とは
実行モードが「どのくらい自動で進めるか」を決めるのに対し、settings.local.json はどの操作を許可し、どの操作を禁止するかを細かく指定するファイルです。
たとえるなら、包丁の安全カバーのようなものです。実行モードが「包丁をどう持つか(慎重に / 手早く)」なら、settings.local.json は「刃の部分にカバーを付けて、危ない使い方を物理的にできなくする」仕組みです。
配置場所
ファイル名に .local が付いているとおり、あなた個人専用の設定です。Git で共有されないため、チームメンバーには影響しません。
基本構造
settings.local.json には 3 種類のルールを書けます:
{
"permissions": {
"deny": [
"許可しない操作(絶対にブロック)"
],
"allow": [
"許可する操作(確認なしで実行)"
],
"ask": [
"確認が必要な操作(毎回聞いてくる)"
]
}
}
非エンジニア向けおすすめ設定
以下は、危険な削除コマンドをブロックし、安全なコマンドだけ許可する設定例です:
{
"permissions": {
"deny": [
"Bash(rm *)",
"Bash(rm -rf *)",
"Bash(rm -r *)",
"Bash(rmdir *)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(**/*.key)",
"Read(**/*.pem)"
],
"allow": [
"Bash(ls *)",
"Bash(cat *)",
"Bash(pwd)",
"Bash(mkdir *)",
"Bash(cp *)",
"Bash(mv *)",
"Bash(node --version)",
"Bash(npm --version)",
"Bash(python --version)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Read",
"Edit",
"Write"
],
"ask": [
"Bash(git push *)",
"Bash(git commit *)",
"Bash(npm install *)"
]
}
}
まずは deny だけでも効果的
すべてを一度に設定する必要はありません。まずは deny に削除系コマンド(rm など)を入れるだけでも、誤操作を防ぐ大きな効果があります。
権限ルールの評価順序
Claude Code が操作を実行しようとすると、以下の順序でルールが評価されます:
① deny に該当する? → ブロック(実行されない)
↓ いいえ
② allow に該当する? → 確認なしで実行
↓ いいえ
③ ask に該当する? → ユーザーに確認を求める
↓ いいえ
④ どれにも該当しない → ユーザーに確認を求める(デフォルト)
ポイント: deny が最も強いルールです。allow に書いてあっても、deny にも書いてあればブロックされます。安全側に倒れる設計です。
パターンマッチングの書き方
ルールには ツール名(パターン) の形式で操作対象を指定します。* はワイルドカード(何にでもマッチ)です。
| ルール | 意味 |
|---|---|
Bash |
すべての Bash コマンド |
Bash(npm run *) |
npm run で始まるコマンド |
Bash(rm *) |
rm で始まるコマンド(削除) |
Read(./.env) |
.env ファイルの読み取り |
Read(./secrets/**) |
secrets フォルダ内のすべてのファイル |
Read(**/*.key) |
すべての .key ファイル |
Edit |
すべてのファイル編集 |
Write |
すべてのファイル作成 |
* と ** の違い
* は同じフォルダ内のファイルにマッチします。** はサブフォルダも含めてすべてにマッチします。たとえば secrets/* は secrets/password.txt にマッチしますが、secrets/db/password.txt にはマッチしません。secrets/** ならどちらにもマッチします。
設定ファイルの階層
settings.local.json 以外にも設定ファイルがあり、それぞれ優先順位が異なります:
| レベル | ファイルの場所 | 効果の範囲 | Git 共有 | 優先順位 |
|---|---|---|---|---|
| Managed | システム管理者が設定 | PC 全体 | — | 最高(上書き不可) |
| Local | .claude/settings.local.json |
個人用 | されない | 高 |
| Project | .claude/settings.json |
チーム共有 | される | 中 |
| User | ~/.claude/settings.json |
全プロジェクト共通 | されない | 低 |
通常は Local だけで十分
個人で使う場合は .claude/settings.local.json だけ設定すれば大丈夫です。チームで統一ルールを設ける場合は .claude/settings.json(Project レベル)を使います。
settings.local.json と CLAUDE.md の違い
どちらも Claude Code の動作を制御するファイルですが、役割が異なります:
| settings.local.json | CLAUDE.md | |
|---|---|---|
| 制御方法 | 技術的な強制(物理ブロック) | 自然言語の指示 |
| 柔軟性 | コマンド単位で厳密に制御 | 文脈に応じた柔軟な判断 |
| 回避の可能性 | AI は回避できない | AI の解釈に依存する場合がある |
| 対象 | コマンド実行・ファイル操作 | 作業方針・コミュニケーション |
| たとえ | 包丁の安全カバー | 「気をつけてね」という声かけ |
両方揃って初めて安全です。 settings.local.json で危険な操作を物理的にブロックし、CLAUDE.md で作業の進め方を指示する — この組み合わせが、Claude Code を安心して使うための基本です。
CLAUDE.md の詳しい書き方は CLAUDE.md の使い方 をご覧ください。