# Go コンパイル時計装

> ビルド時にコードを変更せずに Go アプリケーションを計装します。

---

Site [llms.txt](/ja/llms.txt)

---

Go のコンパイル時計装は、ビルド中にアプリケーションを自動的に計装し、ソースコードを変更することなく、多くの人気のあるライブラリやフレームワークからテレメトリーをキャプチャします。
Go のビルドプロセスにフックし、アプリケーションのコンパイル時に計装を注入する仕組みのため、生成されるバイナリにはランタイムエージェントを必要とせずに計装コードが含まれます。

> [!NOTE]
>
> このプロジェクトは v1.0.0 時点で安定しており、本番環境で使用できます。
> 開発状況を追跡したり、参加するには、[opentelemetry-go-compile-instrumentation リポジトリ](https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation)をご覧ください。

## 仕組み {#how-it-works}

`otelc` ツールは通常の `go build` 呼び出しをラップします。
ビルド中に以下の処理を行います。

1. Go ツールチェーンの `-toolexec` メカニズムを使用して、各パッケージのコンパイルをインターセプトします。
2. テレメトリーフックを配置すべき場所を記述した計装ルールのセットに対して、パッケージと関数をマッチングします。
3. マッチした関数に軽量なフックポイントを注入し、OpenTelemetry の計装コードとリンクします。

計装はコンパイル時にバイナリに組み込まれるため、自分が制御できないサードパーティの依存関係もカバーでき、ランタイムのアタッチや起動ステップが不要です。

## 使用するタイミング {#when-to-use-it}

コンパイル時計装は、Go 向けの[ゼロコード](/docs/concepts/instrumentation/zero-code/)オプションの1つです。
[Auto SDK](/docs/zero-code/go/autosdk/) を補完するものであり、eBPF ベースの計装は [OBI](/docs/zero-code/obi/) から利用できます。
コンパイル時計装は、ビルドパイプラインは変更できてもソースコードは変更できない場合、サードパーティライブラリ内部の計装が必要な場合、または特権エージェントをアプリケーションと一緒に実行できない場合に適しています。

---

Section pages:

- [はじめに](/ja/docs/zero-code/go/compile-time/getting-started/): 計装コードを書かずに Go アプリケーションからテレメトリーをキャプチャします。
- [サポートされているライブラリ](/ja/docs/zero-code/go/compile-time/supported-libraries/): すぐに使える計装済みのライブラリとフレームワーク。
- [設定](/ja/docs/zero-code/go/compile-time/configuration/): otelc ツールと、計装されたアプリケーションが生成するテレメトリーを設定します。
- [トラブルシューティング](/ja/docs/zero-code/go/compile-time/troubleshooting/): Go コンパイル時計装の問題を診断します。
