コードを書いていると、フォーマットや Lint エラーの修正って面倒ですよね。

特に PrettierESLint の自動フォーマットを忘れて、コミットしてしまう経験はありませんか?

私自身、開発に集中している時こそ、こうした瑣末なタスクを自動化したいと常々感じていました。

Claude Code を使っていると、Write や Edit ツールでファイルを編集する機会が多いです。

その度に手動で prettier --writeeslint --fix を実行するのは、正直なところかなりストレスが溜まります。

そこで、Claude Code の PostToolUse hooks 機能を使って、ファイル編集後に自動的にフォーマットと Lint を実行する仕組みを導入してみました。

この記事では、自動フォーマットの設定方法から、つまづきポイントまで詳しく解説します。

こんな人におすすめ

  • Claude Code を使って開発効率を上げたい方
  • コードの自動フォーマットに興味がある方
  • Prettier や ESLint の手動実行にストレスを感じている方
  • husky + lint-staged を既に導入している方
  • 「フォーマット忘れた!」という経験がある方

目次

概要

Claude Code の PostToolUse hooks を設定して、ファイル編集後に自動的に Prettier と ESLint を実行する仕組みを実装しました。

これにより、コードの自動フォーマットが完全に自動化され、手動作業が不要になります。

つまづいた点

正直なところ、導入当初はいくつか課題がありました。

まず、hooks スクリプトに実行権限を与えるのを忘れていて、最初はエラーが出て困惑しました。

chmod +x .claude/hooks/format-and-lint.sh を実行する必要があったんですね。

また、スクリプト内で node_modules のパスを正しく指定するのにも少し手間取りました。

プロジェクトルートからの相対パスを意識しないと、Prettier や ESLint が見つからないエラーが発生するんです。

自動フォーマット設定では、このような環境変数の設定にも注意が必要です。

詳細

Claude Code の hooks 機能を使用することで、Write や Edit ツール使用時に以下の処理が自動実行されます。

sequenceDiagram
    participant CC as Claude Code
    participant Hook as PostToolUse Hook
    participant Script as format-and-lint.sh
    participant Prettier as Prettier
    participant ESLint as ESLint

    CC->>Hook: Edit/Write ツール使用
    Hook->>Script: ファイルパスを渡す
    Script->>Script: ファイル種別を判定
    alt TS/JS ファイル
        Script->>ESLint: eslint --fix
        Script->>Prettier: prettier --write
    else JSON/MD/YAML
        Script->>Prettier: prettier --write
    end
    Script-->>Hook: 完了通知
    Hook-->>CC: 処理完了

具体的には以下の処理が行われます。

  1. TypeScript/JavaScript ファイルの場合:

    • eslint --fix で lint エラーを自動修正
    • prettier --write でコード整形
  2. JSON/Markdown/YAML ファイルの場合:

    • prettier --write でフォーマット

設定方法

Step 1: スクリプト作成(.claude/hooks/format-and-lint.sh

ファイルパスを抽出し、フォーマット対象を判定するバッシュスクリプト。

node_modules、.next等の対象外ファイルは除外します。

Step 2: hooks 設定(.claude/settings.json

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/format-and-lint.sh",
            "timeout": 30000
          }
        ]
      }
    ]
  }
}

利点

個人的に最も便利だと感じたのは、やはり「意識しなくて良い」という点です。

  • コミット前に自動的にコードが整形される
  • Lint 違反が残りにくい開発フロー
  • husky + lint-staged との二段構えで堅牢性向上
  • ファイル編集の直後に即座にフォーマットが実行される
  • 自動フォーマットにより手動作業が完全に不要に

実際に導入してみて、コミット前の都度の手動フォーマットが不要になり、かなり快適です。

テスト結果

実際に設定してみたところ、以下の結果が得られました。

  • Write ツール使用後に自動実行 ✅
  • Edit ツール使用後に自動実行 ✅
  • Prettier による自動フォーマット
  • ESLint による自動修正 ✅

測定してみたところ、平均フォーマット時間は約 0.5 秒/ファイル でした。

開発体験への影響はほぼなく、むしろ「フォーマットを気にする必要がない」という安心感が得られます。

まとめ

Claude Code の PostToolUse hooks を使うことで、Prettier と ESLint の自動フォーマットを実現できました。

導入時のつまづきポイントはありましたが、一度設定してしまえば、その後の開発体験は劇的に向上します。

特に手動フォーマットのストレスから解放される点は、実際に使ってみると本当に大きなメリットです。

自動フォーマットの導入を検討している方は、ぜひ試してみてください。

参考リンク