ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
連携・プラグイン/2026-03-23上級

Antigravity × Terraform で実現する AI 駆動インフラ自動化 — IaC をAIがレビュー・生成するワークフロー

Antigravity の AI エージェントと Terraform を組み合わせ、インフラコードの自動生成・レビュー・デプロイを実現する上級ワークフローを詳解します。

antigravity435terraformiacinfrastructuredevops4ai-review2automation51

取り組みの背景 — AI がインフラコードを書く時代

Infrastructure as Code(IaC)は、クラウドインフラをコードとして管理する手法として広く普及しました。しかし、Terraform の HCL(HashiCorp Configuration Language)は独特の構文を持ち、クラウドプロバイダごとに膨大なリソース定義を覚える必要があります。

Antigravity の AI エージェントを活用すれば、自然言語でインフラ要件を伝えるだけで Terraform コードを自動生成し、セキュリティやコストの観点から AI がレビューしてくれるワークフローを構築できます。

この記事で学べること:

  • Antigravity で Terraform プロジェクトを効率的に扱うための設定
  • AI エージェントによる Terraform コードの自動生成テクニック
  • terraform plan の差分を AI にレビューさせる実践的なワークフロー
  • セキュリティ・コスト最適化のための AI チェックリスト構築

対象読者: Terraform の基本を理解しており、AI を活用して IaC ワークフローを効率化したいエンジニア


前提知識と環境準備

必要なツール

Antigravity と Terraform を連携させるために、以下の環境を整えましょう。

# Terraform のインストール確認
terraform --version
# Terraform v1.10.x 以上を推奨
 
# Antigravity のインストール確認
# Antigravity IDE が最新版であることを確認
 
# AWS CLI(例として AWS を使用)
aws --version
# aws-cli/2.x.x 以上

プロジェクト構成

AI と効率よく作業するには、Terraform プロジェクトの構成を明確にしておく点が肝心です。

infra/
├── environments/
│   ├── dev/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── terraform.tfvars
│   ├── staging/
│   └── production/
├── modules/
│   ├── networking/
│   ├── compute/
│   ├── database/
│   └── monitoring/
├── .antigravity/
│   └── agents.md          # AI エージェント設定
└── scripts/
    └── plan-review.sh     # AI レビュー自動化スクリプト

Antigravity の IaC エージェント設定

agents.md によるコンテキスト提供

Antigravity のエージェントに Terraform プロジェクトの文脈を与えるため、.antigravity/agents.md を作成します。

# Infrastructure Agent Configuration
 
## Project Context
- Cloud Provider: AWS (ap-northeast-1)
- Terraform Version: >= 1.10
- State Backend: S3 + DynamoDB locking
- Environments: dev, staging, production
 
## Coding Standards
- All resources must have Name and Environment tags
- Use modules for reusable components
- No hardcoded credentials — use AWS IAM roles
- Enable encryption at rest for all storage resources
- VPC flow logs must be enabled in all environments
 
## Security Requirements
- No public S3 buckets unless explicitly approved
- All security groups must have explicit egress rules
- RDS instances must not be publicly accessible
- Enable AWS CloudTrail in all accounts

この設定により、AI エージェントは Terraform コードを生成する際に、プロジェクト固有の要件を自動的に考慮します。

カスタムコマンドの活用

Antigravity のカスタムコマンドを設定して、Terraform 作業を効率化できます。

{
  "customCommands": {
    "tf-gen": {
      "description": "自然言語からTerraformコードを生成",
      "prompt": "以下の要件に基づいてTerraformコードを生成してください。agents.mdのセキュリティ要件を遵守し、変数化を徹底してください: "
    },
    "tf-review": {
      "description": "Terraform planの出力をAIレビュー",
      "prompt": "以下のterraform plan出力をレビューしてください。セキュリティリスク、コスト影響、ベストプラクティス違反を指摘してください: "
    }
  }
}

AI による Terraform コード自動生成

基本的な生成フロー

Antigravity のエージェントに自然言語でインフラ要件を伝え、Terraform コードを生成する実例を見てみましょう。

プロンプト例:

「本番環境用の RDS PostgreSQL インスタンスを作成してください。マルチ AZ 構成で、暗号化を有効にし、自動バックアップを7日間保持する設定にしてください。」

AI が生成するコード:

# modules/database/main.tf
 
resource "aws_db_subnet_group" "main" {
  name       = "${var.project_name}-${var.environment}-db-subnet"
  subnet_ids = var.private_subnet_ids
 
  tags = {
    Name        = "${var.project_name}-${var.environment}-db-subnet"
    Environment = var.environment
    ManagedBy   = "terraform"
  }
}
 
