bashツールはClaudeがシェルコマンドを永続的なbashセッションで実行できるようにし、システム操作、スクリプト実行、コマンドラインオートメーションを可能にします。

概要

bashツールはClaudeに以下を提供します:
  • 状態を保持する永続的なbashセッション
  • あらゆるシェルコマンドを実行する能力
  • 環境変数とワーキングディレクトリへのアクセス
  • コマンドチェーンとスクリプト機能

モデル互換性

モデルツールバージョン
Claude 4モデルとSonnet 3.7 (非推奨)bash_20250124
古いツールバージョンは新しいモデルとの後方互換性が保証されていません。常にモデルバージョンに対応するツールバージョンを使用してください。

ユースケース

  • 開発ワークフロー: ビルドコマンド、テスト、開発ツールを実行
  • システムオートメーション: スクリプト実行、ファイル管理、タスク自動化
  • データ処理: ファイル処理、分析スクリプト実行、データセット管理
  • 環境セットアップ: パッケージインストール、環境設定

クイックスタート

import anthropic  client = anthropic.Anthropic()  response = client.messages.create(  model="claude-sonnet-4-5",  max_tokens=1024,  tools=[  {  "type": "bash_20250124",  "name": "bash"  }  ],  messages=[  {"role": "user", "content": "List all Python files in the current directory."}  ] ) 

動作方法

bashツールは永続的なセッションを保持します:
  1. Claudeが実行するコマンドを決定
  2. bashシェルでコマンドを実行
  3. 出力(標準出力と標準エラー出力)をClaudeに返す
  4. セッション状態はコマンド間で保持される(環境変数、ワーキングディレクトリ)

パラメータ

パラメータ必須説明
commandはい*実行するbashコマンド
restartいいえtrueに設定してbashセッションを再起動
*restartを使用する場合を除き必須
// コマンドを実行 {  "command": "ls -la *.py" }  // セッションを再起動 {  "restart": true } 

例:マルチステップオートメーション

Claudeはコマンドをチェーンして複雑なタスクを完了できます:
# ユーザーリクエスト "Install the requests library and create a simple Python script that fetches a joke from an API, then run it."  # Claudeのツール使用: # 1. パッケージをインストール {"command": "pip install requests"}  # 2. スクリプトを作成 {"command": "cat > fetch_joke.py << 'EOF'\nimport requests\nresponse = requests.get('https://official-joke-api.appspot.com/random_joke')\njoke = response.json()\nprint(f\"Setup: {joke['setup']}\")\nprint(f\"Punchline: {joke['punchline']}\")\nEOF"}  # 3. スクリプトを実行 {"command": "python fetch_joke.py"} 
セッションはコマンド間で状態を保持するため、ステップ2で作成されたファイルはステップ3で利用可能です。

bashツールの実装

bashツールはスキーマレスツールとして実装されています。このツールを使用する場合、他のツールのような入力スキーマを提供する必要はありません。スキーマはClaudeのモデルに組み込まれており、変更することはできません。
1

bash環境をセットアップ

Claudeが対話できる永続的なbashセッションを作成します:
import subprocess import threading import queue  class BashSession:  def __init__(self):  self.process = subprocess.Popen(  ['/bin/bash'],  stdin=subprocess.PIPE,  stdout=subprocess.PIPE,  stderr=subprocess.PIPE,  text=True,  bufsize=0  )  self.output_queue = queue.Queue()  self.error_queue = queue.Queue()  self._start_readers() 
2

コマンド実行を処理

コマンドを実行して出力をキャプチャする関数を作成します:
def execute_command(self, command):  # bashにコマンドを送信  self.process.stdin.write(command + '\n')  self.process.stdin.flush()    # タイムアウト付きで出力をキャプチャ  output = self._read_output(timeout=10)  return output 
3

Claudeのツール呼び出しを処理

Claudeの応答からコマンドを抽出して実行します:
for content in response.content:  if content.type == "tool_use" and content.name == "bash":  if content.input.get("restart"):  bash_session.restart()  result = "Bash session restarted"  else:  command = content.input.get("command")  result = bash_session.execute_command(command)    # 結果をClaudeに返す  tool_result = {  "type": "tool_result",  "tool_use_id": content.id,  "content": result  } 
4

安全対策を実装

検証と制限を追加します:
def validate_command(command):  # 危険なコマンドをブロック  dangerous_patterns = ['rm -rf /', 'format', ':(){:|:&};:']  for pattern in dangerous_patterns:  if pattern in command:  return False, f"Command contains dangerous pattern: {pattern}"    # 必要に応じてさらに検証を追加  return True, None 

エラーを処理

bashツールを実装する場合、さまざまなエラーシナリオを処理してください:
コマンドの実行に時間がかかりすぎる場合:
{  "role": "user",  "content": [  {  "type": "tool_result",  "tool_use_id": "toolu_01A09q90qw90lq917835lq9",  "content": "Error: Command timed out after 30 seconds",  "is_error": true  }  ] } 
コマンドが存在しない場合:
{  "role": "user",  "content": [  {  "type": "tool_result",  "tool_use_id": "toolu_01A09q90qw90lq917835lq9",  "content": "bash: nonexistentcommand: command not found",  "is_error": true  }  ] } 
アクセス許可の問題がある場合:
{  "role": "user",  "content": [  {  "type": "tool_result",  "tool_use_id": "toolu_01A09q90qw90lq917835lq9",  "content": "bash: /root/sensitive-file: Permission denied",  "is_error": true  }  ] } 

実装のベストプラクティスに従う

ハングするコマンドを防ぐためにタイムアウトを実装します:
def execute_with_timeout(command, timeout=30):  try:  result = subprocess.run(  command,   shell=True,   capture_output=True,   text=True,   timeout=timeout  )  return result.stdout + result.stderr  except subprocess.TimeoutExpired:  return f"Command timed out after {timeout} seconds" 
環境変数とワーキングディレクトリを保持するためにbashセッションを永続的に保つ:
# 同じセッションで実行されるコマンドは状態を保持 commands = [  "cd /tmp",  "echo 'Hello' > test.txt",  "cat test.txt" # これは/tmpにいるため機能 ] 
トークン制限の問題を防ぐために非常に大きな出力を切り詰めます:
def truncate_output(output, max_lines=100):  lines = output.split('\n')  if len(lines) > max_lines:  truncated = '\n'.join(lines[:max_lines])  return f"{truncated}\n\n... Output truncated ({len(lines)} total lines) ..."  return output 
実行されたコマンドの監査証跡を保持します:
import logging  def log_command(command, output, user_id):  logging.info(f"User {user_id} executed: {command}")  logging.info(f"Output: {output[:200]}...") # 最初の200文字をログ 
コマンド出力から機密情報を削除します:
def sanitize_output(output):  # 潜在的なシークレットまたは認証情報を削除  import re  # 例:AWSの認証情報を削除  output = re.sub(r'aws_access_key_id\s*=\s*\S+', 'aws_access_key_id=***', output)  output = re.sub(r'aws_secret_access_key\s*=\s*\S+', 'aws_secret_access_key=***', output)  return output 

セキュリティ

bashツールは直接的なシステムアクセスを提供します。これらの重要な安全対策を実装してください:
  • 隔離された環境(Docker/VM)での実行
  • コマンドフィルタリングとホワイトリストの実装
  • リソース制限の設定(CPU、メモリ、ディスク)
  • すべての実行されたコマンドのログ記録

主な推奨事項

  • ulimitを使用してリソース制約を設定
  • 危険なコマンド(sudorm -rfなど)をフィルタリング
  • 最小限のユーザー権限で実行
  • すべてのコマンド実行を監視およびログ記録

価格

The bash tool adds 245 input tokens to your API calls. Additional tokens are consumed by:
  • Command outputs (stdout/stderr)
  • Error messages
  • Large file contents
完全な価格詳細についてはツール使用価格を参照してください。

一般的なパターン

開発ワークフロー

  • テストの実行:pytest && coverage report
  • プロジェクトのビルド:npm install && npm run build
  • Git操作:git status && git add . && git commit -m "message"

ファイル操作

  • データ処理:wc -l *.csv && ls -lh *.csv
  • ファイル検索:find . -name "*.py" | xargs grep "pattern"
  • バックアップ作成:tar -czf backup.tar.gz ./data

システムタスク

  • リソース確認:df -h && free -m
  • プロセス管理:ps aux | grep python
  • 環境セットアップ:export PATH=$PATH:/new/path && echo $PATH

制限事項

  • 対話型コマンドなしvimless、またはパスワードプロンプトを処理できない
  • GUIアプリケーションなし:コマンドラインのみ
  • セッションスコープ:会話内で永続化、API呼び出し間で失われる
  • 出力制限:大きな出力は切り詰められる可能性がある
  • ストリーミングなし:完了後に結果が返される

他のツールとの組み合わせ

bashツールはテキストエディタおよび他のツールと組み合わせると最も強力です。

次のステップ