著者(deresmos氏)はAIコーディングエージェント(Claude Code)にプロジェクト固有のコーディング規約を守らせるため、コードの構文木(AST)にパターンマッチングをかけるツール「ast-grep」と、Claude Codeの「Hook」機能を組み合わせた仕組みを作りました。ast-grepはRust製で、YAMLでルールを定義でき、JavaScript、Go、Dartなど20以上の言語に対応します。
採用したのは「Stop Hook」方式です。検査スクリプト(.claude/hooks/run-ast-grep.sh)が違反を検出すると終了コード2を返し、エージェントの停止そのものをブロックして修正を強制します。「PostToolUse」方式では強制力がなく、修正されない確率が高いことが分かったためだといいます。
GoのValue Object生成やDartのWidget実装など、特定の違反パターンを禁止する規約を実際に導入したと紹介しています。テストにはast-grep test、スキャンにはast-grep scanのコマンドを使います。
出典が伝えている要点
- 著者(deresmos氏)は、AIエージェントに規約を守らせる仕組みをast-grepとClaude CodeのHookで作ったと述べている。
- ast-grepはコードの構文木(AST)に対してパターンマッチングを行うツールである。
- ast-grepの検査ルールはYAMLで定義できる。
- ast-grepはJavaScript、Go、Dartなど20以上の言語に対応している。
- ast-grepはRustで実装されている。
- 著者はClaude Codeの「Stop Hook」方式を採用した。
- 検査スクリプト(.claude/hooks/run-ast-grep.sh)が違反を検出すると終了コード2を返し、エージェントの停止をブロックする仕組みになっている。
- 著者は、PostToolUse方式では強制力がなく修正されない確率が高いことが判明したと述べている。
- ルール定義の例として rules/no-console-log.yml が挙げられている。
- テスト実行には ast-grep test --skip-snapshot-tests コマンドを使う。
- スキャンには ast-grep scan --config sgconfig.yml コマンドを使う。
- 著者はGoの値オブジェクト生成やDartのWidget実装において、特定の違反パターンを禁止する規約をこの仕組みで導入したと述べている。