resource "aws_db_instance" "postgresql" {
  identifier     = "${var.project_name}-${var.environment}-postgres"
  engine         = "postgres"
  engine_version = var.postgres_version
  instance_class = var.db_instance_class
 
  # ストレージ設定
  allocated_storage     = var.allocated_storage
  max_allocated_storage = var.max_allocated_storage
  storage_type          = "gp3"
  storage_encrypted     = true  # 暗号化を有効化
  kms_key_id            = var.kms_key_arn
 
  # ネットワーク設定
  db_subnet_group_name   = aws_db_subnet_group.main.name
  vpc_security_group_ids = [var.db_security_group_id]
  publicly_accessible    = false  # パブリックアクセス禁止
 
  # 高可用性
  multi_az = var.environment == "production" ? true : false
 
  # バックアップ設定
  backup_retention_period = 7
  backup_window           = "03:00-04:00"
  maintenance_window      = "sun:04:00-sun:05:00"
 
  # 削除保護
  deletion_protection = var.environment == "production" ? true : false
  skip_final_snapshot = var.environment != "production"
  final_snapshot_identifier = var.environment == "production" ? "${var.project_name}-final-snapshot" : null
 
  tags = {
    Name        = "${var.project_name}-${var.environment}-postgres"
    Environment = var.environment
    ManagedBy   = "terraform"
  }
}
 
# 出力: 接続情報
# endpoint = aws_db_instance.postgresql.endpoint
# port     = aws_db_instance.postgresql.port

AI は agents.md のセキュリティ要件に基づき、暗号化の有効化、パブリックアクセスの禁止、環境ごとの条件分岐を自動的に組み込みます。

モジュール間の依存関係を考慮した生成

複数のモジュールにまたがるインフラを一括生成する場合、AI エージェントは依存関係を自動で解析します。

# environments/production/main.tf
 
module "networking" {
  source = "../../modules/networking"
 
  project_name = var.project_name
  environment  = "production"
  vpc_cidr     = "10.0.0.0/16"
 
  # AI が適切な AZ 数を提案
  availability_zones = ["ap-northeast-1a", "ap-northeast-1c", "ap-northeast-1d"]
}
 
module "database" {
  source = "../../modules/database"
 
  project_name       = var.project_name
  environment        = "production"
  private_subnet_ids = module.networking.private_subnet_ids  # 依存解決
  db_security_group_id = module.networking.db_security_group_id
  kms_key_arn        = module.encryption.kms_key_arn
 
  postgres_version    = "16.4"
  db_instance_class   = "db.r6g.large"
  allocated_storage   = 100
  max_allocated_storage = 500
}
 
module "monitoring" {
  source = "../../modules/monitoring"
 
  project_name  = var.project_name
  environment   = "production"
  db_identifier = module.database.db_instance_id  # 依存解決
  alarm_sns_topic_arn = var.alarm_sns_topic_arn
}

terraform plan の AI レビューワークフロー

自動レビュースクリプト

terraform plan の出力を AI エージェントにレビューさせるスクリプトを構築します。

#!/bin/bash
# scripts/plan-review.sh
# terraform plan の出力を AI にレビューさせる
 
set -euo pipefail
 
ENVIRONMENT="${1:-dev}"
PLAN_FILE="/tmp/tfplan-${ENVIRONMENT}.out"
 
echo "=== Terraform Plan for ${ENVIRONMENT} ==="
 
cd "environments/${ENVIRONMENT}"
 
# plan を実行し、出力をファイルに保存
terraform plan -out="${PLAN_FILE}" -no-color 2>&1 | tee /tmp/plan-output.txt
 
# 変更の概要を抽出
CHANGES=$(terraform show -no-color "${PLAN_FILE}" 2>/dev/null)
 
echo ""
echo "=== AI Review Request ==="
echo "以下の内容を Antigravity エージェントに渡してレビューを依頼します"
echo ""
 
cat <<EOF > /tmp/review-request.txt
## Terraform Plan Review Request
 
