Loading...
  • ビルド
  • 管理
  • モデルと料金
  • クライアントSDK
  • APIリファレンス
Search...
⌘K
Log in
Bashツール
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
ビルド/ツール

Bashツール

Claudeがシェルコマンドを実行できるBashツールについて学びます

This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.

Bashツールを使用すると、Claudeは永続的なbashセッションでシェルコマンドを実行でき、システム操作、スクリプト実行、コマンドラインの自動化が可能になります。シェルアクセスはエージェント機能の基礎です。シェルのみの検証を使用して実世界のターミナルタスクを評価するベンチマークであるTerminal-Bench 2.0では、Claudeは永続的なbashセッションへのアクセスにより強いパフォーマンス向上を示しています。

概要

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

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

モデルサポートについては、ツールリファレンスを参照してください。

ユースケース

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

クイックスタート

import anthropic

client = anthropic.Anthropic()

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

print(response)

動作方法

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

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

パラメータ

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

*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. 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. 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. 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. 4

    セキュリティ対策を実装

    検証と制限を追加します。ブロックリストはバイパスが容易なため、許可リストを使用します。チェーンされたコマンドが許可リストを通過できないようにシェルオペレータを拒否します:

    import shlex
    
    ALLOWED_COMMANDS = {"ls", "cat", "echo", "pwd", "grep", "find", "wc", "head", "tail"}
    SHELL_OPERATORS = {"&&", "||", "|", ";", "&", ">", "<", ">>"}
    
    
    def validate_command(command):
        # 明示的な許可リストからのコマンドのみを許可
        try:
            tokens = shlex.split(command)
        except ValueError:
            return False, "Could not parse command"
    
        if not tokens:
            return False, "Empty command"
    
        executable = tokens[0]
        if executable not in ALLOWED_COMMANDS:
            return False, f"Command '{executable}' is not in the allowlist"
    
        # 追加コマンドをチェーンするシェルオペレータを拒否
        for token in tokens[1:]:
            if token in SHELL_OPERATORS or token.startswith(("$", "`")):
                return False, f"Shell operator '{token}' is not allowed"
    
        return True, None

    このチェックは最初の防御線です。より強力な分離のため、検証されたコマンドをshell=Falseで実行し、shlex.split(command)を引数リストとして渡します。これにより、シェルが文字列を解釈することはありません。

エラーを処理

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"

Gitベースのチェックポイント

Gitは長時間実行されるエージェントワークフローで構造化された復旧メカニズムとして機能し、単なる変更を保存する方法ではありません:

  • ベースラインをキャプチャ: エージェント作業が始まる前に、現在の状態をコミットします。これが既知の良好な開始点です。
  • 機能ごとにコミット: 完了した各機能は独自のコミットを取得します。後で問題が発生した場合、これらはロールバックポイントとして機能します。
  • セッション開始時に状態を再構築: git logを進捗ファイルと一緒に読んで、既に完了したことと次に何をするかを理解します。
  • 失敗時にリバート: 作業がうまくいかない場合、壊れた状態をデバッグしようとする代わりに、git checkoutで最後の良好なコミットに戻します。

ファイル操作

  • データ処理: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アプリケーションなし: コマンドラインのみ
  • セッションスコープ: Bashセッション状態はクライアント側です。APIはステートレスです。アプリケーションはターン間でシェルセッションを保持する責任があります。
  • 出力制限: 大きな出力は切り詰められる可能性があります
  • ストリーミングなし: 完了後に結果が返されます

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

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

コード実行ツールも使用している場合、Claudeは2つの別々の実行環境にアクセスできます:ローカルbashセッションとAnthropicのサンドボックスコンテナです。状態はそれらの間で共有されません。他の実行ツールでコード実行を使用するを参照して、Claudeに環境を区別するよう促すガイダンスを確認してください。

次のステップ

ツール使用の概要

Claudeでのツール使用について学ぶ

テキストエディタツール

Claudeでテキストファイルを表示および編集

Was this page helpful?

  • Bashツールの実装