ast-grep について
ast-grepは、ast-grepルールの作成と利用に関するコミュニティ運営のベストプラクティススキルです。パターン設計、合成、書き換え、性能、ルール検証を案内します。
主な機能
- 018カテゴリ、46件のルール
- 02パターンとメタ変数のガイド
- 03ルール合成と制約設計
- 04書き換えの正確性に関する実践
- 05性能最適化とデバッグの助言
活用シーン
- 01コード検索やlint用ルールの作成
- 02一致しないパターンのデバッグ
- 03大規模コードベースのスキャン最適化
- 04ルールプロジェクトの整理とテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill ast-grepインストール後、Claude Code で/ast-grepを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonREADME.mdassets/templates/_template.mdreferences/_sections.mdcompose-all-for-and-logic.mdcompose-any-for-or-logic.mdcompose-field-targeting.mdcompose-has-for-children.mdcompose-inside-for-context.mdcompose-matches-for-reuse.mdcompose-not-for-exclusion.mdcompose-precedes-follows.mdconst-kind-filter.mdconst-not-inside-not.mdconst-pattern-constraint.mdconst-post-match-timing.mdconst-regex-filter.mdmeta-multi-match-lazy.mdmeta-named-vs-unnamed.mdmeta-naming-convention.mdmeta-reuse-binding.mdmeta-single-node.mdmeta-underscore-noncapture.mdorg-file-filtering.mdorg-message-clarity.mdorg-project-structure.mdorg-severity-levels.mdorg-unique-rule-ids.mdpattern-avoid-comments-strings.md詳細
ast-grep コミュニティのベストプラクティス
ast-grep のルール作成と使用に関する包括的なベストプラクティスガイドです。ast-grep コミュニティによって管理されています。8 つのカテゴリにわたる 46 個のルールを収録し、影響度に基づいて優先順位を付けることで、自動ルール生成とコード変換を支援します。
適用する場面
次のような場合に、これらのガイドラインを参照してください。
- lint や検索のために新しい ast-grep ルールを作成する
- 想定したコードに一致しないパターンをデバッグする
- 大規模なコードベースでルールのパフォーマンスを最適化する
- 適切に整理された ast-grep プロジェクトをセットアップする
- 正確性と保守性の観点から ast-grep ルールをレビューする
一般的なワークフロー
コード検索用の ast-grep ルールを作成する際は、次のワークフローに従ってください。
ステップ 1:クエリを理解する
何を検索したいのかを明確にします。
- 対象のプログラミング言語
- 対応するエッジケース
- 含める対象と除外する対象
ステップ 2:サンプルコードを作成する
目的の一致パターンを表すコードスニペットを作成します。
ステップ 3:ast-grep ルールを作成する
適切な方法を選択します。
- 単純な構造には
patternを使用します - 複雑な構造には
has/insideと組み合わせたkindを使用します - 複合クエリには
all、any、またはnotを組み合わせます - リレーショナルルールでは常に
stopBy: endを使用します(inside、has)。これにより、完全な検索が行われます
ステップ 4:ルールをテストする
# Inspect AST structure
ast-grep run --pattern '[code]' --lang [language] --debug-query=ast
# Test inline rule
echo "[code]" | ast-grep scan --inline-rules "[rule]" --stdin
# Test from file
ast-grep scan --rule [file.yml] [path]
ステップ 5:コードベースを検索する
検証済みのルールを適用します。
# Search with pattern (simple matches)
ast-grep run --pattern '[pattern]' --lang [language] [path]
# Search with rule file (complex queries)
ast-grep scan --rule [file.yml] [path]
# Apply fixes interactively
ast-grep scan --rule [file.yml] --interactive [path]
クイックヒント
- 常に
stopBy: endを使用する - リレーショナルルールでサブツリー全体を確実に走査します - シンプルに始めて、複雑さを加える - パターンから始め、kind、次にリレーショナルルールへと進みます
- AST の検査でデバッグする -
--debug-query=astを使用して、構造の一致を確認します - インラインルールではエスケープする - シェルコマンドでは
\$VARまたはシングルクォートを使用します - まずプレイグラウンドでテストする - 迅速に試行錯誤するには https://ast-grep.github.io/playground.html を使用します
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | パターンの正確性 | CRITICAL | pattern- |
| 2 | メタ変数の使用 | CRITICAL | meta- |
| 3 | ルールの構成 | HIGH | compose- |
| 4 | 制約の設計 | HIGH | const- |
| 5 | 書き換えの正確性 | MEDIUM-HIGH | rewrite- |
| 6 | プロジェクトの整理 | MEDIUM | org- |
| 7 | パフォーマンスの最適化 | MEDIUM | perf- |
| 8 | テストとデバッグ | LOW-MEDIUM | test- |
クイックリファレンス
1. パターンの正確性(CRITICAL)
pattern-valid-syntax- パターンには有効な解析可能なコードを使用するpattern-language-aware- 言語固有の構文の違いを考慮するpattern-context-selector- コードフラグメントにはコンテキストとセレクターを使用するpattern-avoid-comments-strings- コメントや文字列の内部に一致させないpattern-strictness-levels- パターンの厳密さを適切に設定するpattern-kind-vs-pattern- 必要な具体性に応じて kind または pattern を選択するpattern-debug-ast- デバッグクエリを使用して AST 構造を検査するpattern-nthchild-matching- インデックスに基づく位置の一致には nthChild を使用するpattern-range-matching- 文字位置の一致には range を使用する
2. メタ変数の使用(重大)
meta-naming-convention- メタ変数の命名規則に従いますmeta-single-node- メタ変数を使って単一の AST ノードに一致させますmeta-reuse-binding- 等価性を強制するためにメタ変数を再利用しますmeta-underscore-noncapture- キャプチャしない一致にはアンダースコアの接頭辞を使用しますmeta-named-vs-unnamed- 名前のないノードに一致させるには二重のドル記号を使用しますmeta-multi-match-lazy- 複数一致する変数が遅延評価されることを理解します
3. ルールの合成(高)
compose-all-for-and-logic- ルール間の AND ロジックには all を使用しますcompose-any-for-or-logic- ルール間の OR ロジックには any を使用しますcompose-not-for-exclusion- 除外パターンには not を使用しますcompose-inside-for-context- コンテキストに応じた一致には inside を使用しますcompose-has-for-children- 子ノードの要件には has を使用しますcompose-matches-for-reuse- ルールを再利用するには matches を使用しますcompose-precedes-follows- 順序の位置指定には precedes と follows を使用しますcompose-field-targeting- 特定のサブノードを対象にするには field を使用します
4. 制約の設計(高)
const-kind-filter- メタ変数を絞り込むには kind 制約を使用しますconst-regex-filter- テキストパターンには regex 制約を使用しますconst-not-inside-not- not ルール内で制約を使用しないでくださいconst-pattern-constraint- 構造による絞り込みには pattern 制約を使用しますconst-post-match-timing- 制約が一致後に適用されることを理解します
5. 書き換えの正確性(中〜高)
rewrite-preserve-semantics- 書き換え時にプログラムのセマンティクスを維持しますrewrite-meta-variable-reference- fix ですべての必要なメタ変数を参照しますrewrite-transform-operations- 複雑な書き換えには transform を使用しますrewrite-test-before-deploy- 代表的なコードで書き換えをテストしますrewrite-syntax-validity- fix テンプレートが有効な構文を生成することを確認します
6. プロジェクトの整理(中)
org-project-structure- 標準的なプロジェクトディレクトリ構造を使用しますorg-unique-rule-ids- 一意でわかりやすいルール ID を使用しますorg-severity-levels- 適切な重大度レベルを設定しますorg-file-filtering- 対象を絞ったルールにはファイルフィルタリングを使用しますorg-message-clarity- 明確で実行可能なメッセージを記述します
7. パフォーマンスの最適化(中)
perf-specific-patterns- 汎用的なパターンよりも具体的なパターンを使用しますperf-stopby-boundaries- 検索の深さを制限するには stopBy を使用しますperf-thread-parallelism- スレッドによる並列スキャンを活用しますperf-avoid-regex-heavy- 処理頻度の高い箇所では重い正規表現を避けます
8. テストとデバッグ(低〜中)
test-valid-invalid-cases- 有効なテストケースと無効なテストケースの両方を作成しますtest-snapshot-updates- 修正の検証にスナップショットテストを使用しますtest-playground-first- まずプレイグラウンドでパターンをテストしますtest-edge-cases- エッジケースと境界条件をテストします
使用方法
詳しい説明とコード例については、各リファレンスファイルをお読みください。
- セクションの定義 - カテゴリーの構成と影響レベル
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
完全版のコンパイル済みドキュメント
- AGENTS.md - すべてのルールを含む完全版のコンパイル済みガイド
リファレンスファイル
| ファイル | 説明 |
|---|---|
| AGENTS.md | すべてのルールを含む完全版のコンパイル済みガイド |
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルールのテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応