ast-grep について
ast-grep はコード構造の理解を使用して、コードの検索、リント、変換を行います。パターンマッチングは構文レベルで機能し、複数のプログラミング言語に対応しています。
主な機能
- 01構文認識パターンマッチングでコードを検索
- 02カスタムルールに基づいてコードをリントして問題を報告
- 03プロジェクト全体でコードパターンを大規模に書き換え
活用シーン
- 01大規模なコードベースで特定のコードパターンを検出
- 02プロジェクト横断的なコード品質基準を強制
- 03大規模なコード移行とリファクタリングを自動化
インストール
OS またはパッケージマネージャーを選び、コマンドをターミナルで実行します。
インストール後にast-grep --versionを実行して確認します。
コマンド例
よく使うコマンドを使う順に並べています。
詳細
ast-grep(sg)
ast-grep(sg)は、コードの構造検索、リント、書き換えを行うCLIツールです。
はじめに
ast-grepは、抽象構文木に基づいて、パターンを使ってコードを検索するツールです。昔からおなじみのgrepを、テキストではなくASTノードにマッチさせるものと考えてください。
通常のコードを書くようにパターンを記述できます。同じ構文構造を持つコードすべてにマッチします。
$記号と大文字を組み合わせて、たとえば$MATCHのようなワイルドカードを使うと、任意の単一ASTノードにマッチさせられます。テキストではない点を除けば、正規表現のドット.のようなものです。
まずはオンラインプレイグラウンドをお試しください!
スクリーンショット

その他のスクリーンショットはウェブサイトをご覧ください。
インストール
npm、pip、cargo、 cargo-binstall、homebrew、scoop、mise、またはMacPortsからインストールできます!
npm install --global @ast-grep/cli
# `pnpm approve-builds` may be needed
pip install ast-grep-cli
brew install ast-grep
クリックしてその他のインストール方法を表示
cargo install ast-grep --locked
cargo binstall ast-grep
# install via scoop, thank @brian6932
scoop install main/ast-grep
# install via MacPorts
sudo port install ast-grep
# try ast-grep in nix-shell
nix-shell -p ast-grep
# try ast-grep with mise
mise use -g ast-grep
ast-grepをソースからビルドすることもできます。rustupをインストールしてリポジトリをクローンした後、次のコマンドを実行してください。
cargo install --path ./crates/cli --locked
パッケージは、ほかのプラットフォームでも利用できます。
コマンドラインの使用例
ast-grepは次の形式で使用します。
ast-grep --pattern 'var code = $PATTERN' --rewrite 'let code = new $PATTERN' --lang ts
例
ast-grep -p '$A && $A()' -l ts -r '$A?.()'
ast-grep -p 'new Zodios($URL, $CONF as const,)' -l ts -r 'new Zodios($URL, $CONF)' -i
スポンサー
ast-grepが興味深く、仕事に役立つと感じたら、コーヒーをごちそうしてください。 そうすれば、このプロジェクトにより多くの時間を費やせます!
機能の概要
ast-grepの中核は、tree-sitterが生成する抽象構文木に基づいて、コードを検索・置換するアルゴリズムです。 直感的な方法で、軽量な静的解析や大規模なコード操作を行えます。
主な特長:
-
ASTを検索・置換するための直感的なパターン。 ast-grepのパターンは、日常的に書く通常のコードのように見えます(パターンはコードと同型だと言えます)。
-
ASTを走査・操作するためのjQueryのようなAPI。
-
新しいリンティングルールやコード変更を記述するためのYAML設定。
-
コンパイル言語で記述され、tree-sitterベースの解析とマルチコアを活用しています。
-
美しいコマンドラインインターフェース :)
ast-grepは、抽象構文木の魔法を誰もが使えるようにし、煩雑なASTプログラミングから人々を解放することを目指しています!
- オープンソースライブラリの作者であれば、ast-grepを使って、ライブラリのユーザーが破壊的変更へスムーズに対応できるよう支援できます。
- チームのテックリードであれば、ビジネスニーズに合わせたコーディングのベストプラクティスを徹底するのにast-grepを活用できます。
- セキュリティ研究者であれば、ast-grepを使ってルールをより迅速に記述できます。