Claudeは、Anthropicが定義したテキストエディタツールを使用して、テキストファイルの表示や修正を行い、コードやその他のテキスト文書のデバッグ、修正、改善を支援できます。これにより、Claudeはファイルと直接やり取りし、変更を提案するだけでなく実際に手を動かして支援することができます。

テキストエディタツールを使用する前に

互換性のあるモデルを使用する

Anthropicのテキストエディタツールは複数のClaudeモデルで利用可能です:

  • Claude 4 Opus & Sonnet: text_editor_20250429
  • Claude Sonnet 3.7: text_editor_20250124
  • Claude Sonnet 3.5: text_editor_20241022

Claude 4モデル向けの新しいtext_editor_20250429にはundo_editコマンドが含まれていません。この機能が必要な場合は、Claude 3.7またはSonnet 3.5をそれぞれのツールバージョンで使用する必要があります。

ユースケースの適合性を評価する

テキストエディタツールを使用する例としては以下のようなものがあります:

  • コードデバッグ: Claudeに構文エラーからロジックの問題まで、コードのバグを特定して修正してもらいます。
  • コードリファクタリング: Claudeに的確な編集を通じてコード構造、可読性、パフォーマンスを改善してもらいます。
  • ドキュメント生成: Claudeにコードベースにdocstring、コメント、READMEファイルを追加してもらいます。
  • テスト作成: Claudeに実装の理解に基づいてコードの単体テストを作成してもらいます。

テキストエディタツールを使用する

Messages APIを使用してテキストエディタツール(str_replace_based_edit_toolという名前)をClaudeに提供します:

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-20250514",
    max_tokens=1024,
    tools=[
        {
            "type": "text_editor_20250429",
            "name": "str_replace_based_edit_tool"
        }
    ],
    messages=[
        {
            "role": "user", 
            "content": "There's a syntax error in my primes.py file. Can you help me fix it?"
        }
    ]
)

テキストエディタツールは以下のように使用できます:

1

テキストエディタツールとユーザープロンプトをClaudeに提供する

  • APIリクエストにテキストエディタツールを含める
  • 「コードの構文エラーを修正できますか?」などのファイルの検査や修正が必要なユーザープロンプトを提供する
2

Claudeがツールを使用してファイルやディレクトリを検査する

  • Claudeは何を見る必要があるかを評価し、viewコマンドを使用してファイルの内容を調べたりディレクトリの内容を一覧表示したりする
  • APIレスポンスにはviewコマンドを含むtool_useコンテンツブロックが含まれる
3

viewコマンドを実行して結果を返す

  • Claudeのツール使用リクエストからファイルまたはディレクトリのパスを抽出する
  • ファイルの内容を読み取るかディレクトリの内容を一覧表示し、それをClaudeに返す
  • tool_resultコンテンツブロックを含む新しいuserメッセージで会話を続けることで、結果をClaudeに返す
4

Claudeがツールを使用してファイルを修正する

  • ファイルやディレクトリを検査した後、Claudeは変更を加えるためにstr_replaceコマンドや特定の行番号にテキストを追加するためのinsertコマンドなどを使用することがある
  • Claudeがstr_replaceコマンドを使用する場合、古いテキストと置き換える新しいテキストを含む適切にフォーマットされたツール使用リクエストを構築する
5

編集を実行して結果を返す

  • Claudeのツール使用リクエストからファイルパス、古いテキスト、新しいテキストを抽出する
  • ファイル内のテキスト置換を実行する
  • 結果をClaudeに返す
6

Claudeが分析と説明を提供する

  • ファイルを検査し、場合によっては編集した後、Claudeは発見したことと行った変更について完全な説明を提供する

テキストエディタツールのコマンド

テキストエディタツールはファイルの表示と修正のためにいくつかのコマンドをサポートしています:

view

viewコマンドを使用すると、Claudeはファイルの内容を調べたり、ディレクトリの内容を一覧表示したりできます。ファイル全体または特定の行範囲を読み取ることができます。

パラメータ:

  • command: “view”でなければならない
  • path: 表示するファイルまたはディレクトリへのパス
  • view_range (オプション): 表示する開始行と終了行の番号を指定する2つの整数の配列。行番号は1から始まり、終了行が-1の場合はファイルの最後まで読み取ることを意味します。このパラメータはディレクトリではなくファイルを表示する場合にのみ適用されます。

str_replace

