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.tf | Terraform 本体とプロバイダーのバージョン固定 |
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. 変数定義
すべての変数に description と type を定義。
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 が適用されているか |
| バージョン | プロバイダーのバージョンが固定されているか |
| 変数 | すべての変数に description と type があるか |
| 出力 | すべての出力に description があるか |
レポート出力フォーマット
markdown
## 🎨 コーディングスタイルレビュー結果 ### ✅ 準拠 - フォーマット - バージョン固定 ### ⚠️ 違反 | 項目 | ファイル | 問題 | 修正案 | | :--- | :--- | :--- | :--- | | 命名規則 | vpc.tf | `test-vpc` | `infra-spec-driven-dev-vpc-main` | ### 🛠 修正コード \`\`\`hcl # 修正後 \`\`\`