Claude Codeは、CLI上で動くLLMによるAI開発支援ツールです。本連載は全5回を予定しています。実務経験1~3年程度のエンジニア向けに、対話モードでの会話の基本、コンテキストと@記法、スラッシュコマンドとパーミッションの基本を解説し、最後に学んだ知識を総動員してアプリ開発をハンズオンで体験します。なお本連載は2026年9月刊行の
第4回では、Claude Codeが勝手にファイルやフォルダを操作したり、削除したりしないための
パーミッション設定が必要な理由を知ろう
ここからは、Claude Codeの操作をより安全に制御する方法に目を向けていきましょう。
Claude Codeでは安全のため、シェルコマンドを実行する際や一部ツールの実行時には承認を求める仕組みがあります。
たとえばファイルやフォルダの一覧を表示するlsや、カレントディレクトリを表示するpwd、ファイル内容を確認するcatは読み取り専用のシェルコマンドであり、これらは承認せずとも自動実行されます。Claude Codeが読み取り専用の操作と認識し、安全なコマンドとして扱うためです。
一方で、ファイルを削除するrmや、ファイルを作成するtouch、他にもフォルダを作成するmkdir など、ファイルやフォルダを変更するシェルコマンドは承認を求められます。以下はClaude Codeにファイル削除を指示した際、シェルコマンドであるrmの実行への承認を求められた例です。
● Bash(rm /Users/username/Desktop/my-project/package.json)
Running
Bash command
rm /Users/username/Desktop/my-project/package.json
Delete package.json
Do you want to proceed?
› 1. Yes
2. Yes, and always allow access to my-project/ from this project
3. No
Esc to cancel · Tab to amend · ctrl+e to explain
この例では、rmコマンドを実行する前に、
なお、連載の第1回で紹介したAuto-Acceptモード
1つひとつの操作を自分の目で確認してから進められるため安心感があります。
ただ、開発を進めていくと
パーミッションの仕組みを知ろう
Claude Codeは、シェルコマンドの実行やファイルの読み書きといった操作を
大きく
| ツール | 制御する操作 | 例 |
|---|---|---|
| Bash | シェルコマンドの実行 | npm run test、rm -rf |
| Read | ファイルの読み取り | ソースコードの参照、.envの読み取り |
| Edit | 既存ファイルの編集 | コードの修正 |
| Write | 新規ファイルの作成 | テストファイルの作成 |
| WebFetch | Webアクセス | URLからの情報取得 |
実際にはMCPサーバーが提供するものなど、ほかにも制御対象となるツールがありますが、ここでは主にこの5つを扱います。
この中でもシェルコマンドに相当する
3つのルールを覚えよう:deny、ask、allow
パーミッションの制御には3つのルールを使います。それが
2択
deny(禁止)
denyに指定した操作は、完全にブロックされます。Claude Codeがどのような理由をつけても、denyに設定された操作は実行されません。
ask(確認を強制)
denyで
allow(許可)
denyで
ルールの優先度:Deny > Ask > Allow
同じ操作が複数のルールにマッチした場合、denyが最も強く、次にask、最後にallowの順で評価されます。allowに含まれている操作でも、askに該当すれば確認が入ります。
たとえば、Bash(git *)をallowに、Bash(git push --force *)をdenyに設定したとしましょう。この設定では、git statusは自動実行されますが、git push --force origin main はallowBash(git *))Bash(git push --force *))
「迷ったらdenyに入れておく」
「安全に使う」ための考え方を身につけよう
ここからは、
denyに入れるもの:絶対に防ぐべき操作
主な判断の軸は
| 操作 | 理由 |
|---|---|
rm -rf |
ディレクトリごと強制削除してしまう[2] |
sudo |
root権限での実行は危険 |
.env ファイルの読み取り |
APIキーやパスワードが含まれている可能性がある |
askに入れるもの:確認を挟みたい操作
判断の軸は
| 操作 | 理由 |
|---|---|
rm |
ファイル削除は念のため確認しておきたいrm -rfはdenyで別途ブロック) |
git push |
リモートリポジトリへの変更は影響が大きい |
curl/wget |
外部との通信は確認してから実行したい |
allowに入れるもの:自動化して効率を上げる操作
判断の軸は
| 操作 | 理由 |
|---|---|
Edit/Write |
開発の基本操作で頻繁に使う |
Bash(npm test) / Bash(npm run *) |
繰り返し実行するため確認を省いてサイクルを速くしたい |
Bash(git status) / Bash(git diff) / Bash(git log) |
変更確認・ |
mkdir/touch/cp |
ファイルの作成やコピーは日常的に使う |
ここで挙げたのはあくまで代表的な例です。プロジェクトの内容やチームの運用方針によって最適な設定は異なります。
「この操作はどのルールに当てはまるか」
settings.json で設定しよう
パーミッションの設定は、プロジェクトの.claude/に記述します。プロジェクトの中に.claude/というディレクトリを作り、その中にsettings.ファイルを作成します。
以下は、パーミッションの設定を書く際の例です。
{
"permissions": {
"allow": [
"Bash(npm test)",
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(touch *)",
"Bash(mkdir *)",
"Bash(cp *)",
"Edit",
"Write"
],
"deny": [
"Bash(sudo *)",
"Bash(rm -rf *)",
"Read(.env*)"
],
"ask": [
"Bash(rm *)",
"Bash(git push *)",
"Bash(curl *)"
]
}
}
この設定では、テスト実行や状態確認のコマンド、ファイル操作を自動承認しています。なお、ls・
まずはこの設定をベースにして、プロジェクト固有のコマンド
settings..claude/を作成した場合は、Claude Codeを一度終了して起動し直すことで確実に読み込まれます。
> /exit claude
Bashパターンの書き方:ワイルドカードマッチング
設定例の中でBash(npm test)やBash(rm -rf *)のような書き方が登場しています。この*の使い方にはルールがあります。
*はワイルドカード
たとえばBash(git push *)と書くと、git push origin mainやgit push --forceなど、git pushで始まるすべてのコマンドがマッチ対象になります。Bash(* --version)のように先頭に置いたり、Bash(git * main)のように途中に置くこともできます。
Read/Editのパス記法
ReadやEditの設定では、特定のファイルやディレクトリを指定できます。
"Read(.env*)"
この例では、.envで始まるすべてのファイルの読み取りをブロックしています。Claude Codeは通常プロジェクトルートから起動するため、ルート直下だけでなくsrc/
この設定により、.envや.env.
グローバル設定への発展
ここまでプロジェクトの.claude/
| ファイル | スコープ | チームと共有 |
|---|---|---|
.claude/ |
プロジェクト | される |
.claude/ |
プロジェクト |
されない |
~/.claude/ |
全プロジェクト共通 | されない |
.claude/は、チームには共有したくない個人の設定~/.config/など)
ただし環境によっては自動設定が正常に動作しないことがあります。念のためgit statusでGit管理対象になっていないかを確認し、表示される場合はプロジェクトの.gitignoreに.claude/
~/.claude/には、どのプロジェクトでも共通して使いたいルール
複数の設定ファイルが存在する場合、優先順位は次のとおりです
- 管理者設定
(組織のMDM管理など) - Claude Code の起動オプション
(--dangerously-skip-permissions など) - .claude/
settings. local. json (プロジェクト個人設定) - .claude/
settings. json (プロジェクト共有設定) - ~/.claude/
settings. json (グローバル設定)
設定を確認しよう
settings.
設定ミスがあると、ブロックしたはずのコマンドが実行されたり、パターンが合わずに意図しないコマンドまでブロックされたりすることがあります。
設定を書いたら、必ず正しく反映されているかを確認しましょう。
/permissions コマンド
対話モード内で /permissionsと入力すると、現在のパーミッション設定を確認・
> /permissions
実行すると、Allow/
Permissions: Allow Ask Deny Workspace (←/→ or tab to cycle) Claude Code won't ask before using allowed tools. ⌕ Search › 1. Add a new rule 2. Bash(cat *) 3. Bash(cp *) 4. Bash(echo *) Press ⇅ to navigate · Enter to select · Type to search · Esc to cancel
矢印キーやTabキーでタブを切り替えると、各カテゴリのルール一覧を確認できます。リスト内のルールを選択すると、そのルールがどの設定ファイルから読み込まれているかを確認できます
なお、このUIから
この方法なら自動でsettings.
まとめ
パーミッション設定では、deny
設定は .claude/
最終回となる次回は、この連載で学んだことを総動員して本格的なWebアプリ開発に挑戦してみたいと思います。
