terraform-devlisted
Install: claude install-skill iamtatsuki05/dotfiles
# Terraform開発スキル
Terraformコードの実装、検証、リファクタリング、モジュール設計を効率的に行うためのガイド。
## 実装前の必須確認
**プロジェクト構成ファイルを必ず確認する。** Terraformバージョン、プロバイダ、バックエンド設定を把握する。
確認項目:
- `versions.tf` / `terraform.tf`: required_version, required_providers
- `backend.tf`: S3/GCS/Azure Blob等のバックエンド設定
- `.terraform-version`: tfenvで使用するバージョン
- `terragrunt.hcl`: Terragrunt使用時の設定
- `.tflint.hcl`: TFLint設定
- workspace / backend / state の場所、対象環境、production 影響
- `terraform plan` を安全に実行できる認証・変数・backend 初期化状態
`apply`、`destroy`、`import`、state 操作、production workspace への変更、リソース削除を含む plan は、対象環境・影響・戻し方を示してユーザー承認を取る。原則としてこの skill では plan までを標準にし、apply は明示依頼がある場合だけ行う。
### プロジェクト構造
既存プロジェクトでは既存のディレクトリ構成と分割方針を優先する。新規なら `environments/<env>/`(env ごとの root module)+ `modules/<name>/` の構成を基本とする。モジュール内のファイル分割や大規模構成の例は [references/module-design.md](references/module-design.md) の「ディレクトリ構成」を参照。
## コーディング規約
### 基本スタイル
- 共通タグや共通値は `locals` に一元化し、リソース側で `merge()` する。AWS なら provider の `default_tags` も検討する。
- 環境や既存リソースへの依存は ID のハードコードでなく data source で参照する。
- 条件付きリソース作成は `count = 条件 ? 1 : 0` を使う(ただし後から `for_each` に変えると置換が起きる点に注意��。
実例は [references/module-design.md](references/module-design.md) と [references/provider-patterns.md](references/provider-patterns.md) を参照。
### 変数と出力
変数には `description` と `type` を必ず書き、取りうる値が限られるなら `validation` を付ける。秘匿値の出力には `sensitive = true` を付ける。
```hcl
# variables.tf
variable "environment" {
description = "Environment name (dev, staging, production)"
type = string
validation {
condition