コネヒト開発者ブログ

コネヒト開発者ブログ

GitHub Copilot Agent による Go製バッチのAWS Lambda移行(Claude 3.7 Sonnet)

こんにちは。CTOの永井 (id:shnagai) です。 今回は GitHub Copilot Agent (Claude 3.7 Sonnet) を活用し、Go製バッチをAWS Lambdaへ移行した際の開発体験と学びをご紹介します。

TL;DR

  • ゴール: Go製バッチを Copilot Agent (Claude 3.7 Sonnet) 支援のもと、AWS Lambda + EventBridge (SAM利用) へ移行
  • 効果: 簡単なプロンプトでSAMテンプレートやLambda雛形を高速生成。開発効率が劇的に向上
  • 注意点: クラウド設定(特に新しいランタイム等)にはハルシネーションが見られるため、人間によるレビューと修正が必須
  • Tips:
    • .github/copilot-instructions.mdでAI生成精度を向上
    • プロンプトは具体的であれば構造化不要
    • 生成されたインフラ設定は必ず公式ドキュメントで確認

背景・課題

毎月実行しているGo製データ処理バッチの手動実行を、AWS Lambda と EventBridge によって自動化したいと考えていました。Lambda化、SAMテンプレート作成、EventBridge設定など多くの作業が必要なため着手できていませんでしたが、GitHub Copilot Agent (Claude 3.7 Sonnet) の実力を試す好機と捉え、移行に取り組みました。

Copilot Agent との対話プロセス

VS Code の Copilot Chat (Claude 3.7 Sonnet) に、以下のようなシンプルなプロンプトで依頼しました。

Goで手元でビルドして動いているコードをLambda+EventBridgeを使ってAWS環境で自動実行できるようにしたい。
デプロイにはAWS SAMを利用するので、必要なファイルの準備も合わせてお願いします。

このシンプルなプロンプトだけで、的確な SAM テンプレート (template.yaml) や Lambda 関数 (main.go) の雛形が迅速に生成されました。また、リポジトリルートに .github/copilot-instructions.md を配置し、プロジェクト固有の情報を提供することで生成精度が向上することも確認できました(このファイル自体も Copilot に生成を依頼できます)。

発生した課題と手直し

Copilot Agent は非常に強力なアシスタントですが、万能ではありません。特に AWS のような急速に進化するクラウドサービスの構成においては、いくつかの点で手直しが必要でした。

Lambda ランタイム指定のハルシネーション

  • 事象: Copilot が生成した template.yaml では、Go の Lambda ランタイムとして古い Go1.x が指定されていました。このランタイムは現在 AWS では非推奨となっており、このままデプロイするとエラーとなります。
  • 対応: 同僚からランタイム指定が古いと指摘を受け、現在推奨されているカスタムランタイム provided.al2023 に修正しました。クラウドサービスの仕様は頻繁に更新されるため、AI の生成内容を鵜呑みにせず、公式ドキュメントで最新情報を確認することの重要性を再認識しました。

認証情報の取り扱い

  • 事象: 当初生成されたコードでは、外部サービス(Google Cloud)への認証キーが適切に扱われていませんでした。
  • 対応: セキュリティ強化のため、認証情報を AWS Systems Manager (SSM) パラメータストアに SecureString として保存し、Lambda 実行時に取得・復号する方式に変更するよう Copilot に指示しました。具体的なパラメータ命名規則(/service-name/GOOGLE_APPLICATION_CREDENTIALS_PARAM 形式)や、ローカル開発環境との互換性確保などの要件を伝えることで、セキュアで実用的なコードに改善できました。

SAM ビルド時のパス依存問題

  • 事象: sam build コマンドを実行するディレクトリによっては、ビルドプロセスが期待通りに動作しないケースがありました。
  • 対応: SAM CLI の挙動や Makefile のパス指定を調整することで解決しました。

環境固有の設定

SAM がデプロイパッケージをアップロードするための中間 S3 バケットとして、組織内で共通利用している特定のバケット名を指定するなど、環境固有の調整も必要でした。

これらの修正作業は必要でしたが、ゼロからすべてのコードや設定ファイルを作成する労力と比べれば、はるかに少ない時間で済みました。Copilot Agent が「ドライバー」としてコーディングの大部分を担い、人間は「ナビゲーター」として設計判断やコード品質の確認、最終調整を行うという、新しい開発スタイルを体験できました。

学び

  • Copilot Agent (Claude 3.7 Sonnet) の強力さ: 定型コードや雛形作成で生産性が飛躍的に向上します。簡単な指示で形にしてくれる体験は、開発の未来を感じさせます。
  • ハルシネーションへの対処: 特に変化の速いクラウド技術では、生成内容の検証(公式ドキュメント確認)と修正が必須です。
  • 人間の知識とレビューの価値: 最新情報の反映や品質担保には、人間の経験やチームレビューが依然として重要です。
  • 効果的なプロンプトとコンテキスト: 指示の仕方や事前情報の与え方で成果が大きく変わります。.github/copilot-instructions.md などの活用が効果的です。
  • 時間制約の克服: まとまった時間が取れないことを理由に先延ばしにしていたタスクも、AI の支援によりスキマ時間を活用して効率的に進められるようになりました。

まとめ

GitHub Copilot Agent (Claude 3.7) は開発効率を大幅に向上させる強力なツールだと感じました。現時点ではAIによるドメイン理解や把握の難しさだったり最新の技術を利用しようとすると、生成内容の検証と手直しが必要なのはたしかですが、これはコンテキストをしっかりと与えていくこととさらなる技術革新で徐々に和らいでいくのではないかと感じています。それよりも、AI と人間が協調する開発スタイルは今後ますます重要になるでしょうし、まずは手を動かしてガンガン使いこなしこの波のど真ん中で楽しんでいきたいと思います。