Communityコーディング&開発github.com

ast-grep 構造的コード検索

ast-grepによる構造的コード検索 — コードの形状や要素間の関係が重要で、単なるテキスト一致ではない場合に使用します。例:「エラーハンドリングのない非同期関数を検索」「foo(a, b) を foo({ a, b }) にリファクタリング」。単純な名前検索には Grep を使用してください。

ast-grep 構造的コード検索 とは?

このスキルは、ast-grep を用いた構造的コード検索と一括リファクタリングを支援します。単なるテキストパターンではなく、ASTノードの種類や親子関係(has, inside)を指定することで、コードの意味構造に基づいた柔軟な検索が可能です。主に Claude Code や Cursor などのAIエージェント環境で使用され、開発者は「エラーハンドリングのない非同期関数を探す」「特定のメソッド呼び出しを別のシグネチャに変換する」といった複雑なクエリを記述できます。スキルには、ルール作成手順、よくある落とし穴(stopBy: end の必須指定、シェルでのメタ変数エスケープ、メタ変数の制約)、--stdin を使ったテスト方法、--debug-query によるASTデバッグ手法が含まれています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jlholm/noodle/tree/HEAD/.agents/skills/ast-grep

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ast-grep

ワークフロー

  1. ターゲットコードを表すテストスニペットを書く
  2. ルールを書く(pattern から始め、必要に応じて kind + has/inside に拡張する)
  3. コードベースを検索する前に --stdin でテストする
  4. ルールがマッチしたらコードベースを検索する

重要な落とし穴

関係ルールでは常に stopBy: end を使用する

これがないと、has/inside は完全なサブツリーを走査せず、最初にマッチしないノードで停止します:

# 間違い — 深くネストされたマッチを見逃す
has:
  pattern: await $EXPR

# 正しい
has:
  pattern: await $EXPR
  stopBy: end

シェルでメタ変数をエスケープする

$VAR はシェルによって解釈されます。エスケープするか、シングルクォートで囲んでください:

# ダブルクォート:バックスラッシュでエスケープ
ast-grep scan --inline-rules "id: test
language: javascript
rule:
  pattern: await \$EXPR" .

# シングルクォート:エスケープ不要
ast-grep scan --inline-rules 'id: test
language: javascript
rule:
  pattern: await $EXPR' .

メタ変数はASTノードの唯一の内容でなければならない

これらは機能しません:obj.on$EVENT、"Hello $WORLD"、a $OP b、$jq

名前のないノード(演算子、句読点)には $$OP を使用してください。0個以上のノードには $$$ARGS を使用してください。

--stdin によるテスト

echo "async function test() { await fetch(); }" | ast-grep scan --inline-rules 'id: test
language: javascript
rule:
  kind: function_declaration
  has:
    pattern: await $EXPR
    stopBy: end' --stdin

--debug-query によるデバッグ

ルールがマッチしない場合、ASTを調査して正しい kind 値を見つけてください:

ast-grep run --pattern 'your code here' --lang javascript --debug-query=cst

フォーマット:cst(全ノード)、ast(名前付きのみ)、pattern(ast-grep がパターンをどのように認識しているか)。

ルール構文

完全なルールリファレンス(アトミックルール、関係ルール、複合ルール、メタ変数)については references/rule_reference.md を参照してください。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

関連スキル