🔧

Claude Code の EditorConfig 違反を PostToolUse Hook で自動修正する

に公開

はじめに

Claude Code が生成するコードで、以下のような EditorConfig のルール違反が発生していた。

  • 空白スペースが含まれる空行
  • 最終行に改行が入らない

CLAUDE.md で EditorConfig を参照するよう指示しても、実際には守られないことが多く効果的ではなかった。

解決方法

PostToolUse hookとeditorconfig-checkerを組み合わせることで、ファイル編集時に自動的にEditorConfigのルールチェックと修正を行う。

実装内容

1. editorconfig-checker のインストール (Mac)

brew install editorconfig-checker

2. Claude Code の設定

.claude/settings.json
{
  ...
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/editorconfig-autofix.sh"
          }
        ]
      }
    ]
  }
}

3. Hook スクリプト

.claude/hooks/editorconfig-autofix.sh
#!/bin/bash

input=$(cat)
file_path=$(echo "$input" | jq -r '.tool_input.file_path // empty')

if [ -n "$file_path" ] && [ -f "$file_path" ]; then
  if ! editorconfig-checker "$file_path" >/dev/null 2>&1; then
    echo "EditorConfig violations found in $file_path" >&2
    editorconfig-checker "$file_path" 2>&1 | head -20 >&2
    exit 2 # Claude Codeに違反を通知し、修正を促す
  fi
fi

動作フロー

  1. Claude Code がファイルを編集(Write/Edit/MultiEdit)
  2. PostToolUse hook から editorconfig-checker が実行される
  3. editorconfig-checker は EditorConfig のルール違反を検証(修正はしない)
  4. 違反が見つかった場合、エラーメッセージと共に exit 2 で終了
  5. Claude Code はエラー内容を認識し、自動的に違反箇所を修正
  6. 修正後、再度 hook が実行され、問題がなければ完了

Discussion