Agent Skills by ALSEL
Anthropic ClaudeDevOps・インフラ⭐ リポ 0品質スコア 50/100

terraform-style-guide

HashiCorpの公式スタイル規約とベストプラクティスに従ってTerraform HCLコードを生成します。Terraformの構成ファイルの作成・レビュー・生成を行う際に使用してください。

description の原文を見る

Generate Terraform HCL code following HashiCorp's official style conventions and best practices. Use when writing, reviewing, or generating Terraform configurations.

SKILL.md 本文

Terraform Style Guide

HashiCorp の公式スタイル規約とベストプラクティスに従って Terraform コードを生成・保守します。

参考: HashiCorp Terraform Style Guide

コード生成戦略

Terraform コードを生成する際:

  1. プロバイダー設定とバージョン制約から開始
  2. 依存リソースの前にデータソースを作成
  3. 依存順にリソースを構築
  4. 主要なリソース属性に対して出力を追加
  5. すべての設定可能な値に変数を使用

ファイル構成

ファイル目的
terraform.tfTerraform およびプロバイダーのバージョン要件
providers.tfプロバイダー設定
main.tf主要なリソースとデータソース
variables.tf入力変数宣言(アルファベット順)
outputs.tf出力値宣言(アルファベット順)
locals.tfローカル値宣言

構成例

