0Pricing
AI Agents · レッスン

コーディング用ツールのインターフェース(Read、Edit、Bash)

コードエージェントに必要な最小限のツールは、ファイルの読み取り、ファイルの編集、シェルの実行、テストの実行です。

「コーディング用ツールのインターフェース(Read、Edit、Bash)」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

コードエージェントに必要なツールとは

最低限必要なのは次のとおりです:

  1. read_file — コードを見る
  2. edit_file/write_file — コードを変更する
  3. bash — シェルコマンド(テスト、ビルド)を実行する
  4. search/grep — 文字列またはシンボルでコードを検索する

read_file

def read_file(path: str, start_line: int = 0, end_line: int | None = None) -> str:
    with open(path) as f:
        lines = f.readlines()
    return ''.join(lines[start_line:end_line])

# --- demo ---
with open('demo_source.py', 'w', encoding='utf-8') as f:
    f.write('line0\nline1\nline2\nline3\nline4\n')

snippet = read_file('demo_source.py', start_line=1, end_line=3)
print('Lines 1-2 of demo_source.py:')
print(snippet)

行範囲を指定した読み取りでトークンを節約する

大きなファイルでは、関連する範囲だけを読み取ります。呼び出しごとにファイル全体を読む場合と比べて、大幅にトークンを節約できます。

edit_file(文字列置換)

Anthropicのstr_replaceパターンでは、ファイル内の一意の文字列を見つけて置き換えます:

def edit_file(path: str, old_string: str, new_string: str):
    contents = read_file(path)
    occurrences = contents.count(old_string)
    if occurrences == 0:
        raise ValueError('old_string not found')
    if occurrences > 1:
        raise ValueError('old_string is not unique')
    contents = contents.replace(old_string, new_string)
    with open(path, 'w') as f:
        f.write(contents)

差分より文字列置換を使う理由

  • 有効な差分構文を生成するより、モデルにとって簡単
  • モデルに実際のコードを確認させられる(幻覚の検出に役立つ)
  • 曖昧な場合はエラーになる

Claude Codeで使用されている形式です。

write_file

新しいファイルを作成する場合に使用します:

def write_file(path: str, content: str):
    os.makedirs(os.path.dirname(path), exist_ok=True)
    with open(path, 'w') as f:
        f.write(content)

bash

テスト、ビルド、パッケージのインストールに使用するシェルコマンド:

def bash(command: str, timeout: int = 60) -> dict:
    import subprocess
    try:
        result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=timeout)
        return {'stdout': result.stdout[-5000:], 'stderr': result.stderr[-5000:], 'exit_code': result.returncode}
    except subprocess.TimeoutExpired:
        return {'error': 'timeout', 'exit_code': -1}

# --- demo ---
result = bash("echo hello from the sandboxed shell")
print(f"exit_code={result['exit_code']}")
print(f"stdout={result['stdout'].strip()!r}")

bashツールをサンドボックス化する

ホスト上でbashを実行してはいけません。Docker/Firecracker/E2Bを使用してください(サンドボックス化については前のコースを参照してください)。

長い出力を切り詰める

テストの失敗では、数メガバイトもの出力が発生することがあります。最後の数KBに切り詰めてください。通常、実際のエラーはそこに含まれています:

stderr = 'error line\n' * 1000

if len(stderr) > 5000:
    stderr = '...[truncated]...' + stderr[-5000:]

print(f'Truncated stderr length: {len(stderr)}')

search / grep

def grep(pattern: str, path: str = '.', file_glob: str = '**/*') -> list[str]:
    matches = []
    for f in glob(file_glob, recursive=True):
        for i, line in enumerate(open(f)):
            if re.search(pattern, line):
                matches.append(f'{f}:{i+1}: {line.rstrip()}')
    return matches[:50]

list_files

def list_files(path: str = '.') -> list[str]:
    return [p for p in glob(f'{path}/**', recursive=True) if os.path.isfile(p)][:200]

オプション:ASTツール

コードをより深く理解するには:

def find_function(name: str, path: str):
    tree = ast.parse(open(path).read())
    for node in ast.walk(tree):
        if isinstance(node, ast.FunctionDef) and node.name == name:
            return ast.unparse(node)

ここではツールの説明が最も重要

コードエージェントは、チャットエージェントよりも頻繁に間違ったツールを選びます。説明の作成に特に時間をかけてください:

description='Edit a file by replacing a unique string. The old_string MUST appear exactly once in the file. Reads the file first to validate. Use this for any code change in an existing file.'

これがツールセット全体です

Read、edit、write、bash、grep、list。この6つのツールがあれば、エージェントはほぼあらゆるソフトウェアエンジニアリングのタスクを実行できます。専門的なツールを追加するのは、効果を測定できる場合に限ってください。

編集パターン

「string-replace」編集は、「send full file」編集より安全なのはなぜですか?

まとめ

Read、edit (str_replace)、write、bash、grep、list。適切に説明し、サンドボックス化した6つのツールがあれば、ほぼあらゆるコーディングエージェントに十分です。

よくある質問

「コーディング用ツールのインターフェース(Read、Edit、Bash)」レッスンは無料ですか?

はい。「コーディング用ツールのインターフェース(Read、Edit、Bash)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。

「コーディング用ツールのインターフェース(Read、Edit、Bash)」で何を学びますか?

コードエージェントに必要な最小限のツールは、ファイルの読み取り、ファイルの編集、シェルの実行、テストの実行です。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Agentsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「コーディング用ツールのインターフェース(Read、Edit、Bash)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Agentsレッスンでコードを書いて実行できますか?

はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Agenticパターン:計画・実行・検証
  2. コーディング用ツールのインターフェース(Read、Edit、Bash)
  3. 反復的な自己修正ループ
  4. SWE-AgentとOpenDevinのアーキテクチャ
← AI Agentsに戻る