Vision LLMでアーキテクチャ構成図をTerraformに変換:図面からコード生成までわずか30秒

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

「構成図を描いてからコードを書く」という苦行

クラウドプロジェクトの多くは、LucidchartやDraw.ioでの設計から始まります。しかし、図面を描き終えた後に待っているのは、その構成を再現するために数百行ものTerraformコードをひたすら打ち込むという過酷な現実です。これは単調で非常に時間のかかる作業です。

多くの実案件で試行錯誤した結果、この課題を解決する「強力な武器」を見つけました。VPCやRDSの定義に午前中を丸々費やす代わりに、Claude 3.5 SonnetのようなVision LLM(画像認識AI)に図面を「見せる」だけで、数秒で整ったコードを出力できます。私の経験では、標準的な3層(3-tier)システムの場合、作業時間を4時間から約45分へと大幅に短縮できました。

Vision LLM: AIが「図形」を理解し始めた

これまで、コンピュータによる画像解析は主にOCR(文字認識)に頼っていました。しかし、矢印の意味やアイコン同士の関係性を理解できないため、この手法はよく失敗していました。最新のVision LLMは、ここに「空間推論(spatial reasoning)」という新たな進歩をもたらしました。

例えば、ELBが異なるアベイラビリティゾーン(AZ)にある3つのEC2インスタンスに接続されている AWS構成図を読み込ませると想像してください。現在のAIは単に記号を見るだけでなく、あなたが意図している高可用性(High Availability)構成を理解します。特にClaude 3.5 Sonnetが生成するTerraform HCLは非常にクリーンで、モジュール化も考慮されており、旧モデルに比べて構文エラーも劇的に少なくなっています。

実践:構成図をコードに変換する3ステップ

精度を最大化するには、AWS、Azure、GCPなどの標準アイコンセットを使用することをお勧めします。図面が鮮明であればあるほど、AIの推測による間違いが減ります。

ステップ1:図面の準備とモデルの選択

実際のテスト結果に基づくと、現在はClaude 3.5 Sonnetが精度で一歩リードしており、次にGPT-4oが続きます。鮮明な構成図のスクリーンショットをチャットインターフェースにアップロードするだけです。画像がぼやけていると、AIがSQSとSNSのような似た記号を混同する可能性があるため注意してください。

ステップ2:実践的なプロンプトの活用

漠然とした指示は避けましょう。良い結果を得るには、構造化されたプロンプトが必要です。以下は、私が本番プロジェクトでよく使用しているテンプレートです。

Role: あなたはTerraformを専門とするシニアクラウドアーキテクトです。
Task: 画像を分析し、アーキテクチャ構成図をTerraformコード(HCL)に変換してください。

技術基準:
1. 最新版のAWSプロバイダーを使用すること。
2. リソースはvariables.tfを通じてパラメータ化すること。
3. ファイル構成:main.tf, variables.tf, outputs.tf。
4. セキュリティグループのルールが図中の矢印の通りに設定されていることを確認すること。
5. 命名規則: itfromzero-project-リソース名。

ステップ3:品質管理

AIはコードを高速に生成しますが、本番環境にそのままコピー&ペーストするのは厳禁です。あなたはレビューアーとしての役割を果たす必要があります。すべてが正常であることを確認するために、以下のコマンドを実行してください。

# フォーマットの自動修正
terraform fmt

# 構文と基本的なロジックのチェック
terraform validate

# 作成されるリソースを詳細に確認
terraform plan

複雑な構成図を処理する際のコツ

半年ほど運用して得られた重要な知見は、「欲張らないこと」です。巨大なマイクロサービスシステムの場合、AIはヘルスチェックや特定のセキュリティグループルールなどの細部を見落とすことがあります。

最適な解決策は、構成図を分割することです。全体像を一度に投げるのではなく、ネットワーキング、コンピューティング、データベースといったモジュールごとに分けます。小さな単位で処理することで、AI의 集中力が高まり、より高品質なコードが生成されます。

例えば、プライベートサブネットにRDSを配置する図を描いた場合、AIがコードを出力する際にサブネットグループを含めるよう指示してください。

resource "aws_db_subnet_group" "itfromzero_db_sg" {
  name       = "itfromzero-db-subnet-group"
  subnet_ids = [aws_subnet.private_1.id, aws_subnet.private_2.id]

  tags = {
    Name = "ITFromZero DB Subnet Group"
  }
}

データセキュリティを最優先に

多くのエンジニアが犯しがちな致命的なミスは、AIにアクセスキーやデータベースのパスワードまで生成させることです。これらのデータはモデルの学習に使用される可能性があり、機密情報の漏洩につながる恐れがあります。

私の教訓は、常にプレースホルダー(仮の値)を使用させることです。実際の値の管理には.tfvarsを使用し、GitHubにプッシュする前に必ず.gitignoreに追加する習慣をつけましょう。セキュリティは、こうした小さな習慣から始まります。

終わりに

Vision LLMは、あなたのTerraformに関する基礎知識を代替するものではありません。むしろ、AIが正しいことをしているか判断するために、深い理解が求められます。AIを、タイピング作業を肩代わりしてくれる有能なパートナーとして扱い、自分はアーキテクチャ設計やインフラコストの最適化といった、より本質的な思考に時間を使いましょう。古い構成図で今すぐ試してみてください。その結果にきっと驚くはずです!

Share: