Bashツール
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."}
]
)curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"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ツールは永続的なセッションを保持します:
- Claudeが実行するコマンドを決定
- bashシェルでコマンドを実行
- 出力(標準出力と標準エラー出力)をClaudeに返す
- セッション状態はコマンド間で保持される(環境変数、ワーキングディレクトリ)
パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
command | はい* | 実行するbashコマンド |
restart | いいえ | trueに設定してbashセッションを再起動 |
*restartを使用する場合を除き必須
例:マルチステップオートメーション
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のモデルに組み込まれており、変更することはできません。
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()コマンド実行を処理
コマンドを実行して出力をキャプチャする関数を作成します:
def execute_command(self, command): # bashにコマンドを送信 self.process.stdin.write(command + '\n') self.process.stdin.flush() # タイムアウト付きで出力をキャプチャ output = self._read_output(timeout=10) return outputClaudeのツール呼び出しを処理
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 }安全対策を実装
検証と制限を追加します:
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ツールを実装する場合、さまざまなエラーシナリオを処理してください:
実装のベストプラクティスに従う
セキュリティ
bashツールは直接的なシステムアクセスを提供します。これらの重要な安全対策を実装してください:
- 隔離された環境(Docker/VM)での実行
- コマンドフィルタリングとホワイトリストの実装
- リソース制限の設定(CPU、メモリ、ディスク)
- すべての実行されたコマンドのログ記録
主な推奨事項
ulimitを使用してリソース制約を設定- 危険なコマンド(
sudo、rm -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
制限事項
- 対話型コマンドなし:
vim、less、またはパスワードプロンプトを処理できない - GUIアプリケーションなし:コマンドラインのみ
- セッションスコープ:会話内で永続化、API呼び出し間で失われる
- 出力制限:大きな出力は切り詰められる可能性がある
- ストリーミングなし:完了後に結果が返される
他のツールとの組み合わせ
bashツールはテキストエディタおよび他のツールと組み合わせると最も強力です。