ClaudeCodeでターミナルコマンドを実行する方法【Bashツール完全解説】
ClaudeCodeを使い始めて、「コードを書いてくれるのは便利だけど、コマンドの実行も任せられないの?」と思ったことはありませんか。実はClaudeCodeには「Bashツール」という機能があり、AIが直接ターミナルコマンドを実行できます。これを使いこなせるようになると、ファイル操作、Git管理、テスト実行、デプロイ作業まで、開発のほぼすべてをClaudeCodeに任せられるようになります。本記事では、Bashツールの基本から、安全に使うための許可制御、注意すべき危険なコマンドまで、初心者の方でも理解できるよう丁寧に解説します。
結論:Bashツールは「ClaudeCodeに手足を与える」最重要機能
最初に結論からお伝えします。BashツールはClaudeCodeを「コードを書くだけのAI」から「実際に手を動かすAI」へと変える、最も重要な機能です。これがあるおかげで、ClaudeCodeは以下のような作業をすべて自動化できます。
npm installやpip installでライブラリをインストールgit commitやgit pushでバージョン管理pytestやnpm testでテスト実行lsやgrepでファイル探索mkdirやmvでファイル整理curlでAPIテスト
ただし強力なツールであるがゆえに、設定を間違えると重大な事故につながります。たとえばrm -rf /のような破壊的なコマンドが意図せず実行されたら、PCが使い物にならなくなる可能性もあります。
幸い、ClaudeCodeには「許可リスト」と「拒否リスト」という二段階の安全装置が用意されています。これらを正しく設定すれば、よく使う安全なコマンドはノーチェックで実行し、危険なコマンドは確認を求める、という運用が可能です。
本記事を読み終わるころには、Bashツールの基本操作はもちろん、安全な運用方法、トラブル時の対処まで自信を持って実行できるようになっているはずです。
Bashツールとは何か
Bashツールは、ClaudeCodeに搭載されている標準ツールの一つで、ユーザーの代わりにシェルコマンドを実行するためのものです。「Bash」というのはmacOSやLinuxで標準的に使われているシェル(コマンド入力環境)の名前で、Windowsでも「Git Bash」や「WSL」を介して使えます。
Bashツールが実行できること
基本的には、あなたが普段ターミナルで打っているコマンドのほぼすべてを実行できます。
- ファイル・ディレクトリの操作(
ls、cd、mv、cp、mkdirなど) - ファイル内容の閲覧(
cat、head、tail、lessなど) - 検索(
grep、find、ripgrepなど) - バージョン管理(
git status、git commit、git pushなど) - パッケージ管理(
npm、pip、brew、aptなど) - テスト・ビルド(
pytest、npm test、makeなど) - ネットワーク(
curl、wget、pingなど)
ただし、ClaudeCode内部のガイドラインで、catやhead、sedの代わりに専用のRead/Editツールを使うよう推奨されている場合があります。これは可読性と安全性のためですが、Bashツールでこれらのコマンドを使うこと自体は可能です。
Bashツールの基本動作フロー
ユーザーがClaudeCodeに「ファイル一覧を見せて」と頼むと、内部的には次のような流れで処理が進みます。
- ClaudeCodeが状況を判断し、
lsコマンドを実行することを決定 - Bashツールに対して
lsコマンドの実行を要求 - 設定ファイルの許可リスト・拒否リストと照合
- 許可されていれば実行、未許可なら確認プロンプトを表示
- 実行結果(標準出力・標準エラー)を取得
- ClaudeCodeが結果を解釈してユーザーに返答
この流れの中で最も重要なのが「3. 許可リストとの照合」のステップです。ここで適切な制御を行うことで、安全性と利便性のバランスを取ります。
Bashツールの基本的な使い方
ClaudeCodeでBashツールを使うのに、特別な準備は必要ありません。ChatのようにClaudeCodeに自然言語で指示するだけです。たとえば次のようなプロンプトで動作します。
「カレントディレクトリのファイル一覧を表示して」
「srcディレクトリ配下にある.tsファイルだけをカウントして」
「最新のコミットログを5件表示して」
ClaudeCodeは内部で適切なBashコマンドを組み立て、Bashツール経由で実行します。実行前に確認プロンプトが表示される場合は、内容を確認してから「Yes」または「No」を選びます。
実行確認プロンプトの読み方
未許可コマンドの実行時に表示される確認プロンプトには、次のような情報が含まれます。
- 実行されようとしているコマンドの全文
- そのコマンドの簡単な説明
- このコマンドを「今回だけ許可」「常に許可」「拒否」のいずれかを選ぶ選択肢
「常に許可」を選ぶと、設定ファイルの許可リストにコマンドパターンが自動で追加されます。安全だと判断したコマンドはこれを使うと、次回以降の確認が省略されて快適です。
Bashツールの許可制御【設定ファイルの書き方】
ClaudeCodeの権限管理は.claude/settings.jsonまたは~/.claude/settings.jsonで行います。Bashツールに関連する主な設定項目は以下の通りです。
許可リスト(allow)の書き方
{
"permissions": {
"allow": [
"Bash(ls:*)",
"Bash(cat:*)",
"Bash(grep:*)",
"Bash(git status)",
"Bash(git diff:*)",
"Bash(npm test)",
"Bash(npm run *)"
]
}
}
Bash(コマンドパターン)という形式で記述します。:*はそのコマンドの引数を問わず許可する意味です。たとえばBash(ls:*)ならls、ls -la、ls /tmpなどすべてOKになります。
Bash(git status)のように完全一致で記述すると、引数なしのgit statusだけが許可されます。Bash(npm run *)のようにワイルドカードも使えます。
拒否リスト(deny)の書き方
{
"permissions": {
"deny": [
"Bash(rm:*)",
"Bash(sudo:*)",
"Bash(curl:* | sh)",
"Bash(:(){ :|:& };:)"
]
}
}
許可リストよりも拒否リストが優先されます。たとえ許可リストに含まれていても、拒否リストにマッチすれば実行されません。これにより安全性が担保されます。
プロジェクト固有とユーザー全体の使い分け
設定ファイルは2つのスコープがあります。
~/.claude/settings.json:ユーザー全体(すべてのプロジェクトで有効)<プロジェクト>/.claude/settings.json:プロジェクト固有
一般的には、lsやgit statusのような無害なコマンドはユーザー全体の許可リストに、プロジェクト固有のスクリプト(npm run build:customなど)はプロジェクト設定に書くのがおすすめです。
よく使うコマンドと許可設定の例
実際の開発でよく使うコマンドと、それに対応するおすすめの許可設定を紹介します。
Git関連
"Bash(git status)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(git add:*)",
"Bash(git branch:*)",
"Bash(git checkout:*)",
"Bash(git pull:*)",
"Bash(git fetch:*)"
git commitやgit pushは意図的にリストから外すのもひとつの考え方です。これらはプロジェクトに大きな影響を与えるので、毎回確認するほうが安全です。
Node.js関連
"Bash(npm install)",
"Bash(npm install:*)",
"Bash(npm test)",
"Bash(npm run *)",
"Bash(npx *)"
Python関連
"Bash(python:*)",
"Bash(python3:*)",
"Bash(pip install:*)",
"Bash(pytest:*)",
"Bash(uv:*)"
ファイル操作
"Bash(ls:*)",
"Bash(pwd)",
"Bash(mkdir:*)",
"Bash(touch:*)",
"Bash(echo:*)"
rmは意図的に外しています。削除系は誤実行のリスクが高いので、毎回確認するのがおすすめです。
危険なコマンドへの対策
Bashツールは強力ゆえに、誤った使い方をすると深刻な被害をもたらします。特に注意すべきコマンドと、その対策を解説します。
絶対に許可リストに入れてはいけないコマンド
以下のコマンドは、たとえ便利でも自動実行を許可してはいけません。
rm -rf:ファイル・ディレクトリの再帰削除。rm -rf /で全ファイル消失sudo:管理者権限。OSレベルの破壊的操作が可能dd:低レベルディスク操作。誤ると復旧不能mkfs:フォーマットコマンド。データ完全消失chmod 777:パーミッション過剰付与。セキュリティ低下curl ... | sh:外部スクリプトの直接実行。マルウェア感染リスク
これらは拒否リストに明示的に入れておくと安心です。
`force-push`や`reset --hard`への注意
Gitの破壊的操作も警戒が必要です。
git push --force:他人の作業を上書きする可能性git reset --hard:ローカルの変更を完全に消すgit clean -f:未追跡ファイルを削除
これらはClaudeCode内部のセーフガードでも警告されますが、ユーザー側でも拒否リストに加えておくと二重の安全装置になります。
サンドボックスモードの活用
ClaudeCodeにはBashコマンドを「サンドボックス」内で実行する機能があります。サンドボックスでは、ファイルシステムへの書き込みやネットワークアクセスが制限されており、テストやプレビューに最適です。
{
"permissions": {
"defaultMode": "sandbox"
}
}
破壊的操作のリスクを大幅に減らせるので、特に駆け出しの方にはおすすめです。
Bashツールを安全に使う7つのコツ
実際に運用しながら身につけた、安全で快適に使うためのコツを紹介します。
コツ1: まずは許可リストを最小限から始める
最初から幅広いコマンドを許可するのは危険です。ls、pwd、git status、git diffなど、確実に安全なコマンドから始めて、必要に応じて少しずつ追加していきましょう。
コツ2: 「常に許可」を押す前に立ち止まる
確認プロンプトで「常に許可」を選ぶときは、本当にそのパターンを永続的に許可してよいか考えましょう。Bash(rm:*)を「常に許可」してしまうと、後で大変なことになります。
コツ3: プロジェクトごとに設定を分ける
ある言語のプロジェクトでしか使わないコマンドは、プロジェクト設定にだけ入れるべきです。グローバルに入れると別プロジェクトで誤実行される可能性があります。
コツ4: 設定ファイルをGitで管理する
プロジェクトの.claude/settings.jsonはGitに含めることで、チーム全体で共有できます。レビューも入るので、危険な許可が紛れ込むのを防げます。
コツ5: 重要な作業の前にバックアップ
ClaudeCodeに大規模な変更を依頼する前は、必ずgitコミットを切るかブランチを作っておきましょう。万が一の事故からすぐに復元できます。
コツ6: ログを定期的に見直す
ClaudeCodeの実行ログを定期的にチェックし、想定外のコマンドが実行されていないか確認します。設定の見直しに役立ちます。
コツ7: 不安なときは「dry-run」で確認
rmやmvの代わりに、まずechoで実行予定のコマンドを表示させたり、ツールの--dry-runオプションを使ったりする習慣をつけると、ミスが激減します。
Bashツールが動かないときのトラブルシューティング
実際に使っていると、コマンドが期待通りに動かないことがあります。代表的な原因と対処法を紹介します。
「Permission denied」エラーが出る
もっとも多いケースです。原因は次のいずれかです。
- 許可リストに入っていない(→確認プロンプトで「許可」を選ぶ)
- 拒否リストに入っている(→設定を見直す)
- ファイルの実行権限がない(→
chmod +xで付与)
コマンドが見つからないと言われる
command not foundエラーは、PATHが通っていないことが原因です。which <コマンド名>で確認し、必要ならexport PATH=...を実行するか、絶対パスでコマンドを指定します。
ハングして応答が返ってこない
対話的な入力を求めるコマンド(vim、top、lessなど)は、Bashツールでは正常に動かないことがあります。これらは-yオプションをつけたり、出力をパイプしたりして対話なしで実行できるよう工夫します。
出力が長すぎて切れる
ClaudeCodeのBashツールは出力サイズに制限があります。headやtailで出力を絞るか、ファイルにリダイレクトしてからRead toolで読む方法が有効です。
実践例:BashツールでCI/CDを動かす
応用例として、ClaudeCodeのBashツールを使ってローカルからCI/CDを動かす流れを紹介します。
例1: コミットからデプロイまで
git add .
git commit -m "feat: 新機能の追加"
git push origin main
これらをClaudeCodeに依頼すれば、自動でコミットメッセージを考えてくれます。CIが回ってデプロイまで完了したら、Slack MCPで通知させることも可能です。
例2: テストの自動修正ループ
npm test
テストが失敗したら、ClaudeCodeが失敗内容を解析してコードを修正、再度テスト実行、成功するまで繰り返す、という自律ループを構築できます。
例3: パッケージ管理の自動化
npm outdated
npm update
npm audit fix
依存関係の確認・更新・脆弱性修正を、ClaudeCodeに任せるだけで完了します。
FAQ
Q1. BashツールはWindowsでも使えますか? はい、使えます。ただし標準のコマンドプロンプトではなく、WSL2やGit Bashの利用を推奨します。コマンドの互換性が高くなります。
Q2. 確認プロンプトを毎回出すのが面倒です よく使うコマンドは「常に許可」を選んで許可リストに登録しましょう。あるいは設定ファイルを直接編集して、許可コマンドを一括追加することもできます。
Q3. Bashツールでパスワード入力が必要なコマンドは使えますか?
基本的に対話的な入力は難しいです。sudoの代わりにsudo -n(パスワード入力をスキップ)や、expectスクリプトを併用する方法があります。ただしセキュリティ上、パスワードを自動入力させるのは推奨しません。
Q4. 実行履歴はどこで確認できますか?
ClaudeCodeのセッションログ内に記録されています。また、シェル自体の履歴(~/.bash_historyなど)にも残ります。
Q5. 複数のコマンドを連続実行させたいときは?
&&や;で連結して1つのコマンドとして渡すか、シェルスクリプトを書いて実行させる方法があります。複雑な処理はスクリプト化したほうが安全です。
Q6. Bashツールを完全に無効化したい
~/.claude/settings.jsonのpermissions.denyに"Bash(*)"と書けば、すべてのBash実行が拒否されます。閲覧のみのClaudeCodeを使いたいときに便利です。
Q7. Macでカラー出力が文字化けします
LANG=en_US.UTF-8を環境変数に設定するか、コマンドに--no-colorオプションを付けてください。
まとめ
BashツールはClaudeCodeを単なる「コード生成AI」から「実際に作業するAI」へ変える、最も重要な機能です。ファイル操作、Git管理、パッケージ管理、テスト実行、デプロイ作業まで、開発のあらゆる場面で活躍します。
ただし強力ゆえに、設定を誤ると深刻な事故につながります。許可リストは最小限から始めて少しずつ広げる、rmやsudoなどの危険なコマンドは拒否リストに明示する、重要な作業前にはバックアップを取る、といった基本を守ることが大切です。
最初はすべてのコマンドで確認プロンプトが出て煩わしく感じるかもしれませんが、安全な許可リストを育てていけば、徐々に確認なしで快適に動くようになります。本記事で紹介した設定例を参考に、自分の使い方に合った許可リストを構築してください。