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ツールは永続的なセッションを保持します:
Claudeが実行するコマンドを決定
bashシェルでコマンドを実行
出力(標準出力と標準エラー出力)をClaudeに返す
セッション状態はコマンド間で保持される(環境変数、ワーキングディレクトリ)
パラメータ
パラメータ 必須 説明
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' \n import requests \n response = requests.get('https://official-joke-api.appspot.com/random_joke') \n joke = response.json() \n print(f \" Setup: {joke['setup']} \" ) \n print(f \" Punchline: {joke['punchline']} \" ) \n EOF" }
# 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 output
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
}
安全対策を実装
検証と制限を追加します: 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を使用してリソース制約を設定
危険なコマンド(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ツールはテキストエディタ および他のツールと組み合わせると最も強力です。
次のステップ