株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

Terraform MCP ServerをClaude Codeで使ってみる

こんにちは、ネットワールド技術担当の山下です。

TerraformのコードをAIに書いてもらったら、古いバージョンとかで怒られた経験ってありませんか?

- `terraform apply` したら `Required argument` エラー……引数名が変わってた
- コピーしたサンプルに `acl = "private"` が残ってた(もう非推奨)
- provider version と module の組み合わせが合わなくて、直す時間のほうが長くなった

「コード生成は速いのに、デバッグに時間がかかる」というのが正直なところで、これってAI学習データが古いとかが原因の要素なんですよね、、

というわけで今回は、この問題の解決に期待できる Terraform MCP Server を Claude Code で試してみました 

Terraform MCP Server って何?

一言でいうと、「AIが Terraform Registry の最新情報をリアルタイムで参照できるようにする仕組み」です。

MCP(Model Context Protocol)は、AIが外部ツールやデータソースに接続するためのプロトコル。「AIにUSB-Cで外部知識を外付けする」みたいなイメージです


画像出典: https://norahsakal.com/blog/mcp-vs-api-model-context-protocol-explained/

Terraform文脈だと、AIが以下の情報をリアルタイムで取得できるようになります。

- 最新の provider バージョン
- module の inputs / outputs / 利用例
- Sentinel ポリシー情報

「学習済みデータだけで書く」から「最新ドキュメントを見ながら書く」状態になるのが最大のポイントです。

Terraform MCP Server は HashiCorp が公式に提供しています(現在ベータ版)

github.com

Terraform MCP Server とは

- リアルタイムな正確性
古くなった学習データに頼らず、最新のプロバイダードキュメントを参照してコードを生成

- Terraform Registry との統合
プロバイダー・モジュール・ポリシーの公開 API と直接連携

- HCP Terraform / Terraform Enterprise のサポート
プライベートレジストリやワークスペース管理にも対応

- AIによる強化
より正確で実用的な Terraform 構成の生成が可能に

「学習済みデータだけで書く」から「最新ドキュメントを見ながら書く」ような状態になるのが最大のポイントです。

セットアップ

では、早速やっていきましょう! 意外と簡単です。

前提

- Claude Code がインストール済み

code.claude.com


- Docker が起動している

www.docker.com

 

Step 1: Terraform MCP Server を追加

プロジェクトルートに `.mcp.json` を作成して、以下を記述します。

```json
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "hashicorp/terraform-mcp-server"]
    }
  }
}
```

※全プロジェクト共通で使いたい場合は、`~/.claude.json` に同じ内容を追記すればOKです。

Step 2: 接続確認

Claude Code を起動して、`/mcp` と入力します。MCP サーバーの一覧と接続状態が確認できます。

```
Project MCPs (/path/to/project/.mcp.json)
> terraform · ✓ connected
```

いい感じです! 続けてこう聞いてみましょう。

```
MCPで使えるTerraformのツールを教えて
```

`search_modules` や `get_latest_provider_version` などのツール一覧が返ってきたら取り急ぎ準備完了です。

※Terraform MCP Serverで利用可能なツール一覧/詳細は、以下の公式ドキュメントをご参照ください

developer.hashicorp.com

S3 モジュールを生成してみる

せっかくなので、AWS S3 バケット用のモジュールをAIに作ってもらいましょう

依頼文

```
コミュニティのTerraformモジュールを使ってS3モジュールを作成してください。
```

Claude Code が裏でやっていること

依頼すると、MCP 経由で、今回はこんな順番にツールが呼ばれたようです。

  1. get_latest_module_version と search_modules を並列で実行し、S3 モジュールの最新バージョンと候補を確認                                                                           
  2. 候補の中からダウンロード数が最多(189M)の terraform-aws-modules/s3-bucket を Claude が選択
  3. get_module_details で完全なドキュメント(input / output / example / provider 互換バージョン)を取得                                                                             
  4. 取得した情報をもとに S3 の Terraform コードを生成
  「なんとなく書く」ではなく「公式情報を引いてから書く」状態になっています。    

Terraform MCP Serverを利用して生成されたコード

