Skip to content

原文(日本語に翻訳)

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 以降では、フォーマット後のファイル内容を正しく追跡するため、このエラーは発生しません
  • フォーマッターがファイルを変更する設定を使用している場合は、早めにアップデートを推奨します

関連情報