AgentSkillsCN

terraform-coding-style

检查Terraform代码的格式、命名规范及样式的一致性。当用户要求检查代码格式、样式或确认代码一致性时使用。

SKILL.md
--- frontmatter
name: terraform-coding-style
description: Terraformコードのフォーマット、命名規則、およびスタイルの一貫性をチェックします。ユーザーがコードのフォーマット、スタイルのチェック、またはコードの一貫性の確認を求めた場合に使用してください。

Terraform コーディングスタイルスキル

このスキルを使用して、Terraform コードがプロジェクトのコーディング規約に準拠しているか検証します。


基本原則

  • 可読性: 誰が読んでも理解しやすいコードを書く
  • 再利用性: モジュール化を意識し、DRY を守る
  • 安全性: 機密情報はコードに含めず、最小権限の原則を守る
  • 一貫性: 命名規則やディレクトリ構成を統一する

命名規則

リソース名(AWS 上の名前)

フォーマット: {project}-{env}-{resource}-{name}

要素説明
projectプロジェクト名infra-spec-driven
env環境名dev, stg, prod
resourceリソースの略称vpc, ec2, s3, rds
name役割や識別子main, app, logs

:

  • VPC: infra-spec-driven-prod-vpc-main
  • S3: infra-spec-driven-prod-s3-logs
  • RDS: infra-spec-driven-dev-rds-primary

Terraform リソース名(内部参照用)

スネークケースを使用し、リソースタイプを含めない簡潔な名前にする。

hcl
# ✅ 良い例
resource "aws_vpc" "main" {}

# ❌ 悪い例(冗長)
resource "aws_vpc" "myprj_dev_vpc" {}

ファイル構成

ファイル役割
main.tfリソースの定義、モジュールの呼び出し
variables.tf入力変数の定義(型、デフォルト値、説明を必ず記述)
outputs.tf出力値の定義
versions.tfTerraform 本体とプロバイダーのバージョン固定
locals.tfローカル変数の定義
backend.tfバックエンド設定

コーディングスタイル

1. フォーマット

必ず terraform fmt を実行してフォーマットを統一。

hcl
resource "aws_vpc" "main" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_hostnames = true
  enable_dns_support   = true

  tags = {
    Name = "infra-spec-driven-dev-vpc-main"
  }
}

2. 変数定義

すべての変数に descriptiontype を定義。

hcl
variable "vpc_cidr" {
  description = "The CIDR block for the VPC"
  type        = string
  default     = "10.0.0.0/16"
}

3. 出力定義

description を必ず記述。

hcl
output "vpc_id" {
  description = "The ID of the VPC"
  value       = aws_vpc.main.id
}

4. バージョン固定

hcl
terraform {
  required_version = ">= 1.5.0"

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

5. タグ付け

共通タグを locals で定義し、merge で使用。

hcl
locals {
  common_tags = {
    Project     = var.project_name
    Environment = var.environment
    ManagedBy   = "Terraform"
  }
}

resource "aws_vpc" "main" {
  # ...
  tags = merge(local.common_tags, {
    Name = "${var.project_name}-${var.environment}-vpc-main"
  })
}

チェックリスト

項目チェック内容
命名規則{project}-{env}-{resource}-{name} 形式に従っているか
ファイル構成main.tf, variables.tf, outputs.tf に分割されているか
フォーマットterraform fmt が適用されているか
バージョンプロバイダーのバージョンが固定されているか
変数すべての変数に descriptiontype があるか
出力すべての出力に description があるか

レポート出力フォーマット

markdown
## 🎨 コーディングスタイルレビュー結果

### ✅ 準拠
- フォーマット
- バージョン固定

### ⚠️ 違反
| 項目 | ファイル | 問題 | 修正案 |
| :--- | :--- | :--- | :--- |
| 命名規則 | vpc.tf | `test-vpc` | `infra-spec-driven-dev-vpc-main` |

### 🛠 修正コード
\`\`\`hcl
# 修正後
\`\`\`