ClaudeはAnthropic定義のテキストエディタツールを使用してテキストファイルを表示・変更し、コードやその他のテキストドキュメントのデバッグ、修正、改善を支援できます。これにより、Claudeはファイルと直接やり取りし、単に変更を提案するだけでなく、実践的な支援を提供できます。

モデル互換性

モデルツールバージョン
Claude 4.x モデルtext_editor_20250728
Claude Sonnet 3.7text_editor_20250124
Claude Sonnet 3.5 (非推奨)text_editor_20241022
Claude Sonnet 3.5 (非推奨)では、テキストエディタツールを使用する際にcomputer-use-2024-10-22ベータヘッダーが必要です。テキストエディタツールは、Claude 4モデルとClaude Sonnet 3.7で一般利用可能です。
Claude 4モデル用のtext_editor_20250728ツールにはundo_editコマンドが含まれていません。この機能が必要な場合は、それぞれのツールバージョンでClaude Sonnet 3.7またはSonnet 3.5を使用する必要があります。
古いツールバージョンは新しいモデルとの後方互換性が保証されていません。常にモデルバージョンに対応するツールバージョンを使用してください。

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

テキストエディタツールを使用する場面の例:
  • コードデバッグ: Claudeにコードのバグを特定・修正してもらう(構文エラーからロジックの問題まで)
  • コードリファクタリング: Claudeに対象を絞った編集を通じてコード構造、可読性、パフォーマンスを改善してもらう
  • ドキュメント生成: Claudeにコードベースにdocstring、コメント、READMEファイルを追加してもらう
  • テスト作成: Claudeに実装の理解に基づいてコードの単体テストを作成してもらう

テキストエディタツールの使用

Messages APIを使用してテキストエディタツール(str_replace_based_edit_toolという名前)をClaudeに提供します。大きなファイルを表示する際の切り捨てを制御するために、オプションでmax_charactersパラメータを指定できます。
max_characterstext_editor_20250728以降のバージョンのテキストエディタツールでのみ互換性があります。
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": "text_editor_20250728",
        "name": "str_replace_based_edit_tool",
        "max_characters": 10000
      }
    ],
    "messages": [
      {
        "role": "user",
        "content": "primes.pyファイルに構文エラーがあります。修正を手伝ってもらえますか?"
      }
    ]
  }'
テキストエディタツールは以下の方法で使用できます:
1

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

  • APIリクエストにテキストエディタツールを含める
  • ファイルの検査や変更が必要な可能性があるユーザープロンプトを提供する(例:「コードの構文エラーを修正してもらえますか?」)
2

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

  • Claudeは何を確認する必要があるかを評価し、viewコマンドを使用してファイル内容を検査したり、ディレクトリ内容をリストアップしたりする
  • APIレスポンスにはviewコマンドを含むtool_useコンテンツブロックが含まれる
3

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

  • Claudeのツール使用リクエストからファイルまたはディレクトリパスを抽出する
  • ファイルの内容を読み取るか、ディレクトリの内容をリストアップする
  • ツール設定でmax_charactersパラメータが指定されている場合は、ファイル内容をその長さまで切り捨てる
  • tool_resultコンテンツブロックを含む新しいuserメッセージで会話を続けることで、結果をClaudeに返す
4

Claudeがツールを使用してファイルを変更

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

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

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

Claudeが分析と説明を提供

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

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

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

view

viewコマンドにより、Claudeはファイルの内容を検査したり、ディレクトリの内容をリストアップしたりできます。ファイル全体または特定の行範囲を読み取ることができます。 パラメータ:
  • command: “view”である必要があります
  • path: 表示するファイルまたはディレクトリのパス
  • view_range(オプション): 表示する開始行番号と終了行番号を指定する2つの整数の配列。行番号は1から始まり、終了行の-1はファイルの最後まで読み取ることを意味します。このパラメータはファイルを表示する場合にのみ適用され、ディレクトリには適用されません。
// ファイルを表示する例
{
  "type": "tool_use",
  "id": "toolu_01A09q90qw90lq917835lq9",
  "name": "str_replace_editor",
  "input": {
    "command": "view",
    "path": "primes.py"
  }
}

// ディレクトリを表示する例
{
  "type": "tool_use",
  "id": "toolu_02B19r91rw91mr917835mr9",
  "name": "str_replace_editor",
  "input": {
    "command": "view",
    "path": "src/"
  }
}

str_replace

str_replaceコマンドにより、Claudeはファイル内の特定の文字列を新しい文字列で置き換えることができます。これは正確な編集を行うために使用されます。 パラメータ:
  • command: “str_replace”である必要があります
  • path: 変更するファイルのパス
  • old_str: 置き換えるテキスト(空白とインデントを含めて正確に一致する必要があります)
  • new_str: 古いテキストの代わりに挿入する新しいテキスト
{
  "type": "tool_use",
  "id": "toolu_01A09q90qw90lq917835lq9",
  "name": "str_replace_editor",
  "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):"
  }
}

create