str_replaceコマンドを使用すると、Claudeはファイル内の特定の文字列を新しい文字列に置き換えることができます。これは正確な編集を行うために使用されます。

パラメータ:

  • command: “str_replace”でなければならない
  • path: 修正するファイルへのパス
  • old_str: 置き換えるテキスト(空白やインデントを含め、正確に一致する必要がある)
  • new_str: 古いテキストの代わりに挿入する新しいテキスト

create

createコマンドを使用すると、Claudeは指定された内容で新しいファイルを作成できます。

パラメータ:

  • command: “create”でなければならない
  • path: 新しいファイルを作成する場所へのパス
  • file_text: 新しいファイルに書き込む内容

insert

insertコマンドを使用すると、Claudeはファイル内の特定の位置にテキストを挿入できます。

パラメータ:

  • command: “insert”でなければならない
  • path: 修正するファイルへのパス
  • insert_line: テキストを挿入する行番号(ファイルの先頭の場合は0)
  • new_str: 挿入するテキスト

undo_edit

undo_editコマンドを使用すると、Claudeはファイルに対して行われた最後の編集を元に戻すことができます。

このコマンドはClaude Sonnet 3.7とClaude Sonnet 3.5でのみ利用可能です。Claude 4モデルのtext_editor_20250429ではサポートされていません。

パラメータ:

  • command: “undo_edit”でなければならない
  • path: 最後の編集を元に戻すファイルへのパス

例:テキストエディタツールを使用した構文エラーの修正

この例では、Claude 4がテキストエディタツールを使用してPythonファイルの構文エラーを修正する方法を示しています。

まず、アプリケーションはテキストエディタツールと構文エラーを修正するためのプロンプトをClaudeに提供します:

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-20250514",
    max_tokens=1024,
    tools=[
        {
            "type": "text_editor_20250429",
            "name": "str_replace_based_edit_tool"
        }
    ],
    messages=[
        {
            "role": "user", 
            "content": "There's a syntax error in my primes.py file. Can you help me fix it?"
        }
    ]
)

print(response)

Claudeはまずテキストエディタツールを使用してファイルを表示します:

{
  "id": "msg_01XAbCDeFgHiJkLmNoPQrStU",
  "model": "claude-opus-4-20250514",
  "stop_reason": "tool_use",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "I'll help you fix the syntax error in your primes.py file. First, let me take a look at the file to identify the issue."
    },
    {
      "type": "tool_use",
      "id": "toolu_01AbCdEfGhIjKlMnOpQrStU",
      "name": "str_replace_based_edit_tool",
      "input": {
        "command": "view",
        "path": "primes.py"
      }
    }
  ]
}

アプリケーションはファイルを読み取り、その内容をClaudeに返します:

response = client.messages.create(
    model="claude-opus-4-20250514",
    max_tokens=1024,
    tools=[
        {
            "type": "text_editor_20250429",
            "name": "str_replace_based_edit_tool"
        }
    ],
    messages=[
        {
            "role": "user", 
            "content": "There's a syntax error in my primes.py file. Can you help me fix it?"
        },
        {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "I'll help you fix the syntax error in your primes.py file. First, let me take a look at the file to identify the issue."
                },
                {
                    "type": "tool_use",
                    "id": "toolu_01AbCdEfGhIjKlMnOpQrStU",
                    "name": "str_replace_based_edit_tool",
                    "input": {
                        "command": "view",
                        "path": "primes.py"
                    }
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "type": "tool_result",
                    "tool_use_id": "toolu_01AbCdEfGhIjKlMnOpQrStU",
                    "content": "1: def is_prime(n):\n2:     \"\"\"Check if a number is prime.\"\"\"\n3:     if n <= 1:\n4:         return False\n5:     if n <= 3:\n6:         return True\n7:     if n % 2 == 0 or n % 3 == 0:\n8:         return False\n9:     i = 5\n10:     while i * i <= n:\n11:         if n % i == 0 or n % (i + 2) == 0:\n12:             return False\n13:         i += 6\n14:     return True\n15: \n16: def get_primes(limit):\n17:     \"\"\"Generate a list of prime numbers up to the given limit.\"\"\"\n18:     primes = []\n19:     for num in range(2, limit + 1)\n20:         if is_prime(num):\n21:             primes.append(num)\n22:     return primes\n23: \n24: def main():\n25:     \"\"\"Main function to demonstrate prime number generation.\"\"\"\n26:     limit = 100\n27:     prime_list = get_primes(limit)\n28:     print(f\"Prime numbers up to {limit}:\")\n29:     print(prime_list)\n30:     print(f\"Found {len(prime_list)} prime numbers.\")\n31: \n32: if __name__ == \"__main__\":\n33:     main()"
                }
            ]
        }
    ]
)

