mcpField
A
ast-grep-code-analysis

ast-grep-code-analysis

github.com/zenobi-usテスト・品質6860 回インストール今日更新
リポジトリ

ast-grep-code-analysis について

ast-grep の構造パターンで複数ファイルの問題を探すコード分析スキルです。特に複雑なコードベースや大規模なコードベースで、安全性、パフォーマンス、構造のレビューを体系化します。

主な機能

  1. 01AST パターンによるコード照合
  2. 02セキュリティ関連パターンの分析
  3. 03React フックなどの性能パターン確認
  4. 04深いネストなど構造上の問題検出
  5. 05ルールセットの実行と JSON レポート生成

活用シーン

  1. 01大規模コードベースからハードコードされた秘密情報を検索
  2. 02React コードのフック依存関係パターンを確認
  3. 03複数ファイルから深くネストした制御フローを検出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/zenobi-us/dotfiles --skill ast-grep-code-analysis

インストール後、Claude Code で/ast-grep-code-analysisを入力して読み込まれたか確認します。

詳細

AST-Grep コード分析

メモ

このスキルを使用するには、開発環境に as-grep がインストールされ、設定されている必要があります。インストールされていない場合は、mise -g --pin ast-grep を使用できます。

概要

AST-Grep コード分析では、抽象構文木(AST)のパターンマッチングを使用してコードの問題を体系的に特定し、手作業での行単位の確認を構造的なパターン認識に置き換えます。

基本原則:コードの構造からは、表面的に読むだけでは得られない情報がわかります。AST パターンによって、手作業での確認では見逃される隠れた関係性、セキュリティ上の脆弱性、アーキテクチャ上の問題を明らかにできます。

使用する場面

digraph when_to_use {
    "Need to analyze code?" [shape=diamond];
    "Complex/nested structure?" [shape=diamond];
    "Security review needed?" [shape=diamond];
    "Performance analysis?" [shape=diamond];
    "Use ast-grep patterns" [shape=box];
    "Manual review sufficient" [shape=box];

    "Need to analyze code?" -> "Complex/nested structure?" [label="yes"];
    "Complex/nested structure?" -> "Security review needed?" [label="yes"];
    "Security review needed?" -> "Performance analysis?" [label="yes"];
    "Performance analysis?" -> "Use ast-grep patterns" [label="yes"];
    "Complex/nested structure?" -> "Manual review sufficient" [label="no"];
    "Security review needed?" -> "Manual review sufficient" [label="no"];
    "Performance analysis?" -> "Manual review sufficient" [label="no"];
}

次の場合に使用します:

  • コードにネストされた関数、複雑な制御フロー、複数の抽象化レイヤーがある
  • セキュリティレビューが必要である(認証、認可、データ処理)
  • パフォーマンス分析が必要である(React フック、ループ、非同期パターン)
  • 手作業での確認が現実的でない大規模なコードベースである
  • 複数のファイルにまたがるパターンを特定する必要がある
  • 時間的な制約があり、場当たり的な分析より体系的なアプローチが求められる

次の場合は使用しないでください:

  • 単純でわかりやすいコード(50 行未満)
  • 構造が明白な単一ファイルのユーティリティ
  • タスクにざっと目を通すだけで十分な場合

基本パターン

変更前(手作業での確認):

// Agent manually reads line by line
if (data[i].admin) {
  userObj.token = generateToken(data[i].id); // "This looks insecure"
}

変更後(AST パターンマッチング):

# ast-grep rule: insecure-token-generation
rule:
  pattern: |
    function $FUNC($ARGS) {
      const secret = $SECRET;
      return btoa(JSON.stringify($PAYLOAD) + '.' + $SECRET);
    }
  meta:
    severity: ERROR
    message: "Hardcoded secret in token generation"

クイックリファレンス

分析の種類AST パターンの着眼点よく見つかる問題
セキュリティ暗号関数内の文字列リテラルハードコードされたシークレット、脆弱な暗号化
パフォーマンスReact フックの依存関係無限の再レンダリング、メモリリーク
構造関数のネストの深さ複雑な制御フロー、保守性
データフロー変数の代入と使用未使用の変数、暗黙の依存関係

実装

インストールとセットアップ
# Install ast-grep
npm install -g @ast-grep/cli

# Initialize configuration
ast-grep init

# Create rules directory
mkdir -p sg-rules/security sg-rules/performance sg-rules/structure
基本的なセキュリティパターン

