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

概要

bashツールはClaudeに以下を提供します:

  • 状態を維持する永続的なbashセッション
  • あらゆるシェルコマンドを実行する能力
  • 環境変数と作業ディレクトリへのアクセス
  • コマンドチェーンとスクリプト機能

ツールバージョン

モデルツールバージョン
Claude 4 & Sonnet 3.7bash_20250124
Claude Sonnet 3.5bash_20241022

Claude Sonnet 3.5では、bashツールを使用する際にcomputer-use-2024-10-22ベータヘッダーが必要です。

bashツールはClaude 4とSonnet 3.7で一般提供されています。

使用例

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

クイックスタート

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    tools=[
        {
            "type": "bash_20250124",
            "name": "bash"
        }
    ],
    messages=[
        {"role": "user", "content": "現在のディレクトリ内のすべてのPythonファイルをリストしてください。"}
    ]
)

動作原理

bashツールは永続的なセッションを維持します:

  1. Claudeが実行するコマンドを決定
  2. bashシェルでコマンドを実行
  3. 出力(stdoutとstderr)をClaudeに返す
  4. セッション状態がコマンド間で持続(環境変数、作業ディレクトリ)

パラメータ

パラメータ必須説明
commandはい*実行するbashコマンド
restartいいえbashセッションを再起動するにはtrueに設定

*restartを使用しない限り必須

例:マルチステップ自動化

Claudeは複雑なタスクを完了するためにコマンドをチェーンできます:

# ユーザーリクエスト
"requestsライブラリをインストールし、APIからジョークを取得するシンプルなPythonスクリプトを作成して実行してください。"

# 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セッションが再起動されました"
        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"コマンドに危険なパターンが含まれています: {pattern}"
    
    # 必要に応じてさらなる検証を追加
    return True, None

エラーの処理

bashツールを実装する際、さまざまなエラーシナリオを処理します:

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

セキュリティ

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ツールはテキストエディタや他のツールと組み合わせることで最も強力になります。

次のステップ