行番号

上記の例では、viewツールの結果には各行の先頭に行番号が付加されたファイルの内容が含まれています(例:「1: def is_prime(n):」)。行番号は必須ではありませんが、view_rangeパラメータを使用してファイルの特定のセクションを調べたり、insert_lineパラメータを使用して正確な位置にコンテンツを追加したりするために不可欠です。

Claudeは構文エラーを特定し、str_replaceコマンドを使用して修正します:

{
  "id": "msg_01VwXyZAbCdEfGhIjKlMnO",
  "model": "claude-opus-4-20250514",
  "stop_reason": "tool_use",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "I found the syntax error in your primes.py file. In the `get_primes` function, there is a missing colon (:) at the end of the for loop line. Let me fix that for you."
    },
    {
      "type": "tool_use",
      "id": "toolu_01PqRsTuVwXyZAbCdEfGh",
      "name": "str_replace_based_edit_tool",
      "input": {
        "command": "str_replace",
        "path": "primes.py",
        "old_str": "    for num in range(2, limit + 1)",
        "new_str": "    for num in range(2, limit + 1):"
      }
    }
  ]
}

アプリケーションは編集を行い、結果を返します:

response = client.messages.create(
    model="claude-opus-4-20250514",
    max_tokens=1024,
    tools=[
        {
            "type": "text_editor_20250429",
            "name": "str_replace_based_edit_tool"
        }
    ],
    messages=[
        # 前のメッセージ...
        {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "I found the syntax error in your primes.py file. In the `get_primes` function, there is a missing colon (:) at the end of the for loop line. Let me fix that for you."
                },
                {
                    "type": "tool_use",
                    "id": "toolu_01PqRsTuVwXyZAbCdEfGh",
                    "name": "str_replace_based_edit_tool",
                    "input": {
                        "command": "str_replace",
                        "path": "primes.py",
                        "old_str": "    for num in range(2, limit + 1)",
                        "new_str": "    for num in range(2, limit + 1):"
                    }
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "type": "tool_result",
                    "tool_use_id": "toolu_01PqRsTuVwXyZAbCdEfGh",
                    "content": "Successfully replaced text at exactly one location."
                }
            ]
        }
    ]
)

最後に、Claudeは修正の完全な説明を提供します:

{
  "id": "msg_01IjKlMnOpQrStUvWxYzAb",
  "model": "claude-opus-4-20250514",
  "stop_reason": "end_turn",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "I've fixed the syntax error in your primes.py file. The issue was in the `get_primes` function at line 19. There was a missing colon (:) at the end of the for loop line.\n\nHere's what I changed:\n\nFrom:\n```python\nfor num in range(2, limit + 1)\n```\n\nTo:\n```python\nfor num in range(2, limit + 1):\n```\n\nIn Python, a colon is required at the end of statements that start a new code block, such as for loops, if statements, function definitions, etc. Without the colon, Python raises a syntax error because it doesn't know where the code block begins.\n\nYour code should now run correctly. The function will properly generate a list of prime numbers up to the specified limit."
    }
  ]
}

テキストエディタツールを実装する

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

ツールタイプはモデルバージョンによって異なります:

  • Claude 4: type: "text_editor_20250429"
  • Claude Sonnet 3.7: type: "text_editor_20250124"
  • Claude Sonnet 3.5: type: "text_editor_20241022"
1

エディタ実装を初期化する

ファイルの読み取り、書き込み、修正などのファイル操作を処理するヘルパー関数を作成します。ミスから回復するためのバックアップ機能の実装を検討してください。

2

エディタツール呼び出しを処理する

コマンドタイプに基づいてClaudeからのツール呼び出しを処理する関数を作成します:

def handle_editor_tool(tool_call, model_version):
    input_params = tool_call.input
    command = input_params.get('command', '')
    file_path = input_params.get('path', '')
    
    if command == 'view':
        # ファイルの内容を読み取って返す
        pass
    elif command == 'str_replace':
        # ファイル内のテキストを置き換える
        pass
    elif command == 'create':
        # 新しいファイルを作成する
        pass
    elif command == 'insert':
        # 指定位置にテキストを挿入する
        pass
    elif command == 'undo_edit':
        # Claude 4モデルかどうかを確認する
        if 'str_replace_based_edit_tool' in model_version:
            return {"error": "undo_edit command is not supported in Claude 4"}
        # Claude 3.7/3.5のバックアップから復元する
        pass