### Environment: ${ENVIRONMENT}
### Plan Output:
\`\`\`
${CHANGES}
\`\`\`
 
### Review Checklist:
1. セキュリティリスクはないか
2. コストへの影響は妥当か
3. 本番環境への影響範囲は適切か
4. ベストプラクティスに従っているか
5. ロールバック可能な変更か
EOF
 
echo "レビューリクエストを /tmp/review-request.txt に保存しました"

AI レビューの観点

Antigravity エージェントは、以下の観点から terraform plan の出力をレビューします。

セキュリティチェック:

  • セキュリティグループの 0.0.0.0/0 への開放がないか
  • S3 バケットのパブリックアクセス設定
  • 暗号化が有効化されているか
  • IAM ポリシーが最小権限原則に従っているか

コスト分析:

  • インスタンスタイプの適正性
  • リザーブドインスタンスとの比較
  • 不要なリソースが含まれていないか

可用性チェック:

  • マルチ AZ 構成が適切か
  • バックアップ設定が十分か
  • ヘルスチェックが設定されているか

セキュリティ・コスト最適化の AI チェックリスト

Sentinel ポリシーの AI 生成

HashiCorp Sentinel と Antigravity を組み合わせ、ポリシーを AI で生成・管理する方法です。

# sentinel/policies/enforce-encryption.sentinel
# AI が生成したセキュリティポリシー
 
import "tfplan/v2" as tfplan
 
# すべての S3 バケットで暗号化が有効か検証
s3_buckets = filter tfplan.resource_changes as _, rc {
    rc.type is "aws_s3_bucket" and
    (rc.change.actions contains "create" or rc.change.actions contains "update")
}
 
encryption_check = rule {
    all s3_buckets as _, bucket {
        bucket.change.after.server_side_encryption_configuration is not null
    }
}
 
# すべての RDS インスタンスで暗号化が有効か検証
rds_instances = filter tfplan.resource_changes as _, rc {
    rc.type is "aws_db_instance" and
    (rc.change.actions contains "create" or rc.change.actions contains "update")
}
 
rds_encryption_check = rule {
    all rds_instances as _, db {
        db.change.after.storage_encrypted is true
    }
}
 
main = rule {
    encryption_check and rds_encryption_check
}

コスト見積もりの自動化

# Infracost と Antigravity を連携させたコスト分析
# AI がコスト見積もりを解析し、最適化提案を出力
 
infracost breakdown --path environments/production \
  --format json \
  --out-file /tmp/cost-estimate.json
 
# AI に解析を依頼
echo "コスト見積もり結果を Antigravity エージェントに渡し、
最適化の余地がないか分析してもらいます"

実践:CI/CD パイプラインとの統合

GitHub Actions × Antigravity × Terraform

# .github/workflows/terraform-ai-review.yml
name: Terraform AI Review
 
on:
  pull_request:
    paths:
      - 'infra/**'
 
jobs:
  plan-and-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
 
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: "1.10.0"
 
      - name: Terraform Init
        working-directory: infra/environments/dev
        run: terraform init
 
      - name: Terraform Plan
        working-directory: infra/environments/dev
        run: |
          terraform plan -no-color -out=tfplan 2>&1 | tee plan-output.txt
 
      - name: AI Security Review
        run: |
          # plan 出力を AI レビューに送信
          echo "## AI Infrastructure Review" >> $GITHUB_STEP_SUMMARY
          echo "Plan output saved for AI agent review" >> $GITHUB_STEP_SUMMARY
 
      - name: Cost Estimation
        uses: infracost/actions/setup@v3
        with:
          api-key: ${{ secrets.INFRACOST_API_KEY }}
 
      - name: Generate Cost Report
        run: |
          infracost breakdown \
            --path infra/environments/dev \
            --format table

よくあるエラーと対処法

State ロックの競合

AI エージェントが同時に複数の terraform apply を実行しようとすると、State ロックの競合が発生します。

# エラーメッセージ
# Error: Error acquiring the state lock
 
# 対処法: ロック情報を確認して解放
terraform force-unlock <LOCK_ID>
 
# 予防策: CI/CD パイプラインでの同時実行制限
# GitHub Actions の concurrency 設定を活用

AI 生成コードの型エラー

AI が生成した HCL コードに型の不一致がある場合は、terraform validate で事前検証します。

# 生成後に必ず実行
terraform validate
 
# 出力例:
# Success! The configuration is valid.

まとめ — AI × IaC が変えるインフラ管理の未来

Antigravity × Terraform の統合ワークフローにより、以下の成果が得られます。

  1. コード生成の高速化 — 自然言語でインフラ要件を伝えるだけで、セキュリティ要件を満たした Terraform コードが自動生成される
  2. レビューの自動化terraform plan の出力を AI が自動レビューし、セキュリティリスクやコスト影響を即座に指摘
  3. ポリシーの一貫性agents.md に定義したルールが全てのコード生成に反映され、チーム全体で一貫したインフラ品質を維持
  4. 学習コストの削減 — HCL の細かな構文を覚えなくても、AI がベストプラクティスに沿ったコードを生成

AI を活用した IaC ワークフローは、インフラエンジニアの生産性を飛躍的に向上させます。まずは小規模な開発環境から試して、徐々に本番環境へと適用範囲を広げていきましょう。

内部リンク:

シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

連携・プラグイン2026-07-15
無人ランで作業フォルダが突然『別の人の持ち物』になる — 所有者ドリフトを検知して書ける場所へ逃がす
数週間緑だった無人スケジュールが、ある朝 git config を書けずに止まりました。原因は永続作業フォルダの所有者ドリフト。存在チェックでは通り書き込みだけが弾かれる罠を切り分け、書込可否を実測して別の場所へ逃がすプリフライトを実装まで残します。
連携・プラグイン2026-07-08
成功し続ける自動化が、いつの間にか価値を失うとき — 成果の痩せを検出して畳む設計
スケジュール実行の緑のログは、しばしば最も油断ならない嘘をつきます。成功しているのに価値を失った自動化を、成果台帳と評価器で炙り出し、畳む・直す・残すを判断する設計を実コードとともに整理します。
連携・プラグイン2026-06-21
Antigravity CLI の JSON Lines 出力を自作スクリプトで受ける — 部分行と終了コードでつまずいた記録
Antigravity CLI の機械可読出力(JSON Lines)を自前スクリプトに流し込むと、3回に1回ほど JSONDecodeError で止まりました。部分行・終了コード・stderr 混入という3つの罠と、行バッファリングで安定させた実運用の受け口を記録します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →