~/adventure-log/2025/07/claude-code-hooks-automation-guide
テックこのページは原文を AI が翻訳したものです。

Claude Codeのフックでフォーマットとリンティングを自動化する

Claude Codeのフックを使って、ファイルが変更されるたびにコードフォーマットやリンティングのコマンド(mix formatやprettierなど)を自動実行する方法について。

公開
読了時間
3 分
タグ
AIClaude Code

Claude Codeで作業していると、AIが編集するたびに手動でフォーマッター(mix format、prettier、rubocop)やリンターを実行するのがすぐに面倒になってきます。

Claude Codeにはフックという仕組みがあり、ツールがファイルの編集を終えた直後など、ワークフローの重要なポイントで指定したシェルコマンドを自動的に実行できます。

ここでは、その設定方法と、私がプロジェクトでどう使っているかを紹介します。

設定のスコープ

フックはClaude Codeの設定JSONファイルで構成します。スコープには3つのレベルがあります:

  • ~/.claude/settings.json — グローバルなユーザー設定(すべてのプロジェクトに適用)
  • .claude/settings.json — プロジェクト設定(gitにコミットされ、チームメンバーと共有)
  • .claude/settings.local.json — ローカルプロジェクトの上書き(gitignoreされ、個人のマシンのみ)

基本設定:ファイル編集時のフォーマット

Claude Codeがファイルを変更するたびにmix formatのようなフォーマッターを実行するには、PostToolUseフックをEditツールのマッチャー付きで設定します:

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit",
        "hooks": [
          {
            "type": "command",
            "command": "mix format"
          }
        ]
      }
    ]
  }
}

これを.claude/settings.jsonに設定しておけば、フォーマットされていないコードが差分に混入する心配がなくなります。

トリガーポイントとマッチャー

Claude Codeにはいくつかのトリガーポイントがあります:

  • PreToolUse:ツールが実行される前に動作。ログ記録や検証に便利です。
  • PostToolUse:ツールが正常に完了した後に動作。フォーマッターやリンターに最適です。
  • Stop:Claudeがプロンプトへの応答を終えたときに動作。
  • Notification:Claudeが通知を送信するときにトリガーされます。

matcherフィールドは、どのツールがフックをトリガーするかを制御します:

  • "matcher": "Edit":ファイル編集時のみトリガー。
  • "matcher": "Edit|Write":複数のツールに一致する正規表現(部分編集とファイル全体の書き込みの両方など)。
  • "matcher": "Bash":コマンド実行時にトリガー。
  • マッチャーを省略:そのトリガーポイントのすべてのイベントで実行。

複数コマンドの例

単一のトリガーの下に複数のコマンドを連鎖させることができます。たとえば、ファイルが変更されるたびにフォーマッターと厳格なリンターの両方を実行し、さらにシェルコマンドのログ記録も行う場合:

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "mix format"
          },
          {
            "type": "command",
            "command": "mix credo --strict"
          }
        ]
      }
    ],
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo \"[$(date)] Running: $CLAUDE_TOOL_INPUT\" >> .claude/command_log.txt"
          }
        ]
      }
    ]
  }
}

まとめ

プロジェクトのデフォルトフォーマッター用にシンプルなPostToolUseフックを設定するのは2分で済み、AI支援による編集後の手動クリーンアップの手間がなくなります。複数の言語を扱う場合は、言語に依存しない設定をユーザー設定に置き、プロジェクト固有のリンターを.claude/settings.jsonに設定することで、クリーンで予測可能な状態を保てます。

収集品を手に入れた· Item get

No.010

幽光の水晶

ノーマル

地方
霧の秘境
生息地
AI · Claude Code
発見日
冒険時間
3 分 · これまでに 1 人の旅人が訪れた

この冒険を読み終えて手に入れた。読む人が増えるほど、レア度が上がる。

Epona
執筆Epona

There's nothing wrong with having a little fun

x.com/simura_epona

関連記事Nearby quests

コメントを読み込み中…