# MaguyvaのGroovy対応: GradleとJenkinsのコードグラフ

Canonical source: https://maguyva.ai/ja/languages/groovy

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

MaguyvaはAST、シンボル、グラフでGroovyに対応しています。AIエージェントはGroovyアプリ、Gradleビルド、Jenkinsfile全体で、クラス、クロージャー、呼び出しをたどれます。

## 対応状況スナップショット

- 対応レベル: AST・シンボル対応
- プログラミング
- 拡張子: .gradle, .groovy, .jenkinsfile
- 構文を考慮した検索と構造コンテキストのための実際のAST解析。
- 名前付きシンボルはセマンティック検索と相互参照に利用されます。関係抽出が有効な場合は、グラフナビゲーションも利用できます。
- この言語は、グラフを考慮した検索にシンボルと関係情報を提供します。対応するエッジの種類は、その言語固有の構文要素によって異なります。
- AST解析とシンボル抽出の両方に対応しています。

## 最適な用途

- 共有のビルドロジックが多くの `.gradle` ファイルに散らばる、Groovyで書かれたGradleビルド。
- CIを変更する前にエージェントが読む必要がある、Jenkinsパイプラインと共有ライブラリ。
- JVM上のGroovyアプリケーションとSpockのテストスイート。

## エージェントワークフロー

- 共有ライブラリのステップの引数を変更する前に、その呼び出し元をすべて見つける。
- 共通の `.gradle` ファイルで定義されたヘルパーを、どのビルドスクリプトが呼び出しているかを追跡する。
- リファクタリングの前に、基底クラスを継承しているクラスをマッピングする。

## Groovyが浅いAIツールをつまずかせるところ

Groovyはしばしば設定ファイルのように読めます。Gradleのビルドでは、`dependencies { implementation ... }` はクロージャーを伴うメソッド呼び出しの連なりで、宣言的なJenkinsfileも同じです。ビルダーは任意の名前を呼び出しに変え、GDKは `each` や `collect` のようなメソッドをすべてのオブジェクトに追加します。すべての呼び出しを記録するツールは、そのノイズに埋もれてしまいます。

MaguyvaはDSLとGDKの層を除外するため、あなた自身のメソッドとクラスが際立ちます。

## MaguyvaがGroovyで抽出するもの

Maguyvaは `.groovy` と `.gradle` ファイル、そして `Jenkinsfile` に対応しています。クラス、関数、メソッドが抽出され、インポートは `import static` と `as` のエイリアスを正規化します。呼び出し名からは末尾のクロージャーブロックと `?.` のセーフナビゲーション演算子が取り除かれるため、`repo?.save(order) { ... }` は `save` の呼び出しとして記録されます。クラス内のレシーバーなしの呼び出しは、そのクラス自身のメソッドに解決されます。

ノイズは段階的に除外されます。

- `dependencies`、`implementation`、`task`、`given`、`when`、`then`、`Mock` のような、約140個の標準ライブラリ、Gradle、Spockの名前。
- `each`、`collect`、`inject`、`eachLine` のような約260個のGDKメソッド。
- `pipeline`、`stage`、`steps`、`sh` のようなJenkinsのステップを含むビルダーDSLの名前。括弧付きで呼び出されるのではなく、ビルダー形式で使われる場合に除外されます。
- `@CompileStatic`、`@Immutable`、`@Autowired` のようなAST変換やフレームワークのアノテーション。これらが呼び出しとして記録されることはありません。

グラフには、継承、インスタンス化、読み取りと書き込みも記録されます。

## エージェントへのプロンプト例

- 「`deployToStaging` を呼び出しているのは誰で、どのパイプラインからか？」（`find_symbol`、次に `dependency_search` の incoming）
- 「`BaseIntegrationSpec` を継承しているクラスはどれか？」（`dependency_search`）
- 「リリースタスクがどのように成果物をビルドして公開するかを説明して。」（`get_task_context`）

## 既知の制限

- Groovyのメソッドと自由関数は同じ構文ノードを共有するため、`structural_search` の `methods` プリセットは何も選択しません。代わりに `functions` プリセットか `find_symbol` を使ってください。
- `collect` や `stage` のように、GDKやDSLのメソッドと同じ名前を持つユーザー定義のメソッドは、それらと一緒に除外されることがあります。呼び出し元が欠けているように見えるときは `text_pattern_search` を使ってください。

## 次のステップ

[クイックスタート](/ja/docs/quickstart)でリポジトリを接続し、[互換性ページ](/ja/docs/compatibility)で対応マトリクスを確認してください。ビルドがコンパイルするJVMのコードについては、[Javaガイド](/ja/languages/java)と[Kotlinガイド](/ja/languages/kotlin)をご覧ください。

## エンジンの詳細

- Groovyの対応は `.groovy`、`.gradle`、`Jenkinsfile` を含みます。呼び出し名からはクロージャーブロックと `?.` のセーフナビゲーションが取り除かれます。
- 約140個の標準ライブラリ、Gradle、Spockの名前と、約260個のGDKメソッドは関係性から除外されます。
- `stage` や `sh` のようなJenkinsのステップを含むビルダーDSLの名前はビルダー形式で除外され、アノテーションが呼び出しとして記録されることはありません。

## 役立つMCPエントリーポイント

- `find_symbol`: 定義と呼び出し元が必要なときに、共有ライブラリのステップ、ビルドヘルパー、クラスで使ってください。
- `dependency_search`: ビルドヘルパーに対してincomingのトラバーサルを使い、それを呼び出しているスクリプトとパイプラインを確認してください。
- `text_pattern_search`: グラフから除外されるDSLの呼び出しとGDKメソッドに使ってください。
