「構成図を描いてからコードを書く」という苦行
クラウドプロジェクトの多くは、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を、タイピング作業を肩代わりしてくれる有能なパートナーとして扱い、自分はアーキテクチャ設計やインフラコストの最適化といった、より本質的な思考に時間を使いましょう。古い構成図で今すぐ試してみてください。その結果にきっと驚くはずです!