# terraform.tf
terraform {
  required_version = ">= 1.14"

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

# variables.tf
variable "environment" {
  description = "Target deployment environment"
  type        = string

  validation {
    condition     = contains(["dev", "staging", "prod"], var.environment)
    error_message = "Environment must be dev, staging, or prod."
  }
}

# locals.tf
locals {
  common_tags = {
    Environment = var.environment
    ManagedBy   = "Terraform"
  }
}

# main.tf
resource "aws_vpc" "main" {
  cidr_block           = var.vpc_cidr
  enable_dns_hostnames = true

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

# outputs.tf
output "vpc_id" {
  description = "ID of the created VPC"
  value       = aws_vpc.main.id
}

コード書式設定

インデントと配置

  • ネストレベルごとに 2 スペース を使用(タブは不可)
  • 連続した引数の等号を揃える
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  subnet_id     = "subnet-12345678"

  tags = {
    Name        = "web-server"
    Environment = "production"
  }
}

ブロック構成

引数がブロックの前に来て、メタ引数が最初に配置されます:

resource "aws_instance" "example" {
  # メタ引数
  count = 3

  # 引数
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  # ブロック
  root_block_device {
    volume_size = 20
  }

  # ライフサイクルは最後に
  lifecycle {
    create_before_destroy = true
  }
}

命名規約

  • すべての名前に 小文字とアンダースコア を使用
  • 説明的な名詞 を使用(リソースタイプは除外)
  • 具体的で意味のある名前にする
  • リソース名は単数形にする
  • 説明的な名前が冗長または不可能な場合、インスタンスが 1 つだけ存在する場合に限定して main を使用
# Bad
resource "aws_instance" "webAPI-aws-instance" {}
resource "aws_instance" "web_apis" {}
variable "name" {}

# Good
resource "aws_instance" "web_api" {}
resource "aws_vpc" "main" {}
variable "application_name" {}

変数

すべての変数には typedescription が必須です:

variable "instance_type" {
  description = "EC2 instance type for the web server"
  type        = string
  default     = "t2.micro"

  validation {
    condition     = contains(["t2.micro", "t2.small", "t2.medium"], var.instance_type)
    error_message = "Instance type must be t2.micro, t2.small, or t2.medium."
  }
}

variable "database_password" {
  description = "Password for the database admin user"
  type        = string
  sensitive   = true
}

出力

すべての出力には description が必須です:

output "instance_id" {
  description = "ID of the EC2 instance"
  value       = aws_instance.web.id
}

output "database_password" {
  description = "Database administrator password"
  value       = aws_db_instance.main.password
  sensitive   = true
}

動的リソース作成

count より for_each を推奨

# Bad - 複数リソースに count を使用
resource "aws_instance" "web" {
  count = var.instance_count
  tags  = { Name = "web-${count.index}" }
}

# Good - 名前付きインスタンスに for_each を使用
variable "instance_names" {
  type    = set(string)
  default = ["web-1", "web-2", "web-3"]
}

resource "aws_instance" "web" {
  for_each = var.instance_names
  tags     = { Name = each.key }
}

条件付き作成に count を使用

resource "aws_cloudwatch_metric_alarm" "cpu" {
  count = var.enable_monitoring ? 1 : 0

  alarm_name = "high-cpu-usage"
  threshold  = 80
}

セキュリティベストプラクティス

SECURITY.md を参照してください。リソースの暗号化、ステート内の機密データ防止、 セキュアな設定に関するガイダンスが含まれています。

バージョンピンニング

terraform {
  required_version = ">= 1.14"

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

各プロバイダーの最新メジャーバージョンと Terraform の最新マイナーバージョンを使用してください。 ただし、依存関係ロックファイルまたは設定で使用される他のモジュールによる制約がある場合を除きます。

バージョン制約演算子:

  • = 1.0.0 - 正確なバージョン
  • >= 1.0.0 - 以上
  • ~> 1.0 - 右端のコンポーネントのみ増加可能
  • >= 1.0, < 2.0 - バージョン範囲

プロバイダー設定

provider "aws" {
  region = "us-west-2"

  default_tags {
    tags = {
      ManagedBy = "Terraform"
      Project   = var.project_name
    }
  }
}

# マルチリージョン用のエイリアス付きプロバイダー
provider "aws" {
  alias  = "east"
  region = "us-east-1"
}

バージョン管理

コミットしないもの:

  • terraform.tfstateterraform.tfstate.backup
  • .terraform/ ディレクトリ
  • *.tfplan
  • 機密データを含む .tfvars ファイル

必ずコミットするもの:

  • すべての .tf 設定ファイル
  • .terraform.lock.hcl(依存関係ロックファイル)

検証ツール

コミット前に実行:

terraform fmt -recursive
terraform validate

その他のツール:

  • tflint - リント処理とベストプラクティス
  • checkov / tfsec - セキュリティスキャン

コードレビューチェックリスト

  • terraform fmt でコードが書式設定されている
  • terraform validate で設定が検証されている
  • ファイルが標準構成に従って整理されている
  • すべての変数に type と description がある
  • すべての出力に description がある
  • リソース名がアンダースコア付きの説明的な名詞を使用している
  • バージョン制約が明示的にピンニングされている
  • 機密値が sensitive = true でマーク されている
  • ハードコードされた認証情報またはシークレットがない
  • セキュリティベストプラクティスが適用されている

Based on: HashiCorp Terraform Style Guide

ライセンス: MPL-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
hashicorp
リポジトリ
hashicorp/agent-skills
ライセンス
MPL-2.0
最終更新
不明

Source: https://github.com/hashicorp/agent-skills / ライセンス: MPL-2.0

関連スキル

汎用DevOps・インフラ⭐ リポ 502

superpowers-streamer-cli

SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。

by rohanarun
汎用DevOps・インフラ⭐ リポ 493

catc-client-ops

Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。

by automateyournetwork
汎用DevOps・インフラ⭐ リポ 39,967

ci-cd-and-automation

CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。

by addyosmani
汎用DevOps・インフラ⭐ リポ 39,967

shipping-and-launch

本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。

by addyosmani
OpenAIDevOps・インフラ⭐ リポ 38,974

linear-release-setup

Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。

by novuhq
Anthropic ClaudeDevOps・インフラ⭐ リポ 2,159

tracking-application-response-times

API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。

by jeremylongshore
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: hashicorp · hashicorp/agent-skills · ライセンス: MPL-2.0