Claude Codeでコマンド実行の権限設計を意識し始めた人向け(CLI/シェルの基本が分かる前提)
専用ツール(Read/Write/Edit/Grep)でカバーできない操作をしたいとき。
シェル(=ターミナルで動く対話型コマンド処理系)に投げるコマンドを実行する万能ツール。専用ツール(Read/Write/Edit/Grep)でカバーできない操作はだいたいBash経由で動かす。git, npm, テスト実行, ファイル操作, ビルド, デプロイ等、普段ターミナルで叩いてるものは全部これで動く。
噛み砕くと
パソコンには「ターミナル」と呼ばれる、文字を打つだけで操作できる窓口がある。ファイル削除・コピー・テスト実行・gitの操作も全部この窓口でやれる。Bashツールは「Claudeにこの窓口を貸す」動作。
便利な反面、力が強いので暴走したら手元のファイルを破壊できる。だから許可制で動く(特定のコマンドはユーザーが毎回承認、または事前に許可リスト登録)。「Claudeに包丁を渡す」と思っておくと使い方を間違えない。
具体的に何ができる?
- 任意のシェルコマンドを実行する
- 標準出力(stdout、=コマンドの正常結果)と標準エラー(stderr、=エラーメッセージ)を取得する
- 終了コード(exit code、=コマンドの結果ステータス番号、0が成功)を返す
- 最大10分(600,000ms)までの実行をサポート
- バックグラウンド実行(
run_in_background)も可能
使いどころ3シナリオ
シナリオ1: テストを実行して結果を見る
npm test や pytest を Bash で叩いて、失敗したテスト名と原因をClaudeに分析させる。コード修正→テスト実行→結果を見て再修正、のループの土台になる。
シナリオ2: gitで状態を確認したり差分を見たりする
git status git diff git log を Bash で実行して、Claudeが現状を把握する。コミット作成、ブランチ操作、PR作成(gh pr create)も全部Bash経由。
シナリオ3: ビルド成果物の確認・デプロイ
npm run build でビルド → ls dist/(=成果物フォルダの中身一覧)で生成物確認 → aws s3 sync(=AWSのストレージへアップロード)でデプロイ、のような複合作業の連結を Bash で順番に走らせる。
初心者が踏みやすい落とし穴
rm -rf(=指定ディレクトリ以下を強制削除する危険コマンド)系の破壊的コマンドは絶対に勝手に走らない。実行前にユーザー承認が入る。承認時は本当にそのファイルを消していいか必ず確認する- 絶対パスを使う癖をつける。
cd(=ディレクトリを移動するコマンド)で行き来するとシェル状態が次回コマンドに引き継がれない場合があり、混乱する catやheadでファイルを読まない。専用ツール Read の方が安全で速い。Bashは「他に手段がない時だけ」- 長時間コマンドはタイムアウトに注意。10分超えるコマンドは
run_in_backgroundで逃がして、別途 BashOutput で進捗を見る
書き方
Bash(command="<shell-command>", description="<short-desc>", timeout=?)
やってみるとこうなる
入力
Bash(command="npm test", description="Run unit tests")
出力例
コマンドが実行され、stdout/stderrとexit codeが返ってくる(最大10分)。
このページに出てきた言葉
- シェル
- ターミナルで動く対話型コマンド処理系。bash や zsh が代表例。
- ターミナル
- 文字でコンピューターに命令を出すための窓口アプリ。WindowsならPowerShell、MacならTerminal。
- 標準出力 (stdout)
- コマンドの正常な実行結果。画面にそのまま出る文字列。
- 標準エラー (stderr)
- コマンドのエラーメッセージ。stdoutとは別ストリームで出力される。
- 終了コード
- コマンドが終わったときの結果番号。0=成功、それ以外=何らかのエラー。
- <code>rm -rf</code>
- 指定したディレクトリ以下を確認なしで強制削除するコマンド。誤爆すると取り返しがつかない。
- デプロイ
- ビルドした成果物をサーバーや本番環境に配置して動かす作業。