ソフトウェア開発でのAIの活用が増えてきています。AI駆動開発などの概念も登場して、飛躍的な開発者の生産性向上が期待されているとか。
色々なAIエージェントが出てきていますが、アウトプットの精度に私も驚かされています。 その活用範囲は一体どこまで広がるのでしょうか。
開発やその後のサービス運用で欠かせない要素であるObservability。こういうこともよしなにやってくれると大変助かるのですが…
というわけで今回は、「Observabilityに必要な計装をAIに任せることができるのか!?」を試してみたいと思います。
計装の中で最も手間がかかるのがGo言語です。Goはコンパイル言語のため、他の言語エージェントのように実行時の動的な計測が困難です。開発者がコードの中でSDKのAPIを直接呼び出して計測対象を指定する必要があり、これがObservabilityのハードルにもなっています。もしAIで簡単に計装できたらステキです。
なのでここでは、AIコーディングツール「Claude code」を利用して、New Relic Goエージェントの計装をやってみることにします。
この記事の留意点ですが、New Relicの公式な手順ではなく、あくまで個人の検証の紹介です。とはいえ皆さんがAIを活用する際の参考になればと思います。
検証環境を準備!
まず、検証のベースとなるGoアプリケーションを考えなくてはなりません。折角なので、これもAIに考えてもらいました。
1. 検証用アプリケーションの概要
検証アプリとしてGo言語で構築したWeb APIアプリケーションを使用することにしました。注文処理と商品情報取得の機能を持つシンプルな構成ですが、意図的にパフォーマンスの遅延やエラーを組み込んでいます。これにより、New RelicでObservabilityデータを観測する際に、より現実的なシナリオを試せるようにしてみました。
2. AIを活用したアプリケーション開発
先ほどもお伝えしましたが、今回のアプリケーション開発にはClaude codeを利用しました。ここではClaude codeの詳細な利用方法などは割愛します。気になる方はAnthropic社の公式ドキュメントをご確認ください。
以下は、アプリケーションの機能要件を指示したプロンプトです。長くなったのでマークダウンファイルを読み込ませる形でClaude codeに渡しました。
Ginフレームワークを使用して、以下の機能を持つGoのWeb APIアプリケーションを構築してください。
### **要件:**
1. **商品情報取得エンドポイント**:
* パス: `/products`
* メソッド: `GET`
* 機能: 5件分のダミーの商品情報をJSON形式で返します。商品情報には`id`、`name`、`price`を含めてください。
* **注意点**: データベースへのアクセスを模倣するため、このエンドポイント内で`time.Sleep`を使用して50ミリ秒の遅延を意図的に挿入してください。
2. **注文処理エンドポイント**:
* パス: `/orders`
* メソッド: `POST`
* 機能: リクエストボディで`product_id`と`quantity`を受け取り、注文が正常に処理されたというダミーのレスポンスをJSONで返します。
* **注意点**: `quantity`が100を超える場合は、意図的に`500 Internal Server Error`を返すようにしてください。
3. **外部サービス呼び出しの模倣**:
* 注文処理エンドポイント内で、外部サービスへのHTTP呼び出しを模倣するため、`http.Get`を使用して`https://api.github.com/users/newrelic`へアクセスし、そのレスポンスをログに出力してください。
### **最終的な出力:**
* `main.go`ファイルとして完全なソースコードを提供してください。
* 依存関係を管理するための`go.mod`と`go.sum`ファイルを含めてください。
3. 構成の全体像
完成したアプリケーションを動かすために、GoアプリケーションとAPIクライアントの2つのコンテナで構成しました。APIクライアントは、GoアプリケーションのAPIエンドポイントを自動的かつランダムに叩き、継続的にトラフィックを生成するためのものです。今回の計装の対象からは外しています。
AIにObservabilityの計装をお願いする
さて検証用のGoアプリができました。開発から動作テストまでClaude codeと実施し、無事完了です。いよいよこのアプリにNew Relic Goエージェントを組み込む作業をAIに依頼します。今回は、AIの能力を試すために、あえてシンプルな指示に留めました。
1. AIへNew Relicでの計装を指示
入力したプロンプトは以下です、
このアプリケーションをNew Relicで観測できるように計装してください。対象はAPIサーバのみでクライアント側は不要です。
見ての通り、このプロンプトはトランザクションやセグメント、あるいはカスタム属性などの計装に関する細かい指示を含んでいません。AIがGo言語の特性とNew Relicのベストプラクティスを理解し、適切な計装を自律的に判断できるかどうかを見てみましょう。
2. AIがNew Relicを導入している…
AIはシンプルなプロンプトを正確に解釈し、計装のためのコードを次々に挿入していってくれます。少なくともデータが収集できるレベルではできていそうです。
計装について解説してもらえば、手順と照らし合わせて最適であったかどうかも判断できます。
実装の結果の中には、AIが実装したものよりさらに効率的なやり方もありました。例えば外部サービスの呼び出しをSegmentとして記録するためにnewrelic.StartExternalSegment
を用いていますが、newrelic.NewRoundTripper
で自動的にすべての外部HTTPリクエストを計測できる方が良かったでしょう。
今回はかなり雑なプロンプトにより計装してもらっていますが、詳細なプロンプトで依頼すれば効率の良い計装方法を採用してくれるかもしれません。
アプリケーションを動かしてObservabilityを検証する
最後に、AIでの計装がNew Relicでちゃんと見えているかを確認します。
1. New Relic APMでパフォーマンスを可視化
New Relic APMのダッシュボードにアクセスすると、アプリケーションのスループット、レスポンスタイム、エラー率などの主要な指標が可視化されているのがわかります。
2. Errors Inboxでのエラー分析
Errorsには今回意図的に発生させているエラーが記録されています。
3. カスタム属性による詳細分析
最後にカスタム属性です。雑なプロンプトにも関わらず、Claude codeが気を利かせてカスタム属性を取ってくれていました。商品番号や注文数、注文ステータスなどがTransactionイベントの属性として追加されていることを確認できました。
これらをテレメトリーデータと組み合わせて使うことで、応答の遅延やエラーレートの上昇がビジネスにどんな影響があったかまで把握できるので、データが生み出す価値が変わってきます。
素晴らしいですね! New Relicでアプリの挙動を確認することができました。
まとめ
今回の検証を通じて、AIコーディングツールがNew Relic Goエージェントの計装を実行できることが確認できました。今後、AIエージェントによるアプリ開発が進んでいくとできたコードがブラックボックスになっていくかもしれません。AIにお願いすれば作ってくれるので、技術者以外がアプリを開発する機会も増えるでしょう。そのような時、アプリを理解するのに効果的な手段がObservabilityです。作ったアプリにObservabilityがあることで、人間もAIが作ったアプリの挙動を理解できるようになります。ひょっとしたら、正しくObservabilityを実装させるための知識がエンジニアにとってより重要になってくるかもしれません。
その他
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のQiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!