3

セキュリティ対策を実装する

検証とセキュリティチェックを追加します:

  • ディレクトリトラバーサルを防ぐためのファイルパスの検証
  • 変更を加える前のバックアップの作成
  • エラーの適切な処理
  • 権限チェックの実装
4

Claudeのレスポンスを処理する

Claudeのレスポンスからツール呼び出しを抽出して処理します:

# Claudeのレスポンス内のツール使用を処理する
for content in response.content:
    if content.type == "tool_use":
        # コマンドに基づいてツールを実行する
        result = handle_editor_tool(content)
        
        # 結果をClaudeに返す
        tool_result = {
            "type": "tool_result",
            "tool_use_id": content.id,
            "content": result
        }

テキストエディタツールを実装する際は、以下の点に注意してください:

  1. セキュリティ: このツールはローカルファイルシステムにアクセスできるため、適切なセキュリティ対策を実装してください。
  2. バックアップ: 重要なファイルの編集を許可する前に、常にバックアップを作成してください。
  3. 検証: 意図しない変更を防ぐために、すべての入力を検証してください。
  4. 一意のマッチング: 意図しない編集を避けるために、置換が正確に1か所にマッチすることを確認してください。

エラーを処理する

テキストエディタツールを使用する際、さまざまなエラーが発生する可能性があります。以下はそれらを処理するためのガイダンスです:

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


価格とトークン使用量

テキストエディタツールは、Claudeで使用される他のツールと同じ価格構造を使用します。使用しているClaudeモデルに基づく標準的な入力および出力トークンの価格に従います。

基本トークンに加えて、テキストエディタツールには以下の追加入力トークンが必要です:

ツール追加入力トークン
text_editor_20250429 (Claude 4)700トークン
text_editor_20250124 (Claude Sonnet 3.7)700トークン
text_editor_20241022 (Claude Sonnet 3.5)700トークン

ツールの価格に関する詳細情報については、ツール使用の価格を参照してください。

テキストエディタツールをコンピュータ使用と統合する

テキストエディタツールはコンピュータ使用ツールや他のAnthropicが定義したツールと一緒に使用できます。これらのツールを組み合わせる場合は、以下の点に注意する必要があります:

  1. 適切なベータヘッダーを含める(コンピュータ使用と一緒に使用する場合)
  2. ツールバージョンを使用しているモデルと一致させる
  3. リクエストに含まれるすべてのツールの追加トークン使用量を考慮する

コンピュータ使用のコンテキストでテキストエディタツールを使用する方法の詳細については、コンピュータ使用を参照してください。

変更履歴

日付バージョン変更内容
2025年4月29日text_editor_20250429Claude 4用テキストエディタツールのリリース。このバージョンではundo_editコマンドが削除されましたが、他のすべての機能は維持されています。ツール名はstr_replaceベースのアーキテクチャを反映するように更新されました。
2025年3月13日text_editor_20250124スタンドアロンのテキストエディタツールドキュメントの導入。このバージョンはClaude Sonnet 3.7向けに最適化されていますが、前のバージョンと同じ機能を持っています。
2024年10月22日text_editor_20241022Claude Sonnet 3.5でのテキストエディタツールの初回リリース。viewcreatestr_replaceinsertundo_editコマンドを通じてファイルの表示、作成、編集機能を提供します。

次のステップ

テキストエディタツールをより便利で強力な方法で使用するためのいくつかのアイデアを紹介します:

  • 開発ワークフローとの統合: テキストエディタツールを開発ツールやIDEに組み込む
  • コードレビューシステムの作成: Claudeにコードをレビューして改善してもらう
  • デバッグアシスタントの構築: Claudeがコードの問題を診断して修正するのを手伝うシステムを作成する
  • ファイル形式変換の実装: Claudeにファイルをある形式から別の形式に変換するのを手伝ってもらう
  • ドキュメント自動化: Claudeがコードを自動的にドキュメント化するワークフローを設定する

テキストエディタツールを使用してアプリケーションを構築する際、Claudeの機能を活用して開発ワークフローと生産性を向上させる方法を見るのを楽しみにしています。