Claude CodeにTerraformコードを書かせてみたら「セキュリティグループが0.0.0.0/0で生成された」「apply後にState管理が壊れた」という声をよく聞きます。Claude Code×Terraformは強力ですが、CLAUDE.mdの設計が品質をほぼ決定します。実践的なCLAUDE.md設計・MCPサーバー設定・失敗回避まで一気に解説します。
Claude Code + Terraformで何ができるか?
Claude CodeはHCLコードを自然言語から生成し、fmt→validate→planまで自動実行できます。インフラエンジニアとしての実感では既存AWSのTerraform化(Import)が特に強力で、2〜3日の作業が数時間に短縮されました。
| 用途 | Claude Codeの効果 | 難易度 |
|---|---|---|
| 新規リソースコード生成 | 自然言語→HCL即時生成 | 低 |
| 既存リソースのImport | import→state確認→コード修正を自動化 | 中 |
| GitHub Issue→自動PR | Issue本文を読んでPR+Planコメント | 高 |
| エラー自動修正 | plan/applyエラーを最大3回自動リトライ | 高 |
CLAUDE.mdの設計が品質を左右する
Claude Code×Terraformで最も重要なのがCLAUDE.mdの禁止事項定義です。ここを省くと、Claudeが訓練データの記憶だけでリソース引数を書き始め、古いAPI仕様や架空のパラメータが混入します。
CLAUDE.mdに必ず書く6セクション
| セクション | 記載内容 |
|---|---|
| 言語設定 | 「必ず日本語で応答する」 |
| プロジェクト概要 | クラウド・Terraformバージョン・対象リージョン |
| 作業フロー | aws-knowledge取得→生成→fmt→validate→plan→apply |
| ディレクトリ構成 | modules/・environments/ の構造と命名規則 |
| 禁止事項 | 記憶のみでの引数記述・無断apply・0.0.0.0/0使用 |
| Definition of Done | init/fmt/validate/tflint/planの全パスを完了条件とする |
CLAUDE.md 禁止事項セクションのサンプル
## 禁止事項
- terraform-registry MCPサーバーで確認せずにリソース引数を記述しない
- `terraform apply` を承認なしに実行しない
- security_group でポート 0.0.0.0/0 を使用しない(専用セクションで明示)
- IAMポリシーで `"Action": "*"` を使用しない
- 存在しない引数を使わない(必ずドキュメントを参照する)
実践:MCP設定とコード生成
.mcp.json設定(terraform-registry + aws-knowledge)
{
"mcpServers": {
"terraform-registry": {
"command": "npx",
"args": ["-y", "@hashicorp/mcp-server-terraform-registry"]
},
"aws-knowledge": {
"command": "npx",
"args": ["-y", "@aws/aws-knowledge-mcp-server"]
}
}
}
上記MCP設定後、「modules/vpc/を作成、terraform-registryで引数確認してから」のように自然言語で指示するとfmt→validate→planまで自動実行します。インフラエンジニア向けClaude Code活用ガイドも参照してください。
このMCP設定により、ClaudeはTerraform Registryの最新ドキュメントを参照してからコードを生成します。幻覚コードの発生率が大幅に低下します。
よくある失敗パターンと対策
CLAUDE.mdの禁止事項に「0.0.0.0/0を使用しない」を明記してください。さらにtflintのルールセットにCIS AWSベンチマークを追加し、Definition of DoneにCheckovパスを含めると自動検出できます。
CLAUDE.mdに「terraform-registry MCPで確認せずに引数を記述しない」を追加します。validateが失敗した際に自動リトライさせる設定も合わせて有効です。
S3バックエンド + DynamoDBによるStateロックを事前に設定してください。backend.tfをClaude Codeに生成させる際も「DynamoDBロックを必ず含める」と指示するのが確実です。
まとめ:Claude Code × TerraformでIaC生産性を上げる3原則
- CLAUDE.mdの禁止事項を先に設計する(後付けは手遅れ)
- MCP(terraform-registry + aws-knowledge)を必ず設定して幻覚を防ぐ
- tflint/CheckovをDefinition of Doneに含めてセキュリティを自動担保する
全体の使いこなし方はClaude Code完全ガイドも参考にしてください。
よくある質問(FAQ)
Claude.ai ProまたはMax($100〜$200/月)が推奨です。Proでも使えますが、大規模リポジトリではコンテキスト上限に注意が必要です。
本番環境では推奨しません。staging環境のみ自動apply可とし、本番はplan結果を人間がレビューしてapplyする設計が安全です。CLAUDE.mdに「本番applyは禁止」と明記してください。
terraform import × Claude Codeは非常に相性が良いです。「このリソースをimportしてコードに変換してください」と指示するだけで、import→state確認→コード生成を自動化できます。
CLAUDE.mdに公式ドキュメントURLを参照先として記載し、WebFetchで参照させる方法が代替になります。ただしMCP設定ありの方が精度は高いです。
モジュールごとにCLAUDE.mdを分散配置し、作業対象モジュールだけでClaude Codeを起動する設計が有効です。コンテキスト上限の影響を最小化できます。

コメント