ハードコードされたシークレットの検出:

# sg-rules/security/hardcoded-secrets.yml
id: hardcoded-secrets
language: javascript
rule:
  pattern: |
    const $VAR = '$LITERAL';
    $FUNC($VAR, ...)
  meta:
    severity: ERROR
    message: "Potential hardcoded secret detected"

安全でないトークン生成:

# sg-rules/security/insecure-tokens.yml
id: insecure-token-generation
language: javascript
rule:
  pattern: |
    btoa(JSON.stringify($OBJ) + '.' + $SECRET)
  meta:
    severity: ERROR
    message: "Insecure token generation using base64"
パフォーマンスパターンの検出

React フックの依存関係:

# sg-rules/performance/react-hook-deps.yml
id: react-hook-dependency-array
language: typescript
rule:
  pattern: |
    useEffect(() => {
      $BODY
    }, [$FUNC])
  meta:
    severity: WARNING
    message: "Function dependency in useEffect may cause infinite re-renders"

useCallback による最適化の欠落:

# sg-rules/performance/missing-use-callback.yml
id: missing-use-callback
language: typescript
rule:
  pattern: |
    const $FUNC = ($ARGS) => {
      $BODY
    };
  inside:
    kind: function_declaration
    has:
      kind: arrow_function
  meta:
    severity: INFO
    message: "Consider wrapping function in useCallback for optimization"
構造分析パターン

深いネストの検出:

# sg-rules/structure/deep-nesting.yml
id: deep-nesting
language: javascript
rule:
  any:
    - pattern: |
        if ($COND1) {
          if ($COND2) {
            if ($COND3) {
              $BODY
            }
          }
        }
    - pattern: |
        for ($INIT) {
          for ($INIT2) {
            for ($INIT3) {
              $BODY
            }
          }
        }
  meta:
    severity: WARNING
    message: "Deep nesting detected - consider refactoring"
分析の実行
# Run all security rules
ast-grep run -r sg-rules/security/

# Run performance analysis on React components
ast-grep run -r sg-rules/performance/ --include="*.tsx,*.jsx"

# Generate comprehensive report
ast-grep run -r sg-rules/ --format=json > analysis-report.json

# Interactive analysis
ast-grep run -r sg-rules/ --interactive

よくある間違い

間違い発生する理由修正方法
パターンが汎用的すぎるあらゆるものを検出しようとする具体的で影響の大きいパターンに絞る
コンテキストの見落としパターンが周囲のコードを考慮していないinside と has の制約を使う
誤検出マッチングの範囲が広すぎるnot で否定の制約を追加する
言語固有の想定JavaScript のパターンを TypeScript に適用する言語ごとに別々のルールを作成する
重大度の優先順位付けがないすべての問題をエラーとして扱う適切な重大度レベルを使用する

実際の効果

AST 分析を導入する前:

  • 手作業でのコードレビュー:中規模のコードベースで 2~3 時間
  • 見落とされるセキュリティ上の脆弱性:40~60%
  • レビュアー間で分析に一貫性がない
  • パターン検出に体系的な方法がない

AST 分析を導入した後:

  • パターンの自動検出:5~10 分
  • セキュリティ上の脆弱性の検出率:90%以上
  • 一貫性があり、繰り返し実行できる分析
  • 既知のアンチパターンを網羅的に検出

結果の例:

$ ast-grep run -r sg-rules/
src/components/UserProfile.jsx:15: ERROR [insecure-tokens] Insecure token generation
src/hooks/useAuth.js:8: ERROR [hardcoded-secrets] Potential hardcoded secret
src/components/UserProfile.jsx:23: WARNING [react-hook-deps] Function dependency may cause re-renders
src/utils/processData.js:45: WARNING [deep-nesting] Deep nesting detected

Found 4 issues (2 errors, 2 warnings)

統合ワークフロー

  1. セットアップ:セキュリティ、パフォーマンス、構造のルールセットを作成する
  2. ベースライン:既存のコードベースで分析を実行し、パターンを確立する
  3. 反復:誤検出や検出漏れに基づいてルールを改善する
  4. 自動化:継続的な分析のため、CI/CD パイプラインに統合する
  5. 監視:問題が時間とともに減少しているか追跡する

必要な基礎知識:AST の概念、パターンマッチング、コード構造分析への理解。AST パターンによって、手作業での確認では見逃されるものを明らかにできます。体系的で、網羅的で、繰り返し実行できるコード分析を実現します。

コメント