--allowedTools(アロウドツールズ)

起動オプション
--allowedTools
アロウドツールズ
Claude Codeを起動するときコマンドの後ろに足す追加スイッチ。「これらの操作だけは確認ダイアログを出さず自動で通していい」と1セッション分の手形を渡す。指定しなかった操作は普段どおり1つずつ確認が出るので、安全装置は残ったまま押す手間だけ減る

Claude Codeの権限プロンプトを毎回押すのが面倒で、特定の操作だけは自動許可したい人 向け

ファイル一括リネームみたいに同じ操作を何十回も繰り返させる作業を、確認ダイアログで止めずに一気に流したいときや、`-p`(対話なし1発実行)モードでスクリプト的に動かすときに、起動コマンドの後ろに `--allowedTools "Read" "Bash(mv:*)"` のように足して使う

Claude Code(ターミナルで動くClaude公式のCLIツール)を毎日触っていると、ファイルを読むたび、コマンドを叩くたびに「これ実行していい?」の確認が出てきて、流れが切れます。--allowedTools はその確認のうち、特定の操作だけを「これは無条件で通していい」と起動時に伝えるための追加スイッチです。

確認自体を全部スキップする --dangerously-skip-permissions と違い、こちらは「許可するもの」を1個1個指定します。安全寄りの省力化、という位置づけです。

噛み砕くと

新しい職場に「私はAさんとBさんから頼まれた仕事は、いちいち上司に確認しなくていい」と書いた紙を1日分だけ貼っておくイメージです。それ以外の仕事は普段どおり上司確認、紙は1日分なので翌日また貼り直す。

具体的には、起動時に「ファイルを読む操作は許可」「mv(ファイル移動)コマンドは許可」みたいに書いておくと、その操作だけは確認ダイアログ抜きで進みます。書き換えやネットアクセスなど、許可リストに入れていない操作は普段どおり毎回聞かれる。だから雑に乱発しても、爆発はしません。

大事な前提:このスイッチは「セッション1回分の手形」

許可は今回起動した1セッションの間だけ有効です。ターミナルを閉じて再起動したら手形は消えるので、また --allowedTools を付けて起動し直す必要があります。

ずっと同じ許可を持ち回りたいなら、起動時の追加スイッチではなく .claude/settings.json(プロジェクトの設定ファイル)の permissions.allow に書きます。設定ファイルに書けばリポジトリにコミットしてチームで共有もできる。--allowedTools は「今回1回だけのその場しのぎ」用と覚えておけば混乱しません。

「料理ブログのレシピ画像を一括リネームする」を例に、実際の手順を見る

料理ブログの下書きフォルダを開いたら、撮影した画像が IMG_2401.jpg から IMG_2487.jpg まで87枚ぶら下がっている。これを recipe-001.jpgrecipe-087.jpg にリネームしたい、という今日1日の作業です。

普通に claude を起動して頼むと、画像が1枚移動するたびに「mv IMG_2401.jpg recipe-001.jpg を実行していい?」の確認が出ます。87回押すのは、現実的じゃない。

ステップ1: 起動時に許可リストを渡す

ターミナルで次のように起動します。

$ claude --allowedTools "Read" "Bash(mv:*)"

Read がファイル読み取りツールの名前、Bash(mv:*) が「mv で始まる任意のシェルコマンドは確認なしで通す」という意味です。:* は末尾ワイルドカードの書き方で、Bash(mv *)(空白+アスタリスク)と同じ意味になる。

ステップ2: フォルダの中身を読ませる

料理ブログの下書きフォルダの画像ファイルを全部リスト化して、
連番でrecipe-001.jpgから順に振り直すスクリプトを書いて。

Claude Codeはフォルダを Read で覗きます。普段ならここで「読んでいい?」と聞かれますが、Read を許可リストに入れたので確認なし。

ステップ3: スクリプトを書いてもらう

Claude Codeが rename.sh みたいなファイルを作って、中身が下記みたいになります。

#!/bin/bash
mv IMG_2401.jpg recipe-001.jpg
mv IMG_2402.jpg recipe-002.jpg
...
mv IMG_2487.jpg recipe-087.jpg

※ファイル「書き込み」(Write)は許可リストに入れていないので、ここでは普段どおり「rename.shを作っていい?」と1回だけ確認が出ます。書き込みは1回しか発生しないので、この1回は押す。

ステップ4: スクリプトを実行する

$ bash rename.sh

中で mv IMG_2401.jpg recipe-001.jpgmv IMG_2487.jpg recipe-087.jpg が87回走りますが、全部 Bash(mv:*) の許可に引っかかるので、確認ダイアログは1回も出ません。一気に終わる。

ステップ5: 終わったらターミナルを閉じる

セッションを閉じた瞬間、許可は消えます。次回また claude を素で起動すると、mvRead も普通に確認が出る状態に戻る。1日分の手形、というのはこれです。

ちなみに、ここで初心者がやりがちな勘違いがあります。--allowedTools "Read" と書くと、ファイル探索ツールの Glob(パターンでファイル名を探す)や Grep(中身検索)も自動で許可されると思いがち。公式仕様としては Read ルールは GlobGrep にも「ベストエフォートで」適用される、と書かれていますが、確実ではない。心配なら個別に "Read" "Glob" "Grep" と並べて指定する方が安全です。

