原文(日本語に翻訳)
PostToolUse の保存時フォーマットフックが連続する編集の間にファイルを書き換えた場合に、Edit/Write が「ファイル内容が変更されました」で失敗する問題を修正
原文(英語)
Fixed Edit/Write failing with "File content has changed" when a PostToolUse format-on-save hook rewrites the file between consecutive edits
概要
PostToolUse フックでフォーマッター(Prettier、gofmtなど)を設定している環境で、連続してファイルを編集する際に "File content has changed" エラーが発生するバグが修正されました。フォーマッターがファイルを書き換えた後、次の編集操作でファイルの状態が一致しないと判断されてエラーになっていました。v2.1.90 以降では、フォーマット後のファイル状態を正しく認識して連続編集が可能です。
基本的な使い方
修正内容はバグフィックスのため、特別な操作は不要です。v2.1.90 にアップデートすることで、フォーマットフックと連続編集が正常に動作するようになります。
典型的な PostToolUse フォーマット設定例:
json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "prettier --write $CLAUDE_TOOL_RESULT_FILE_PATH"
}
]
}
]
}
}実践例
Prettier設定プロジェクトでの連続編集
JavaScriptプロジェクトでPrettierを使用している場合:
json
// settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"command": "prettier --write \"${CLAUDE_TOOL_INPUT_file_path}\""
}
]
}
]
}
}v2.1.90 以降では、Prettierがファイルをフォーマットした後も続けて同じファイルを編集できます。
Go プロジェクトでの gofmt 連携
json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "gofmt -w \"${CLAUDE_TOOL_INPUT_file_path}\""
}
]
}
]
}
}Python プロジェクトでの Black/isort 連携
json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "black \"${CLAUDE_TOOL_INPUT_file_path}\" && isort \"${CLAUDE_TOOL_INPUT_file_path}\""
}
]
}
]
}
}注意点
- このバグは
PostToolUseフックでファイルを書き換えるフォーマッターを使用していた場合にのみ発生していました - v2.1.90 以降では、フォーマット後のファイル内容を正しく追跡するため、このエラーは発生しません
- フォーマッターがファイルを変更する設定を使用している場合は、早めにアップデートを推奨します