# MaguyvaのGo対応: バックエンドサービスのためのコードインテリジェンス

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

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解析とシンボル抽出によりGoに対応しており、AIエージェントがバックエンドコードにおけるパッケージ境界、サービス層、コンポジットリテラル、依存関係のパスについて推論するのを助けます。

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

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

## 最適な用途

- Goのサービス、CLI、ワーカー、運用ツールを1つのリポジトリで運用する、バックエンド/プラットフォームチーム。
- パッケージ境界は明確でも、呼び出しの連鎖が多数の小さなファイルにまたがって伸びているリポジトリ。
- ハンドラー、リポジトリ、共有クライアントに手を加える前に、AIエージェントを使ってサービスの挙動を調べるチーム。

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

- 変更を加える前に、ハンドラーからサービス、データアクセス層へとリクエストフローをたどる。
- 構造体、パッケージ、クライアントがコードベース全体のどこで構築・再利用されているかを見つける。
- 既存のサービスパターンを維持するために、近接する実装同士を比較する。

## Goのリポジトリが構造を理解した検索から恩恵を受ける理由

Goのリポジトリは、実際よりも簡単に見えることがよくあります。構文は直接的で、パッケージモデルは概ね整然としているため、検索だけで十分だと思われがちです。しかしコードベースがハンドラー、サービス、リポジトリ、ワーカー、社内ライブラリへと成長していくと、些細な変更ですら、何かに手を付ける前に3つのパッケージと1つの共有型を理解する必要が突然生じます。

それが、役に立つAI支援と当てずっぽうの編集との境界線です。Goでは、構文自体が難所になることはめったにありません。難しいのは、パッケージレベルの意図を保つことです。

## MaguyvaがGoで実際に抽出するもの

Maguyvaは、Goを言語そのものに忠実な形で扱います。この設定は意図的に余計な正規化処理を避けており、これはGoの比較的直接的な構文によく合っています。コンポジットリテラルはインスタンス化として扱われ、大規模な標準ライブラリのフィルタが`fmt`、`context`、`time`、`json`といった呼び出しを関係グラフから取り除くことで、リポジトリのコードが見やすくなります。

これにより、構造体がどこで構築されるか、どのパッケージがインターフェース境界を所有しているか、リクエストがハンドラーからサービス、データ層へとどう移動するかといった、Goの実際の疑問に対してグラフがより役立つものになります。

## Goのサービスに役立つMCPワークフロー

MCPのワークフローは、たいてい単純です。

- `find_symbol` — 調べたいハンドラー、サービス、インターフェース、クライアントが分かっているとき。
- `analyze_dependencies` — パッケージやサービスを変更する前に、外向きの結合を理解したいとき。
- `dependency_search` — incomingトラバーサルとともに、共有型やクライアントの影響範囲が必要なとき。

## このページが特に関連する場面

このページは、Goがリポジトリ全体ではなく主要なサービス言語であるバックエンド/プラットフォームコードにおいて、最も力を発揮します。インフラのモジュールが隣接している場合は、[Terraform](/ja/languages/terraform)も読んでみてください。評価の主眼が安全性重視のシステムプログラミングにある場合は、[Rust](/ja/languages/rust)の方が比較対象として適しています。

## エンジンの詳細

- Goでは構文がすでにtree-sitterにとって十分シンプルなため、あえて追加の正規化は行っていません。
- 複合リテラルはインスタンス化としてカウントされるため、グラフは名前が宣言された場所だけでなく、具体的な構造体が実際に生成された場所も追跡できます。
- 大規模な標準ライブラリフィルターにより、`fmt`、`context`、`time`、`json` などの呼び出しがリポジトリ固有の関係性を埋もれさせないようにしています。

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

- `find_symbol`: ハンドラー、サービス、インターフェース名が分かっていて、まず呼び出し元と参照を確認したいときに使用してください。
- `analyze_dependencies`: リファクタリング前に、パッケージやサービスのシンボルに対して使用し、外向きの結合度を把握してください。
- `dependency_search`: 影響範囲を見積もる必要があるとき、クライアントやコアの型に対してincomingトラバーサルを使用してください。
