# Edit

既存ファイル内で完全一致の文字列置換を実行します。差分のみが送信されるため、正確で監査可能な編集ができる、ファイル変更の推奨方法です。

## 使用タイミング

- 周囲のファイルを書き直さずに単一関数のバグを修正
- 設定値、バージョン文字列、インポートパスを更新
- `replace_all` を使ってファイル全体でシンボルをリネーム
- アンカー付近にブロックを挿入 (`old_string` を拡張して近隣の文脈を含め、置換を提供)
- マルチステップのリファクタリングの一部として、小さく範囲を限定した編集を適用

## パラメータ

- `file_path` (string, required): 変更するファイルの絶対パス。
- `old_string` (string, required): 検索する正確なテキスト。空白とインデントを含め、文字単位で一致する必要があります。
- `new_string` (string, required): 置換テキスト。`old_string` と異なる必要があります。
- `replace_all` (boolean, optional): `true` の場合、`old_string` のすべての出現を置換します。デフォルトは `false` で、一致が一意であることが要求されます。

## 例

### 例 1: 単一の呼び出し箇所を修正
`old_string` を正確な行 `const port = 3000;` に、`new_string` を `const port = process.env.PORT ?? 3000;` に設定します。一致が一意なので `replace_all` はデフォルトのままで構いません。

### 例 2: ファイル全体でシンボルをリネーム
`api.ts` 内のすべての `getUser` を `fetchUser` にリネームするには、`old_string: "getUser"`、`new_string: "fetchUser"`、`replace_all: true` を設定します。

### 例 3: 繰り返されるスニペットの曖昧性解消
`return null;` が複数のブランチに現れる場合、`old_string` を拡張して周囲の文脈 (例えば先行する `if` 行) を含め、一致を一意にしてください。そうしなければツールは推測せずエラーを返します。

## 注意事項

- 現在のセッションで `Edit` が変更を受け付ける前に、ファイルに対して `Read` を少なくとも 1 回呼び出す必要があります。`Read` 出力の行番号プレフィックスはファイル内容の一部ではありません。`old_string` や `new_string` に含めないでください。
- 空白は正確に一致する必要があります。特に YAML、Makefile、Python ではタブとスペース、末尾スペースに注意してください。
- `old_string` が一意でなく、`replace_all` が `false` の場合、編集は失敗します。コンテキストを拡張するか `replace_all` を有効にしてください。
- 既存ファイルには `Write` よりも `Edit` を優先してください。`Write` はファイル全体を上書きし、注意しないと無関係な内容を失います。
- 同じファイル内の複数の無関係な編集には、1 つの大きく壊れやすい置換ではなく、複数の `Edit` 呼び出しを順次発行してください。
- ソースファイルの編集時に、絵文字、マーケティング文、要求されていないドキュメントブロックを追加しないでください。