createコマンドにより、Claudeは指定された内容で新しいファイルを作成できます。 パラメータ:
  • command: “create”である必要があります
  • path: 新しいファイルを作成する場所のパス
  • file_text: 新しいファイルに書き込む内容
{
  "type": "tool_use",
  "id": "toolu_01A09q90qw90lq917835lq9",
  "name": "str_replace_editor",
  "input": {
    "command": "create",
    "path": "test_primes.py",
    "file_text": "import unittest\nimport primes\n\nclass TestPrimes(unittest.TestCase):\n    def test_is_prime(self):\n        self.assertTrue(primes.is_prime(2))\n        self.assertTrue(primes.is_prime(3))\n        self.assertFalse(primes.is_prime(4))\n\nif __name__ == '__main__':\n    unittest.main()"
  }
}

insert

insertコマンドにより、Claudeはファイル内の特定の場所にテキストを挿入できます。 パラメータ:
  • command: “insert”である必要があります
  • path: 変更するファイルのパス
  • insert_line: テキストを挿入する行番号(ファイルの先頭の場合は0)
  • new_str: 挿入するテキスト
{
  "type": "tool_use",
  "id": "toolu_01A09q90qw90lq917835lq9",
  "name": "str_replace_editor",
  "input": {
    "command": "insert",
    "path": "primes.py",
    "insert_line": 0,
    "new_str": "\"\"\"Module for working with prime numbers.\n\nThis module provides functions to check if a number is prime\nand to generate a list of prime numbers up to a given limit.\n\"\"\"\n"
  }
}

undo_edit

undo_editコマンドにより、Claudeはファイルに対して行われた最後の編集を元に戻すことができます。
このコマンドはClaude Sonnet 3.7とClaude Sonnet 3.5(非推奨)でのみ利用可能です。text_editor_20250728を使用するClaude 4モデルではサポートされていません。
パラメータ:
  • command: “undo_edit”である必要があります
  • path: 最後の編集を元に戻すファイルのパス
{
  "type": "tool_use",
  "id": "toolu_01A09q90qw90lq917835lq9",
  "name": "str_replace_editor",
  "input": {
    "command": "undo_edit",
    "path": "primes.py"
  }
}

例:テキストエディタツールで構文エラーを修正

この例では、Claude 4モデルがテキストエディタツールを使用してPythonファイルの構文エラーを修正する方法を示します。まず、アプリケーションがClaudeにテキストエディタツールと構文エラー修正のプロンプトを提供します:
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": "text_editor_20250728",
        "name": "str_replace_based_edit_tool"
      }
    ],
    "messages": [
      {
        "role": "user",
        "content": "primes.pyファイルに構文エラーがあります。修正を手伝ってもらえますか?"
      }
    ]
  }'
Claudeは最初にテキストエディタツールを使用してファイルを表示します:
{
  "id": "msg_01XAbCDeFgHiJkLmNoPQrStU",
  "model": "claude-sonnet-4-5",
  "stop_reason": "tool_use",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "primes.pyファイルの構文エラーの修正をお手伝いします。まず、ファイルを確認して問題を特定しましょう。"
    },
    {
      "type": "tool_use",
      "id": "toolu_01AbCdEfGhIjKlMnOpQrStU",
      "name": "str_replace_based_edit_tool",
      "input": {
        "command": "view",
        "path": "primes.py"
      }
    }
  ]
}
アプリケーションはファイルを読み取り、その内容をClaudeに返す必要があります:
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": "text_editor_20250728",
        "name": "str_replace_based_edit_tool"
      }
    ],
    "messages": [
      {
        "role": "user",
        "content": "primes.pyファイルに構文エラーがあります。修正を手伝ってもらえますか?"
      },
      {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "primes.pyファイルの構文エラーの修正をお手伝いします。まず、ファイルを確認して問題を特定しましょう。"
                },
                {
                    "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-sonnet-4-5",
  "stop_reason": "tool_use",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "primes.pyファイルの構文エラーを見つけました。`get_primes`関数で、forループ行の最後にコロン(:)が不足しています。修正いたします。"
    },
    {
      "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-sonnet-4-5",
    max_tokens=1024,
    tools=[
        {
            "type": "text_editor_20250728",
            "name": "str_replace_based_edit_tool"
        }
    ],
    messages=[
        # 前のメッセージ...
        {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "primes.pyファイルの構文エラーを見つけました。`get_primes`関数で、forループ行の最後にコロン(:)が不足しています。修正いたします。"
                },
                {
                    "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": "正確に1箇所でテキストの置換が成功しました。"
                }
            ]
        }
    ]
)
最後に、Claudeは修正の完全な説明を提供します:
{
  "id": "msg_01IjKlMnOpQrStUvWxYzAb",
  "model": "claude-sonnet-4-5",
  "stop_reason": "end_turn",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "primes.pyファイルの構文エラーを修正しました。問題は19行目の`get_primes`関数にありました。forループ行の最後にコロン(:)が不足していました。\n\n変更内容は以下の通りです:\n\n変更前:\n```python\nfor num in range(2, limit + 1)\n```\n\n変更後:\n```python\nfor num in range(2, limit + 1):\n```\n\nPythonでは、forループ、if文、関数定義など、新しいコードブロックを開始する文の最後にはコロンが必要です。コロンがないと、Pythonはコードブロックがどこから始まるかわからないため、構文エラーが発生します。\n\nコードは正常に動作するはずです。この関数は指定された制限まで素数のリストを適切に生成します。"
    }
  ]
}

