はじめに
HashiCorp から、AI で Terraform を書くときに使える公式のツール。
- Terraform MCP Server:Terraform Registry を検索するツール
- HashiCorp Agent Skills:Terraform の作法をまとめた手順書(Skill)
どちらも Claude Code にプラグインとして入れられます。それぞれ何ができるのかを実際に試してまとめてみました。
MCP と Skill
| Terraform MCP Server | HashiCorp Agent Skills | |
|---|---|---|
| 中身 | Registry を検索するツール 9 個 | 手順書(SKILL.md)16 個 |
| 得意なこと | 最新バージョン、引数、モジュール、ポリシーを調べる | スタイル修正、テスト作成、モジュール分割などの作業 |
| 解決すること | AI の知識が古い | AI の書き方が自己流 |
| 動き方 | Docker コンテナとして起動 | 作業に合わせて Claude が読み込む |
導入方法
# Terraform MCP Server(Docker Desktop の起動が必要)
claude plugin install terraform@claude-plugins-official
# HashiCorp Agent Skills
claude plugin marketplace add hashicorp/agent-skills
claude plugin install terraform@hashicorp
MCP サーバーは docker run で起動するので、Docker Desktop が止まっていると接続に失敗することに注意です。
Terraform MCP Server でできること
Terraform MCP Server のツールは、調べる対象で分けると 5 種類です。HCP Terraform のトークン(TFE_TOKEN)がなくても、9 個すべてが使えました。
| 調べるもの | ツール | 例えばこう聞ける |
|---|---|---|
| provider のバージョン | get_latest_provider_version |
「aws provider の最新は?」 |
| provider にあるもの | get_provider_capabilities |
「aws provider にはどんなリソースがある?」 |
| リソースの使い方 |
search_providers / get_provider_details
|
「aws_s3_bucket_versioning の引数は?」 |
| 公開モジュール |
search_modules / get_module_details / get_latest_module_version
|
「VPC を作るモジュールはある?」 |
| ポリシー |
search_policies / get_policy_details
|
「AWS 向けの CIS ポリシーはある?」 |
実際に呼び出してみた結果です(2026-10-06 時点)。
| 聞いたこと | 返ってきた内容 |
|---|---|
| aws provider の最新 | 6.67.0 |
| aws provider にあるもの | リソース 1722 個、データソース 680 個、Action 12 個、Ephemeral Resource 11 個 |
aws_s3_bucket_versioning の引数 |
bucket、versioning_configuration、mfa などの表と、「Enabled から Disabled には戻せない」といった注意点 |
| VPC のモジュール |
terraform-aws-modules/vpc/aws 6.7.3(約 2.2 億ダウンロード)など |
| CIS のポリシー |
CIS-Policy-Set-for-AWS-Terraform(Sentinel のポリシー集) |
Agent Skills でできること
16 個の Skill を用途で分けると、次のようになります。Terraform を書く人向けは上の 2 グループで、残りは provider を開発する人向けです。
| 用途 | Skill | できること |
|---|---|---|
| 構成を書く | terraform-style-guide |
Style Guide に沿って書く・直す |
terraform-test |
.tftest.hcl のテストを書いて terraform test を実行する |
|
refactor-module |
1 ファイルの構成を再利用できるモジュールに分ける | |
azure-verified-modules |
Azure の公式認定モジュールの要件に沿って書く | |
| 運用・統制 | terraform-search-import |
既存のクラウドリソースを探し、まとめて Terraform 管理に取り込む |
terraform-stacks |
Terraform Stacks の構成(.tfcomponent.hcl など)を書く |
|
terraform-policy |
Terraform Policy を書く・テストする、Sentinel から変換する | |
| provider 開発 |
new-terraform-provider ほか 8 個 |
provider の雛形、リソース実装、ドキュメント、テストなど |
Skill 名を指定しなくても、「main.tf をレビューして、作法どおりに直して」と頼むだけで Claude が terraform-style-guide を自分で読み込みました。 ここからは、書く人向けの 2 つを試した結果です。
terraform-style-guide:作法どおりに直してくれる
わざと崩して書いた S3 バケットの main.tf を、次の指示でレビューしてもらいました。
/terraform:terraform-style-guide main.tf をスタイルガイドに沿ってレビューして修正して。
1 ファイルだった構成が、Style Guide の推奨どおりに用途別のファイルへ分かれました。
| 直された点 | Before | After |
|---|---|---|
| ファイル構成 |
main.tf だけ |
terraform.tf / providers.tf / variables.tf / outputs.tf / main.tf
|
| リソース名 |
MyBucket、v
|
main(小文字とアンダースコア) |
| 変数 | variable "env" {} |
type = string と description を追加 |
| バージョン固定 | なし |
required_version と aws ~> 6.0 を追加 |
パブリックアクセスブロックや暗号化のように挙動が変わる変更は、「今回は追加していない」と提案だけにとどめていました。 勝手に構成を変えないのは安心できます。
terraform-test:テストを書いて実行まで
Terraform のテストは、「plan した結果がこうなっているはず」という確認を .tftest.hcl に書くしくみです。次のように頼みました。
/terraform:terraform-test この構成のテストを書いて。AWS の認証情報は使えないので mock_provider で動くようにし、バケット名に env が入ること・バージョニングが Enabled であること・env が空文字ならエラーになること を確認したい。最後に terraform test を実行して。
mock_provider(AWS につながない偽の provider)を使ったテストが作られ、variables.tf には空文字を弾く validation が追加されました。
mock_provider "aws" {}
variables {
env = "dev"
}
run "versioning_is_enabled" {
command = plan
assert {
condition = aws_s3_bucket_versioning.main.versioning_configuration[0].status == "Enabled"
error_message = "Bucket versioning should be Enabled"
}
}
run "empty_env_is_rejected" {
command = plan
variables {
env = ""
}
expect_failures = [var.env]
}
Claude が terraform init と terraform test まで実行し、3 件とも pass しました。
テストが本当に効いているかを確かめるため、バージョニングを Suspended に書き換えて再実行しました。結果は versioning_is_enabled だけが fail になり、テストが効いていることも確認できました。
run "bucket_name_includes_env"... pass
run "versioning_is_enabled"... fail
run "empty_env_is_rejected"... pass
Failure! 2 passed, 1 failed.
まとめ
MCP が情報の鮮度を、Skill が書き方の作法を補ってくれます。 どちらを使うかは Claude が作業に合わせて判断してくれるので、両方入れておくだけで良さそうです。