つまり --allowedTools は何をしてくれるのか

  • やってくれる: 起動時に指定した操作だけ、セッション中は確認ダイアログ抜きで通す
  • やってくれる: 指定しなかった操作は普段どおり1つずつ確認が出る(安全装置は残る)
  • やってくれない: 設定の永続化(次回起動時には消える、ずっと持ち回りたいなら settings.json 側に書く)
  • やってくれない: 全部許可(全許可は --dangerously-skip-permissions 側の役目)
  • 意味が薄い場面: 1セッション中に一度しか使わない操作(押す手間が1回減るだけ)

使いどころ3シナリオ

シナリオ1: 撮影画像87枚を一括リネームする1日作業

上の実演そのまま。claude --allowedTools "Read" "Bash(mv:*)" で起動し、中身を読ませてリネームスクリプトを書かせ、87回の mv を一気に流す。確認の押し疲れがゼロになります。

シナリオ2: コミット前に git diffgit status を何度も叩かせる

記事執筆中、Claude Codeに「変更内容を見ながらコミットメッセージを下書きさせる」みたいな使い方をすると、git diffgit loggit status を10回近く叩きます。これらは中身を読むだけで何も書き換えないので、起動時に --allowedTools "Bash(git diff:*)" "Bash(git log:*)" "Bash(git status)" と渡しておくと毎回の確認がなくなる。

git status 単体や git log など読み取り専用のgit操作は、もともと公式に「確認なしで通る」リストに入っているので指定不要のことも多い。git diff も普段はそのまま通る。明示的にリストアップしておくと、ローカル設定で他の挙動になっていても確実に通せます。

シナリオ3: シェルスクリプト自動実行モード(-p モードと併用)

Claude Codeを「対話なしの一発実行モード」で動かすときに使います。claude -p "ログから昨日のエラー件数を集計して" --allowedTools "Read" "Bash(grep:*)" "Bash(wc:*)" みたいに書くと、画面の前に張り付かなくても処理が完走する。CI/CDで定時バッチに組み込む時の定番フォームです。

初心者が踏みやすい落とし穴

  • パターン記法のコロンは末尾だけで効くBash(mv:*) は OK(末尾の :* はワイルドカードと等価)。Bash(git:* push) みたいに途中に : を書くとリテラル扱いされて何にもマッチしません
  • ツール名は大文字小文字を区別するreadbash と小文字で書くとマッチしない。仕様通り Read Bash Edit Write Glob Grep と書く
  • 「Readだけ指定」で安心しないことGlob(パターンでファイル探索)や Grep(中身検索)はベストエフォートで Read ルールが効くだけで、確実に通したいなら個別に並べる
  • セッション再開時は引き継がれないclaude --continueclaude --resume で前回の続きを開いても、--allowedTools は毎回付け直しが必要。設定の永続化は settings.json に書く
  • 信用ならないリポジトリで Bash(*)Write をまるごと許可しない。Claude Codeに渡すリポジトリの中に怪しい CLAUDE.md や悪意ある指示が紛れていた場合、許可された範囲で勝手にファイルが書き換わる事故が起きる。許可は最小限に
  • --dangerously-skip-permissions の代わりに使えるとは思わないこと。あちらは「全部許可」、こちらは「指定したものだけ許可」。本番リポジトリで全許可は基本的にNG、--allowedTools で必要なものだけ通すのが安全寄りの作法
  • 複数指定の区切りは空白--allowedTools "Read" "Bash(mv:*)" のように1個ずつクォートで囲んで空白区切り。カンマで繋ぐ書き方は仕様外なので素直に空白区切りで書く
  • エイリアスは --allowed-tools。ハイフン入りでも同じ動きをする。古い記事だとこちらの表記もある

書き方

claude --allowedTools "<ツール名 または ツール名(パターン)>" ["<ツール名 または ツール名(パターン)>" ...]

やってみるとこうなる

入力

claude --allowedTools "Read" "Bash(mv:*)"

出力例

(通常どおりClaude Codeの対話画面が起動する。違いは画面に出ない/中で動いたとき:「料理ブログのレシピ画像87枚をリネームして」と頼むと、本来は87回出るはずの「mvを実行していい?」確認が1回も出ず、フォルダの中身を読む操作も確認なしで通る。Writeなど指定していない操作は普段どおり「実行していい?」と聞かれる)

このページに出てきた言葉

セッション
<code>claude</code> コマンドを叩いてから閉じるまでの1回分の対話。閉じた瞬間に終わる
ターミナル
黒い画面で文字のコマンドを打ち込む画面。Windowsなら「コマンドプロンプト」「PowerShell」、Macなら「ターミナル」アプリ
シェルコマンド
ターミナルに打ち込んで実行する <code>mv</code> や <code>ls</code> のような短い命令
ワイルドカード
「ここに何が入ってもいい」を表す記号。<code>*</code>(アスタリスク)が代表
リテラル
特殊な意味を持たず、そのままの文字として扱われる状態。<code>Bash(git:* push)</code> の途中の <code>:</code> は記号扱いされず、ただの文字として残る
エイリアス
別名。<code>--allowedTools</code> と <code>--allowed-tools</code> は同じ動きをする
リポジトリ
プロジェクトのファイル一式と変更履歴をまとめて保存する箱。GitHubで「リポジトリ」と表示されているあれ
コミット
変更を「ここまで保存」と区切る操作。Gitの基本動作
-p(プリント)モード
対話画面を開かず、1回だけ質問を投げて答えを受け取って終了するClaude Codeの動かし方。スクリプトに組み込むときに使う
CI/CD
コードの変更が入るたびに、テストや配置を自動で動かす仕組み。GitHub ActionsやJenkinsが代表例

関連項目

公式ドキュメント

https://code.claude.com/docs/en/cli-reference

-

← 戻る