テキストエディタツールの実装

テキストエディタツールはスキーマレスツールとして実装されています。このツールを使用する際、他のツールのように入力スキーマを提供する必要はありません。スキーマはClaudeのモデルに組み込まれており、変更できません。 ツールタイプはモデルバージョンによって異なります:
  • Claude 4: type: "text_editor_20250728"
  • 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コマンドは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が存在しないファイルを表示または変更しようとした場合、tool_resultで適切なエラーメッセージを返します:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "エラー: ファイルが見つかりません",
      "is_error": true
    }
  ]
}
Claudeのstr_replaceコマンドがファイル内の複数の場所にマッチした場合、適切なエラーメッセージを返します:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "エラー: 置換テキストに3つのマッチが見つかりました。一意のマッチを作るため、より多くのコンテキストを提供してください。",
      "is_error": true
    }
  ]
}
Claudeのstr_replaceコマンドがファイル内のテキストにマッチしない場合、適切なエラーメッセージを返します:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "エラー: 置換のマッチが見つかりません。テキストを確認して再試行してください。",
      "is_error": true
    }
  ]
}
ファイルの作成、読み取り、変更に権限の問題がある場合、適切なエラーメッセージを返します:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "エラー: 権限が拒否されました。ファイルに書き込めません。",
      "is_error": true
    }
  ]
}

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

Claudeにコードの修正や変更を依頼する際は、どのファイルを検査する必要があるか、どの問題に対処する必要があるかを具体的に指定してください。明確なコンテキストにより、Claudeは適切なファイルを特定し、適切な変更を行うことができます。あまり役に立たないプロンプト: 「コードを修正してもらえますか?」より良いプロンプト: 「primes.pyファイルに実行を妨げる構文エラーがあります。修正してもらえますか?」
特に複数のファイルや異なるディレクトリのファイルを扱う場合は、必要に応じてファイルパスを明確に指定してください。あまり役に立たないプロンプト: 「ヘルパーファイルをレビューしてください」より良いプロンプト: 「utils/helpers.pyファイルのパフォーマンスの問題をチェックしてもらえますか?」
特に重要なファイルや本番コードについて、Claudeによる編集を許可する前にファイルのコピーを作成するバックアップシステムをアプリケーションに実装してください。
def backup_file(file_path):
    """編集前にファイルのバックアップを作成します。"""
    backup_path = f"{file_path}.backup"
    if os.path.exists(file_path):
        with open(file_path, 'r') as src, open(backup_path, 'w') as dst:
            dst.write(src.read())
str_replaceコマンドは置き換えるテキストの正確なマッチを必要とします。アプリケーションは古いテキストに正確に1つのマッチがあることを確認するか、適切なエラーメッセージを提供する必要があります。
def safe_replace(file_path, old_text, new_text):
    """正確に1つのマッチがある場合のみテキストを置換します。"""
    with open(file_path, 'r') as f:
        content = f.read()
    
    count = content.count(old_text)
    if count == 0:
        return "エラー: マッチが見つかりません"
    elif count > 1:
        return f"エラー: {count}個のマッチが見つかりました"
    else:
        new_content = content.replace(old_text, new_text)
        with open(file_path, 'w') as f:
            f.write(new_content)
        return "テキストの置換が成功しました"
Claudeがファイルに変更を加えた後、テストを実行したり、コードが期待通りに動作することを確認したりして変更を検証してください。
def verify_changes(file_path):
    """変更後にテストやチェックを実行します。"""
    try:
        # Pythonファイルの場合、構文エラーをチェック
        if file_path.endswith('.py'):
            import ast
            with open(file_path, 'r') as f:
                ast.parse(f.read())
            return "構文チェックが通りました"
    except Exception as e:
        return f"検証に失敗しました: {str(e)}"

価格とトークン使用量

The text editor tool uses the same pricing structure as other tools used with Claude. It follows the standard input and output token pricing based on the Claude model you’re using. In addition to the base tokens, the following additional input tokens are needed for the text editor tool:
ToolAdditional input tokens
text_editor_20250429 (Claude 4)700 tokens
text_editor_20250124 (Claude Sonnet 3.7)700 tokens
text_editor_20241022 (Claude Sonnet 3.5 (deprecated))700 tokens
ツール価格の詳細については、ツール使用価格を参照してください。

テキストエディタツールと他のツールの統合

テキストエディタツールは他のClaudeツールと併用できます。ツールを組み合わせる際は、以下を確認してください:
  • 使用するモデルとツールバージョンを一致させる
  • リクエストに含まれるすべてのツールの追加トークン使用量を考慮する

変更ログ

日付バージョン変更内容
2025年7月28日text_editor_20250728いくつかの問題を修正し、オプションのmax_charactersパラメータを追加した更新版テキストエディタツールのリリース。それ以外はtext_editor_20250429と同一です。
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の機能を活用して開発ワークフローと生産性を向上させる方法を見るのを楽しみにしています。