```hcl
terraform {

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 6.37"
    }
  }
}

module "s3_bucket" {
  source  = "terraform-aws-modules/s3-bucket/aws"
  version = "5.11.0"

  bucket        = var.bucket_name
  bucket_prefix = var.bucket_prefix
  force_destroy = var.force_destroy

  # Public access block
  block_public_acls       = var.block_public_access
  block_public_policy     = var.block_public_access
  ignore_public_acls      = var.block_public_access
  restrict_public_buckets = var.block_public_access

  # Versioning
  versioning = var.versioning_enabled ? { enabled = true } : {}

  # Server-side encryption
  server_side_encryption_configuration = var.server_side_encryption_enabled ? {
    rule = {
      apply_server_side_encryption_by_default = {
        sse_algorithm     = var.kms_master_key_id != null ? "aws:kms" : "AES256"
        kms_master_key_id = var.kms_master_key_id
      }
      bucket_key_enabled = var.kms_master_key_id != null
    }
  } : {}

  # Enforce HTTPS
  attach_deny_insecure_transport_policy = var.attach_deny_insecure_transport_policy

  # Lifecycle
  lifecycle_rule = var.lifecycle_rules

  # Logging
  logging = var.logging

  # CORS
  cors_rule = var.cors_rules

  tags = var.tags
}

```

バージョンも最新でいい感じですね!

ちなみに MCP なしだと、以下な感じになりましたね、、

```hcl
terraform {

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 5.0"
    }
  }
}

module "s3_bucket" {
  source  = "terraform-aws-modules/s3-bucket/aws"
  version = "~> 4.0"

  bucket = var.bucket_name

  # Versioning
  versioning = {
    enabled = var.versioning_enabled
  }

  # Server-side encryption
  server_side_encryption_configuration = {
    rule = {
      apply_server_side_encryption_by_default = {
        sse_algorithm = "AES256"
      }
    }
  }

  # Block public access
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true

  # Lifecycle rules
  lifecycle_rule = var.lifecycle_rules

  tags = var.tags
}

```

MCPなしだと、ぱっとみ、バージョンが古かったりしてますね、、
取り急ぎ、Claude Codeに分析させてみました

MCPあり/なしコードを比べてみると

| 項目 | MCP あり | MCP なし |
|---|---|---|
| AWS Provider バージョン | `>= 6.37`(最新) | `>= 5.0`(古い) |
| S3 モジュールバージョン | `5.11.0`(最新固定) | `~> 4.0`(1世代前) |
| パブリックアクセスブロック | 変数で柔軟に制御 | `true` ハードコード |
| 暗号化 | KMS / AES256 を動的切替 | AES256 固定のみ |
| HTTPS 強制ポリシー | あり | なし |
| ログ・CORS | あり | なし |

バージョンの差もさることながら、設計思想の違いも大きいようです。MCP なし版は「とりあえず動くコード」に近く、`block_public_acls = true` のようにベタ書きで柔軟性がありません。一方 MCP あり版は、モジュールの実際の仕様を把握した上で変数化・条件分岐が組まれており、環境ごとの使い回しを想定した構造になっています。

生成AIベースなので、毎回そうなるかは、もっと検証必要かもしれませんが、、取り急ぎ、MCPのほうがいい感じと思われます!

まとめ

試してみての感想をまとめると、こんな感じです。

- MCPセットアップはすぐ終わる ── 思ったよりずっと簡単(json書くだけ)
- 生成コードの初期品質が上がった ── バージョン整合・セキュリティ設定が最初から入ってくる(一回のプロンプト入力でいい仕上がりのコード生成が期待できる)
- デバッグの手戻りが減る ── 「古い書き方だった」系のエラーが起きにくくなる(エラー復旧で、何度もプロンプト入力指示する手間が減る)

Terraform MCP Server の本質は、AI に「最新の正しい情報を渡す仕組み」です。
AI が参照する情報の鮮度を上げることで、生成コードの品質が底上げされます。

生成AIで Terraform コードを書いている方々には、ぜひぜひ Terraform MCP Server の利用をオススメしていきたいです。

今後もブログでいろいろと発信していければと思います。最後までお読みいただき、ありがとうございました!

注意事項

- Terraform MCP Server は現在ベータ版です。本番環境での利用は慎重に判断してください。
- AIが生成したコードは必ず人間がレビューしてください。権限設計・ネットワーク制御・タグ規約などは生成に任せず、最終確認してください。

参考リンク

- [Terraform MCP Server(HashiCorp Docs)](https://developer.hashicorp.com/terraform/mcp-server)
- [Terraform MCP Server(GitHub)](https://github.com/hashicorp/terraform-mcp-server)
- [Terraform Registry](https://registry.terraform.io/)